Ë
    Ç]j\  ã                   óv  — d dl Zd dlZd dlZd dlZd dlmZ d dlmZmZ d dlm	Z
 d dlmZ d dlmZ d dlmZ d dlmZmZmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZmZmZ d dl m!Z!m"Z" d dl#m$Z$ d dl%m&Z& d dl'm(Z( d dl)m*Z*m+Z+ d dl,m-Z-m.Z.m/Z/ d dl0m1Z1  e
j                  d«      Z2de2_3         e
j                  d«      Z4e
jj                  e4_3        dZ6dZ7e8Z9h d£Z:d„ Z;d„ Z< G d„ d«      Z= G d„ de=e«      Z> G d„ d e=e«      Z? G d!„ d"e=e«      Z@ ed#d$d%g«      ZA ed&g d'¢«      ZB G d(„ d)«      ZC G d*„ d+eC«      ZDy),é    N)Ú
namedtuple)ÚdatetimeÚtimezone©Úcharset)Ú	generator)ÚHeaderParseError)ÚHeader)ÚAddressÚAddressHeaderÚparser)ÚMIMEBase)ÚMIMEMessage)ÚMIMEMultipart)ÚMIMEText)Ú
formataddrÚgetaddressesÚ
make_msgid)ÚBytesIOÚStringIO)ÚPath)Úsettings)ÚDNS_NAME)ÚRemovedInDjango70WarningÚdeprecate_posargs)Úforce_bytesÚ	force_strÚpunycode)Úget_current_timezoneúutf-8zapplication/octet-streamiæ  >   ú	resent-ccú	resent-toú
resent-bccúresent-fromúresent-senderÚccÚtoÚbccÚfromÚsenderúreply-toc                 óü  ‡— t        j                  dt        «       ‰xs t        j                  Št        |«      }d|v sd|v rt        d|›d| ›d�«      ‚	 |j                  d«       | j                  «       dk(  rt        |«      j                  «       }| |fS # t        $ r[ | j                  «       t        v r%d	j                  ˆfd
„t        |f«      D «       «      }nt        |‰«      j                  «       }Y | |fS w xY w)z6Forbid multi-line headers to prevent header injection.z¯The internal API forbid_multi_line_headers() is deprecated. Python's modern email API (with email.message.EmailMessage or email.policy.default) will reject multi-line headers.ú
úz*Header values can't contain newlines (got z for header ú)ÚasciiÚsubjectú, c              3   ó6   •K  — | ]  }t        |‰«      –— Œ y ­w©N)Úsanitize_address)Ú.0ÚaddrÚencodings     €úO/var/www/zogu/zoguvenv/lib/python3.12/site-packages/django/core/mail/message.pyú	<genexpr>z,forbid_multi_line_headers.<locals>.<genexpr>U   s   øè ø€ ò Ø59Ô   x×0ñùs   ƒ)ÚwarningsÚwarnr   r   ÚDEFAULT_CHARSETÚstrÚBadHeaderErrorÚencodeÚlowerr
   ÚUnicodeEncodeErrorÚADDRESS_HEADERSÚjoinr   )ÚnameÚvalr8   s     `r9   Úforbid_multi_line_headersrG   B   sú   ø€ ä‡M�Mð	Aô 	!ô	ð Ò3œ8×3Ñ3€HÜ
ˆc‹(€CØˆs�{�d˜c‘kÝÚMPÒRVÐWó
ð 	
ð'Ø�
‰
�7Ôð �:‰:‹<˜9Ò$Ü˜“+×$Ñ$Ó&ˆCØ�ˆ9Ðøô ò 1Ø�:‰:‹<œ?Ñ*Ø—)‘)ó Ü=IÈ3È&Ó=Qôó ‰Cô ˜˜hÓ'×.Ñ.Ó0ˆCøð �ˆ9Ðð1ús   ÁB ÂAC;Ã:C;c                 ó|  — t        j                  dt        «       d}t        | t        «      set        | «      } 	 t        j                  | «      \  }}|rt        d|›d| ›d�«      ‚|j                  xs d}|j                  }|j                  xs d}n-| \  }}d|vrt        d	|› d�«      ‚|j                  dd
«      \  }}||z   |z   }d|v sd|v rt        d«      ‚	 |j                  d«       t!        |«      j                  «       }	 |j                  d«       t%        |«      }t'        ||¬«      }	t)        ||	j*                  f«      S # t        t        t        f$ r t        d| z  «      ‚w xY w# t"        $ r t!        ||«      j                  «       }Y ŒŒw xY w# t"        $ r t!        ||«      j                  «       }Y Œ£w xY w)zF
    Format a pair of (name, address) or an email address string.
    a  The internal API sanitize_address() is deprecated. Python's modern email API (with email.message.EmailMessage or email.policy.default) will handle most required validation and encoding. Use Python's email.headerregistry.Address to construct formatted addresses from component parts.NzInvalid address; only z could be parsed from "ú"Ú zInvalid address "%s"ú@zInvalid address "é   r-   r.   z7Invalid address; address parts cannot contain newlines.r0   )ÚusernameÚdomain)r;   r<   r   Ú
isinstanceÚtupler   r   Úget_mailboxÚ
ValueErrorÚdisplay_nameÚ
local_partrN   r	   Ú
IndexErrorÚrsplitr@   r
   rB   r   r   r   Ú	addr_spec)
r7   r8   ÚaddressÚtokenÚrestÚnmÚ	localpartrN   Úaddress_partsÚparsed_addresss
             r9   r5   r5   a   sÏ  € ô ‡M�Mð	5ô
 	!ôð €GÜ�dœEÔ"Ü˜‹ˆð	(Ü ×,Ñ,¨TÓ2‰KˆE�4ñ å ÚLQÒSWÐXóð ð ×#Ñ#Ò) rˆBØ×(Ñ(ˆIØ—\‘\Ò' R‰Fà‰ˆˆGØ�gÑÜÐ0°°	¸Ð;Ó<Ð<Ø#ŸN™N¨3°Ó2Ñˆ	�6à˜‘N VÑ+€MØˆ}Ñ ¨Ñ 5ÜÐRÓSÐSð+Ø
�	‰	�'ÔÜ�B‹Z×ÑÓ ˆð9Ø×Ñ˜Ô!ô �fÓ€Fä i¸Ô?€NÜ�r˜>×3Ñ3Ð4Ó5Ð5øôE !¤*¬jÐ9ò 	<ÜÐ3°dÑ:Ó;Ð;ð	<ûô2 ò +Ü�B˜Ó!×(Ñ(Ó*Šð+ûô ò 9Ü˜9 hÓ/×6Ñ6Ó8Š	ð9ús/   ¹E Ã*E, ÄF Å#E)Å,#FÆFÆ#F;Æ:F;c                   ó   — e Zd Zdd„Zdd„Zy)Ú	MIMEMixinc                 óŒ   — t        «       }t        j                  |d¬«      }|j                  | ||¬«       |j	                  «       S )a&  Return the entire formatted message as a string.
        Optional `unixfrom' when True, means include the Unix From_ envelope
        header.

        This overrides the default as_string() implementation to not mangle
        lines that begin with 'From '. See bug #13433 for details.
        F©Úmangle_from_©ÚunixfromÚlinesep)r   r   Ú	GeneratorÚflattenÚgetvalue©Úselfre   rf   ÚfpÚgs        r9   Ú	as_stringzMIMEMixin.as_stringš   s;   € ô ‹ZˆÜ×Ñ °Ô7ˆØ	�	‰	�$ °7ˆ	Ô;Ø�{‰{‹}Ðó    c                 óŒ   — t        «       }t        j                  |d¬«      }|j                  | ||¬«       |j	                  «       S )a"  Return the entire formatted message as bytes.
        Optional `unixfrom' when True, means include the Unix From_ envelope
        header.

        This overrides the default as_bytes() implementation to not mangle
        lines that begin with 'From '. See bug #13433 for details.
        Frb   rd   )r   r   ÚBytesGeneratorrh   ri   rj   s        r9   Úas_byteszMIMEMixin.as_bytes§   s;   € ô ‹YˆÜ×$Ñ$ R°eÔ<ˆØ	�	‰	�$ °7ˆ	Ô;Ø�{‰{‹}Ðro   N)Fr-   )Ú__name__Ú
__module__Ú__qualname__rn   rr   © ro   r9   r`   r`   ™   s   „ óôro   r`   c                   ó   — e Zd Zd„ Zy)ÚSafeMIMEMessagec                 óR   — t        ||d«      \  }}t        j                  | ||«       y )Nr0   )rG   r   Ú__setitem__©rk   rE   rF   s      r9   rz   zSafeMIMEMessage.__setitem__·   s(   € ô .¨d°C¸ÓA‰	ˆˆcÜ×Ñ  d¨CÕ0ro   N)rs   rt   ru   rz   rv   ro   r9   rx   rx   ¶   s   „ ó1ro   rx   c                   ó"   — e Zd Zdd„Zd„ Zdd„Zy)ÚSafeMIMETextNc                 óD   — || _         t        j                  | |||¬«       y )N)Ú_subtypeÚ_charset)r8   r   Ú__init__)rk   Ú_textr   r€   s       r9   r�   zSafeMIMEText.__init__À   s   € Ø ˆŒÜ×Ñ˜$ °À8ÖLro   c                 óf   — t        ||| j                  «      \  }}t        j                  | ||«       y r4   )rG   r8   r   rz   r{   s      r9   rz   zSafeMIMEText.__setitem__Ä   s*   € Ü-¨d°C¸¿¹ÓG‰	ˆˆcÜ×Ñ˜T 4¨Õ-ro   c                 óÎ   — |dk(  rHt        |t        j                  «      s.t        d„ |j                  «       D «       «      }|rt        nt
        }t        j                  | ||¬«       y )Nr    c              3   ó`   K  — | ]&  }t        |j                  d ¬«      «      t        kD  –— Œ( y­w)Úsurrogateescape)ÚerrorsN)Úlenr@   ÚRFC5322_EMAIL_LINE_LENGTH_LIMIT)r6   Úlines     r9   r:   z+SafeMIMEText.set_payload.<locals>.<genexpr>Ê   s3   è ø€ ò !ð ô �D—K‘KÐ'8�KÓ9Ó:Ü1õ2ñ!ùs   ‚,.r   )rO   ÚCharsetÚanyÚ
splitlinesÚutf8_charset_qpÚutf8_charsetr   Úset_payload)rk   Úpayloadr   Úhas_long_liness       r9   r�   zSafeMIMEText.set_payloadÈ   sV   € Ø�gÒ¤j°¼'¿/¹/Ô&JÜ ñ !ð $×.Ñ.Ó0ô!ó ˆNñ *8•o¼\ˆGÜ×Ñ˜T 7°GÖ<ro   )ÚplainNr4   )rs   rt   ru   r�   rz   r�   rv   ro   r9   r}   r}   ¿   s   „ óMò.ô
=ro   r}   c                   ó   — e Zd Z	 dd„Zd„ Zy)ÚSafeMIMEMultipartNc                 óD   — || _         t        j                  | |||fi |¤Ž y r4   )r8   r   r�   )rk   r   ÚboundaryÚ	_subpartsr8   Ú_paramss         r9   r�   zSafeMIMEMultipart.__init__×   s$   € ð !ˆŒÜ×Ñ˜t X¨x¸ÑNÀgÓNro   c                 óf   — t        ||| j                  «      \  }}t        j                  | ||«       y r4   )rG   r8   r   rz   r{   s      r9   rz   zSafeMIMEMultipart.__setitem__Ý   s*   € Ü-¨d°C¸¿¹ÓG‰	ˆˆcÜ×!Ñ! $¨¨cÕ2ro   )ÚmixedNNN)rs   rt   ru   r�   rz   rv   ro   r9   r•   r•   Ö   s   „ àHLóOó3ro   r•   ÚEmailAlternativeÚcontentÚmimetypeÚEmailAttachment)Úfilenamer�   rž   c            	       óÌ   — e Zd ZdZdZdZ eeg d¢«      	 	 	 	 ddddddddœd„«       Zdd„Z	e
j                  j                  dœd„Zd	„ Zdd
„Zdd„Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚEmailMessagez"A container for email information.r“   N©r(   Ú
connectionÚattachmentsÚheadersr&   Úreply_toc                ó  — |r,t        |t        «      rt        d«      ‚t        |«      | _        ng | _        |	r,t        |	t        «      rt        d«      ‚t        |	«      | _        ng | _        |r,t        |t        «      rt        d«      ‚t        |«      | _        ng | _        |
r,t        |
t        «      rt        d«      ‚t        |
«      | _        ng | _        |xs t        j                  | _
        || _        |xs d| _        g | _        |rn|D ]i  }t        |t        j                  j                   «      r| j#                  |«       Œ9t        |t$        «      r| j#                  |«       Œ[ | j"                  |Ž  Œk |xs i | _        || _        y)úg
        Initialize a single email message (which can be sent to multiple
        recipients).
        z%"to" argument must be a list or tuplez%"cc" argument must be a list or tuplez&"bcc" argument must be a list or tuplez+"reply_to" argument must be a list or tuplerJ   N)rO   r>   Ú	TypeErrorÚlistr'   r&   r(   r§   r   ÚDEFAULT_FROM_EMAILÚ
from_emailr1   Úbodyr¥   ÚemailÚmessageÚMIMEPartÚattachr   Úextra_headersr¤   )rk   r1   r®   r­   r'   r(   r¤   r¥   r¦   r&   r§   Ú
attachments               r9   r�   zEmailMessage.__init__ï   sG  € ñ: Ü˜"œcÔ"ÜÐ GÓHÐHÜ˜2“hˆD�GàˆDŒGÙÜ˜"œcÔ"ÜÐ GÓHÐHÜ˜2“hˆD�GàˆDŒGÙÜ˜#œsÔ#ÜÐ HÓIÐIÜ˜C“yˆD�HàˆDŒHÙÜ˜(¤CÔ(ÜÐ MÓNÐNÜ  ›NˆD�MàˆDŒMØ$ÒC¬×(CÑ(CˆŒØˆŒØ’J˜BˆŒ	ØˆÔÙØ)ò -�
Ü˜j¬%¯-©-×*@Ñ*@ÔAØ—K‘K 
Õ+Ü 
¬HÔ5à—K‘K 
Õ+à�D—K‘K Ò,ð-ð %š]¨ˆÔØ$ˆ�ro   c                 óZ   — ddl m} | j                  s ||¬«      | _        | j                  S )Nr   )Úget_connection)Úfail_silently)Údjango.core.mailr¶   r¤   )rk   r·   r¶   s      r9   r¶   zEmailMessage.get_connection4  s"   € Ý3à�ŠÙ,¸=ÔIˆDŒOØ�‰Ðro   ©Úpolicyc                óŒ  — t         j                  j                  |¬«      }| j                  |«       | j	                  |«       t        | j                  «      |d<   t        | j                  j                  d| j                  «      «      |d<   | j                  |d| j                  «       | j                  |d| j                  «       | j                  |d| j                  «       | j                  D �cg c]  }|j                  «       ‘Œ }}d|vrCt        j                   rt#        «       }nt$        j&                  }t)        j*                  |«      |d<   d	|vrt-        t.        ¬
«      |d<   | j                  j1                  «       D ](  \  }}|j                  «       dvsŒt3        |d¬«      ||<   Œ* | j5                  |«       |S c c}w )Nr¹   ÚSubjectÚFromÚToÚCczReply-ToÚdateÚDatez
message-id)rN   z
Message-ID>   r&   r'   r)   r+   T)Ústrings_only)r¯   r°   r¢   Ú_add_bodiesÚ_add_attachmentsr>   r1   r³   Úgetr­   Ú_set_list_header_if_not_emptyr'   r&   r§   rA   r   ÚEMAIL_USE_LOCALTIMEr   r   Úutcr   Únowr   r   Úitemsr   Ú#_idna_encode_address_header_domains)rk   rº   ÚmsgÚkeyÚheader_namesÚtzrE   Úvalues           r9   r°   zEmailMessage.message;  sx  € Ü�m‰m×(Ñ(°Ð(Ó7ˆØ×Ñ˜ÔØ×Ñ˜cÔ"ä˜TŸ\™\Ó*ˆˆI‰Ü˜$×,Ñ,×0Ñ0°¸¿¹ÓIÓJˆˆF‰Ø×*Ñ*¨3°°d·g±gÔ>Ø×*Ñ*¨3°°d·g±gÔ>Ø×*Ñ*¨3°
¸D¿M¹MÔJð 04×/AÑ/AÖB¨˜Ÿ	™	�ÐBˆÐBØ˜Ñ%Ü×+Ò+Ü)Ó+‘ä—\‘\�Ü"Ÿ,™, rÓ*ˆC�‰KØ˜|Ñ+ä *´(Ô ;ˆC�ÑØ×-Ñ-×3Ñ3Ó5ò 	@‰KˆD�%à�z‰z‹|Ð#CÒCÜ% e¸$Ô?��D’	ð	@ð 	×0Ñ0°Ô5Øˆ
ùò Cs   Ã2Gc                 óz   — | j                   | j                  z   | j                  z   D �cg c]  }|sŒ|‘Œ	 c}S c c}w )z‚
        Return a list of all recipients of the email (includes direct
        addressees as well as Cc and Bcc entries).
        )r'   r&   r(   )rk   r¯   s     r9   Ú
recipientszEmailMessage.recipientsY  s0   € ð
 %)§G¡G¨d¯g©gÑ$5¸¿¹Ñ$@ÖK˜%ÂU’ÒKÐKùÒKs   ©8±8c                 óf   — | j                  «       sy| j                  |«      j                  | g«      S )zSend the email message.r   )rÒ   r¶   Úsend_messages)rk   r·   s     r9   ÚsendzEmailMessage.send`  s/   € à�‰Ô ð Ø×"Ñ" =Ó1×?Ñ?ÀÀÓGÐGro   c                 óš  — t        |t        j                  j                  «      r+|€|�t	        d«      ‚| j
                  j                  |«       yt        |t        «      rEt        j                  dt        «       |€|�t	        d«      ‚| j
                  j                  |«       y|€t	        d«      ‚|xs  t        j                  |«      d   xs t        }|j                  dd«      \  }}|d	k(  r!t        |t        «      r	 |j!                  «       }| j
                  j                  t%        |||«      «       y# t"        $ r	 t        }Y Œ8w xY w)
a÷  
        Attach a file with the given filename and content. The filename can
        be omitted and the mimetype is guessed, if not provided.

        If the first parameter is a MIMEBase subclass, insert it directly
        into the resulting message attachments.

        For a text/* mimetype (guessed or specified), when a bytes object is
        specified as content, decode it as UTF-8. If that fails, set the
        mimetype to DEFAULT_ATTACHMENT_MIME_TYPE and don't decode the content.
        NzLcontent and mimetype must not be given when a MIMEPart instance is provided.zKMIMEBase attachments are deprecated. Use an email.message.MIMEPart instead.zLcontent and mimetype must not be given when a MIMEBase instance is provided.zcontent must be provided.r   ú/rL   Útext)rO   r¯   r°   r±   rR   r¥   Úappendr   r;   r<   r   Ú	mimetypesÚ
guess_typeÚDEFAULT_ATTACHMENT_MIME_TYPEÚsplitÚbytesÚdecodeÚUnicodeDecodeErrorrŸ   )rk   r    r�   rž   ÚbasetypeÚsubtypes         r9   r²   zEmailMessage.attachh  sN  € ô �h¤§¡× 6Ñ 6Ô7ØÐ" hÐ&:Ü ð,óð ð ×Ñ×#Ñ# HÕ-Ü˜¤(Ô+Ü�M‰Mð:ä(ôð
 Ð" hÐ&:Ü ð,óð ð ×Ñ×#Ñ# HÕ-Øˆ_ÜÐ8Ó9Ð9ð ò 0Ü×'Ñ'¨Ó1°!Ñ4ò0ä/ð ð
 !)§¡¨s°AÓ 6ÑˆH�gà˜6Ò!Ü˜g¤uÔ-ð@Ø")§.¡.Ó"2˜ð ×Ñ×#Ñ#¤O°H¸gÀxÓ$PÕQøô .ò @ô $@šð@ús   ÄD8 Ä8E
Å	E
c                 óÀ   — t        |«      }|j                  d«      5 }|j                  «       }| j                  |j                  ||«       ddd«       y# 1 sw Y   yxY w)al  
        Attach a file from the filesystem.

        Set the mimetype to DEFAULT_ATTACHMENT_MIME_TYPE if it isn't specified
        and cannot be guessed.

        For a text/* mimetype (guessed or specified), decode the file's content
        as UTF-8. If that fails, set the mimetype to
        DEFAULT_ATTACHMENT_MIME_TYPE and don't decode the content.
        ÚrbN)r   ÚopenÚreadr²   rE   )rk   Úpathrž   Úfiler�   s        r9   Úattach_filezEmailMessage.attach_fileœ  sN   € ô �D‹zˆØ�Y‰Y�t‹_ð 	6 Ø—i‘i“kˆGØ�K‰K˜Ÿ	™	 7¨HÔ5÷	6÷ 	6ñ 	6ús   �.AÁAc                 óæ   — | j                   s| j                  sY| j                  xs t        j                  }t        | j                   xs d|d¬«      }|j                  || j                  |¬«       y y )NrJ   r†   )r8   r‡   ©râ   r   )r®   r¥   r8   r   r=   r   Úset_contentÚcontent_subtype)rk   rÌ   r8   r®   s       r9   rÃ   zEmailMessage._add_bodies¬  s^   € Ø�9Š9˜D×,Ò,Ø—}‘}Ò@¬×(@Ñ(@ˆHÜØ—	‘	’˜R¨(Ð;LôˆDð �O‰O˜D¨$×*>Ñ*>ÈˆOÕQð -ro   c                 ód  — | j                   r¤t        | d«      rt        d«      ‚|j                  «        | j                   D ]m  }t	        |t
        j                  j                  «      r|j                  |«       Œ9t	        |t        «      r|j                  |«       Œ[ | j                  |g|¢­Ž  Œo y y )NÚmixed_subtypezJEmailMessage no longer supports the undocumented `mixed_subtype` attribute)r¥   ÚhasattrÚAttributeErrorÚ
make_mixedrO   r¯   r°   r±   r²   r   Ú_add_attachment)rk   rÌ   r´   s      r9   rÄ   zEmailMessage._add_attachments´  s˜   € Ø×ÒÜ�t˜_Ô-ä$ð>óð ð �N‰NÔØ"×.Ñ.ò ;�
Ü˜j¬%¯-©-×*@Ñ*@ÔAØ—J‘J˜zÕ*Ü 
¬HÔ5à—J‘J˜zÕ*à(�D×(Ñ(¨Ð:¨zÔ:ñ;ð ro   c                 ó  — | j                   xs t        j                  }|j                  dd«      \  }}|dk(  r!t	        |t
        «      r	 |j                  «       }|dk(  r|j                  ||||¬«       y |dk(  rªt	        |t        «      r|j                  |j                  ¬«      }nht	        |t        j                  j                  t        j                  j                  f«      s*t        j                  t!        |«      |j                  ¬«      }|j                  |||¬«       y t	        |t
        t"        t$        f«      st!        |«      }|j                  ||||¬«       y # t        $ r t        }|j                  dd«      \  }}Y �Œ-w xY w)	Nr×   rL   rØ   )râ   r    r   r°   r¹   )râ   r    )Úmaintyperâ   r    )r8   r   r=   rÝ   rO   rÞ   rß   rà   rÜ   Úadd_attachmentr¢   r°   rº   r¯   ÚMessageÚmessage_from_bytesr   Ú	bytearrayÚ
memoryview)rk   rÌ   r    r�   rž   r8   rõ   râ   s           r9   ró   zEmailMessage._add_attachmentÆ  sa  € Ø—=‘=Ò<¤H×$<Ñ$<ˆØ$ŸN™N¨3°Ó2Ñˆ�'à�vÒ¤*¨W´eÔ"<ð;Ø!Ÿ.™.Ó*�ð �vÒà×ÑØ °8ÀXð õ ð ˜Ò"ô ˜'¤<Ô0à!Ÿ/™/°·±˜/Ó<‘ÜØœ%Ÿ-™-×4Ñ4´e·m±m×6KÑ6KÐLôô  ×2Ñ2Ü Ó(°·±ô�ð ×Ñ˜w°À(ÐÕKô ˜g¬¬y¼*Ð'EÔFÜ% gÓ.�Ø×ÑØØ!ØØ!ð	 õ øô9 &ò ;Ü7�Ø$,§N¡N°3¸Ó$:Ñ!�›'ð;ús   Á
E  Å $FÆFc                 ó†   — 	 | j                   |   ||<   y# t        $ r" |rdj                  d„ |D «       «      ||<   Y yY yw xY w)z�
        Set msg's header, either from self.extra_headers, if present, or from
        the values argument if not empty.
        r2   c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr4   )r>   )r6   Úvs     r9   r:   z=EmailMessage._set_list_header_if_not_empty.<locals>.<genexpr>û  s   è ø€ Ò'?°1¬¨A¯Ñ'?ùs   ‚N)r³   ÚKeyErrorrD   )rk   rÌ   ÚheaderÚvaluess       r9   rÆ   z*EmailMessage._set_list_header_if_not_emptyò  sM   € ð
	@Ø×,Ñ,¨VÑ4ˆC�ŠKøÜò 	@ÙØ"Ÿi™iÑ'?¸Ô'?Ó?��F“ñ ð	@ús   ‚ •&A ¿A c                 ó„  — t        |j                  dd«      s¤|j                  «       D ]�  \  }}t        |t        «      sŒt        d„ |j                  D «       «      sŒ4|j                  ||j                  D �cg c]7  }t        |j                  |j                  t        |j                  «      ¬«      ‘Œ9 c}«       Œ’ yyc c}w )z‚
        If msg.policy does not permit utf8 in headers, IDNA encode all
        non-ASCII domains in its address headers.
        Úutf8Fc              3   óR   K  — | ]  }|j                   j                  «        –— Œ! y ­wr4   )rN   Úisascii)r6   r7   s     r9   r:   zCEmailMessage._idna_encode_address_header_domains.<locals>.<genexpr>  s%   è ø€ ò <Ø26˜Ÿ™×+Ñ+Ó-Ô-ñ<ùs   ‚%')rS   rM   rN   N)Úgetattrrº   rÊ   rO   r   rŒ   Ú	addressesÚreplace_headerr   rS   rM   r   rN   )rk   rÌ   ÚfieldrÐ   r7   s        r9   rË   z0EmailMessage._idna_encode_address_header_domainsý  s­   € ô �s—z‘z 6¨5Ô1ð !$§	¡	£ò ‘��uÜ˜e¤]Õ3¼ñ <Ø:?¿/¹/ô<õ 9ð ×&Ñ&Øð ).¯©öð !%ô $Ø-1×->Ñ->Ø)-¯©Ü'/°·±Ó'<öòõ
ñ	ð	 2ùòs   Á6<B=©rJ   rJ   NN)F)NNNr4   )rs   rt   ru   Ú__doc__rí   r8   r   r   r�   r¶   r¯   rº   Údefaultr°   rÒ   rÕ   r²   ré   rÃ   rÄ   ró   rÆ   rË   rv   ro   r9   r¢   r¢   æ   s¥   „ Ù,à€Oð €HáØ ò	
ó
ð ØØØð8%ð ØØØØØó8%ó
ð8%ótð !&§¡× 4Ñ 4ô ò<LóHó2Róh6ò Rò;ò$*òX	@óro   r¢   c            
       óp   ‡ — e Zd ZdZ eeg d¢«      	 	 	 	 dddddddddœˆ fd„«       Zd„ Zˆ fd„Zd„ Z	ˆ xZ
S )	ÚEmailMultiAlternativesz°
    A version of EmailMessage that makes it easy to send multipart/alternative
    messages. For example, including text and HTML versions of the text is
    made easier.
    )r(   r¤   r¥   r¦   Úalternativesr&   r§   Nc                ó€   •— t         ‰| �  |||||||||
|¬«
       |	xs g D �cg c]
  }t        |Ž ‘Œ c}| _        yc c}w )r©   r£   N)Úsuperr�   rœ   r  )rk   r1   r®   r­   r'   r(   r¤   r¥   r¦   r  r&   r§   ÚalternativeÚ	__class__s                €r9   r�   zEmailMultiAlternatives.__init__$  sa   ø€ ô> 	‰ÑØØØØØØ!Ø#ØØØð 	ô 	
ð @LÒ?QÈrö
Ø/:Ô˜kÒ*ò
ˆÕùò 
s   £;c                 ól   — |�|€t        d«      ‚| j                  j                  t        ||«      «       y)z-Attach an alternative content representation.Nz+Both content and mimetype must be provided.)rR   r  rÙ   rœ   )rk   r�   rž   s      r9   Úattach_alternativez)EmailMultiAlternatives.attach_alternativeS  s4   € àˆ?˜hÐ.ÜÐJÓKÐKØ×Ñ× Ñ Ô!1°'¸8Ó!DÕEro   c                 ó(  •— | j                   s| j                  st        ‰| �  |«       | j                  rÝt	        | d«      rt        d«      ‚|j                  «        | j                  xs t        j                  }| j                  D ]‰  }|j                  j                  dd«      \  }}|j                  }|dk(  r5t        |t        «      r|j                  «       }|j!                  |||¬«       Œht#        ||d¬«      }|j!                  |||¬	«       Œ‹ |S )
NÚalternative_subtypezZEmailMultiAlternatives no longer supports the undocumented `alternative_subtype` attributer×   rL   rØ   rë   T)r8   rÂ   )rõ   râ   )r®   r  r  rÃ   rð   rñ   Úmake_alternativer8   r   r=   rž   rÝ   r�   rO   rÞ   rß   Úadd_alternativer   )rk   rÌ   r8   r  rõ   râ   r�   r  s          €r9   rÃ   z"EmailMultiAlternatives._add_bodiesY  s  ø€ Ø�9Š9˜D×-Ò-Ü‰GÑ Ô$Ø×ÒÜ�tÐ2Ô3ä$ðDóð ð × Ñ Ô"Ø—}‘}Ò@¬×(@Ñ(@ˆHØ#×0Ñ0ò 	U�Ø$/×$8Ñ$8×$>Ñ$>¸sÀAÓ$FÑ!�˜'Ø%×-Ñ-�Ø˜vÒ%Ü! '¬5Ô1Ø")§.¡.Ó"2˜Ø×'Ñ'¨¸È(Ð'ÕSä)¨'¸HÐSWÔX�GØ×'Ñ'¨¸(ÈGÐ'ÕTð	Uð ˆ
ro   c                 óz   — || j                   vry| j                  D ]  \  }}|j                  d«      sŒ||vsŒ y y)zz
        Checks that ``text`` occurs in the email body and in all attached MIME
        type text/* alternatives.
        Fztext/T)r®   r  Ú
startswith)rk   rØ   r�   rž   s       r9   Úbody_containsz$EmailMultiAlternatives.body_containsq  sJ   € ð
 �t—y‘yÑ Øà!%×!2Ñ!2ò 	ÑˆG�XØ×"Ñ" 7Õ+°¸GÒ0CÙð	ð ro   r	  )rs   rt   ru   r
  r   r   r�   r  rÃ   r  Ú__classcell__)r  s   @r9   r  r    sd   ø„ ññ Ø ò	
óð ØØØð!
ð ØØØØØØõ!
óð!
òFFôö0ro   r  )EÚemail.messager¯   Úemail.policyrÚ   r;   Úcollectionsr   r   r   r   r‹   r   Úemail.errorsr	   Úemail.headerr
   Úemail.headerregistryr   r   r   Úemail.mime.baser   Úemail.mime.messager   Úemail.mime.multipartr   Úemail.mime.textr   Úemail.utilsr   r   r   Úior   r   Úpathlibr   Údjango.confr   Údjango.core.mail.utilsr   Údjango.utils.deprecationr   r   Údjango.utils.encodingr   r   r   Údjango.utils.timezoner   r�   Úbody_encodingrŽ   ÚQPrÜ   r‰   rR   r?   rC   rG   r5   r`   rx   r}   r•   rœ   rŸ   r¢   r  rv   ro   r9   ú<module>r1     s$  ðÛ Û Û Û Ý "ß 'Ý $Ý Ý )Ý ß ?Ñ ?Ý $Ý *Ý .Ý $ß <Ñ <ß  Ý å  Ý +ß Pß BÑ BÝ 6ð
 ˆw�‰˜wÓ'€Ø!€Ô Ø!�'—/‘/ 'Ó*€Ø '§
¡
€Ô ð  :Ð ð #&Ð ð €ò€ò ò>46÷pñ ô:1�i ô 1ô=�9˜hô =ô.	3˜	 =ô 	3ñ Ð0°9¸jÐ2IÓJÐ ÙÐ.Ò0SÓT€÷tñ tôn	_˜\õ _ro   