
    ho              	          d Z ddlZddlZddlZddlZddlZddlZddlZddl	Zddl
Z
ddlZddlmZmZmZmZ dZdZ ej&                  d      Z ej&                  d      Zej,                  j/                  d      Zd	ed
efdZd	ed
efdZdeeef   d
efdZddddeej:                  j<                  ej:                  j>                  f   de ded
e!fdZ"deeejF                  jH                  ejJ                  jL                  f   d
ee   fdZ'deej:                  j<                  ej:                  j>                  f   d
ee   fdZ(deej:                  j<                  ej:                  j>                  f   d
ee   fdZ)y)z9
Email message and address formatting/parsing functions.
    N)ListOptionalTupleUnion)extract_recipientsextract_senderflatten_messageparse_addressquote_addressz
z[][\\()<>@,:;".]z[\\"]zutf-8addressreturnc                 n    t         j                  j                  |       \  }}|xs | j                         S )zG
    Parse an email address, falling back to the raw string given.
    )emailutils	parseaddrstrip)r   display_nameparsed_addresss      [/var/www/html/retail-simulation-api/retail/lib/python3.12/site-packages/aiosmtplib/email.pyr
   r
   !   s.     $);;#8#8#A L.,W]]_,    c                 $    t        |       }d| dS )zC
    Quote a subset of the email addresses defined by RFC 821.
    <>)r
   )r   r   s     r   r   r   *   s     #7+N~a  r   pairc                     | \  }}|rt         j                  |      }| d| dS d}t        j                  |      r$d}t        j                  d|      }| | | d| dS |S )a}  
    Copied from the standard library, and modified to handle international (UTF-8)
    email addresses.

    The inverse of parseaddr(), this takes a 2-tuple of the form
    (realname, email_address) and returns the string value suitable
    for an RFC 2822 From, To or Cc header.
    If the first element of pair is false, then the second element is
    returned unmodified.
    z <r    "z\\\g<0>)UTF8_CHARSETheader_encodeSPECIALS_REGEXsearchESCAPES_REGEXsub)r   namer   encoded_namequotess        r   
formataddrr'   2   s}     MD'#11$7r'!,,  &F $$Z6DXdVF82gYa88Nr   F8bit)utf8cte_typemessager)   r*   c                  t        j                   |       }|d= |d= t        | t        j                  j                        r1t        j
                  j                  j                  t        ||      }n/t        j
                  j                  j                  t        |      }t        j                         5 }t        j                  j                  ||      }|j                  |       |j                         }d d d        |S # 1 sw Y   S xY w)NBcc
Resent-Bcc)linesepr)   r*   )r/   r*   )policy)copy
isinstancer   r+   EmailMessager0   defaultcloneLINE_SEPcompat32ioBytesIO	generatorBytesGeneratorflattengetvalue)r+   r)   r*   message_copyr0   	messageior:   flat_messages           r   r	   r	   K   s     99W%LU\" '5==556%%++ , 
 &&,,X,Q	OO229V2L	,' ))+ 

  

 s   4ADDheaderc          	         g }t        | t        j                  j                        rm| j                  D ]\  }t        |t        j                  j
                        r|j                  |j                         C|j                  t        |             ^ |S t        | t        j                  j                        rRt        j                  j                  |       D ].  \  }}|d}|j                  t        t        ||                   0 |S |j                  d t        j                  j                  | g      D               |S )zl
    Convert address headers into raw email addresses, suitable for use in
    low level SMTP commands.
    ascii)encodingc              3   &   K   | ]	  \  }}|  y w)N ).0_addrs      r   	<genexpr>z$extract_addresses.<locals>.<genexpr>   s     P-O'!T-Os   )r2   r   headerregistryAddressHeader	addressesAddressappend	addr_specr
   rA   Headerdecode_headerstrextendr   getaddresses)rA   rM   r   address_bytescharsets        r   extract_addressesrX   l   s    I&%..<<=''G '5#7#7#?#?@  !2!23  w!78 (  
FELL//	0&+ll&@&@&H"M7!]3}w+OPQ 'I  	PU[[-E-Evh-OPPr   c                    | j                  d      }|t        |      dkD  rt        d      |rd}d}nd}d}|| v r| |   }n| |   }|yt        |      d	   S )
z;
    Extract the sender from the message object given.
    Resent-DateN   0Message has more than one 'Resent-' header blockzResent-SenderzResent-FromSenderFromr   )get_alllen
ValueErrorrX   )r+   resent_datessender_header_namefrom_header_namesender_headers        r   r   r      s     ??=1LC$5$9KLL	,(%! W$ 23 01]+A..r   c                    g }| j                  d      }|t        |      dkD  rt        d      |rd}nd}|D ]4  }| j                  |g       D ]  }|j                  t	        |              6 |S )z?
    Extract the recipients from the message object given.
    rZ   r[   r\   )z	Resent-Toz	Resent-Ccr.   )ToCcr-   )failobj)r_   r`   ra   rT   rX   )r+   
recipientsrb   recipient_headersrA   	recipients         r   r   r      s     J??=1LC$5$9KLL	D/# <I/	:; = $ r   )*__doc__r1   email.charsetr   email.generatoremail.headeremail.headerregistryemail.messageemail.policyemail.utilsr8   retypingr   r   r   r   __all__r6   compiler    r"   rW   Charsetr   rS   r
   r   r'   r+   r3   Messageboolbytesr	   rK   rL   rA   rQ   rX   r   r   rF   r   r   <module>r}      s           	 	 / / /0

8$}}$$W--3 -3 -!3 !3 !U38_  : 5==--u}}/D/DDE 	
  B#u++995<<;N;NNO 
#Y8/5==--u}}/D/DDE/ c]/<5==--u}}/D/DDE 
#Yr   