
    =h              	          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 ddlmZmZm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dddeej8                  j:                  ej8                  j<                  f   deded
e fdZ!deeejD                  jF                  ejH                  jJ                  f   d
e&e   fdZ'deej8                  j:                  ej8                  j<                  f   d
ee   fdZ(deej8                  j:                  ej8                  j<                  f   d
e&e   fdZ)y)z9
Email message and address formatting/parsing functions.
    N)Iterable)OptionalUnioncast)extract_recipientsextract_senderflatten_messageparse_addressquote_addressz[][\\()<>@,:;".]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   _parsed_addresss      `/var/www/html/phonemate/phone_mate_backend/venv/lib/python3.12/site-packages/aiosmtplib/email.pyr
   r
   !   s.     --g6A~,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   F8bit)utf8cte_typemessager   r   c                  t        j                   |       }|d= |d= t        j                         5 }t        |t        j
                  j                        r|rt        j                  j                  nt        j                  j                  }|dk7  r|j                  |      }t        j                  j                  ||      }|j                  |       nct        j                  j                  }|dk7  r|j                  |      }t        j                  j                  ||      }|j                  |       |j                         }	d d d        |	S # 1 sw Y   	S xY w)NBcc
Resent-Bccr   )r   )policy)copyioBytesIO
isinstancer   r   EmailMessager!   SMTPUTF8SMTPclone	generatorBytesGeneratorflattencompat32getvalue)
r   r   r   message_copy	messageior!   r*   compat_policycompat_generatorflat_messages
             r   r	   r	   2   s!    99W%LU\"	lEMM$>$>?.2U\\**8I8IF6!x866y6PIl+ "LL11M6! - 3 3X 3 F$==-  >   $$\2 ))++ 
. / 
. s   DEEheaderc                   g }t        | t        j                  j                        rt	        t
        t        t        t        j                  j                  f      | j                        }|D ]\  }t        |t        j                  j                        r|j                  |j                         C|j                  t        |             ^ |S t        | t        j                  j                        rTt        j                  j                  |       D ]0  \  }}t        ||xs d      }|j                  t        |             2 |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 ).0r   addrs      r   	<genexpr>z$extract_addresses.<locals>.<genexpr>p   s     P-O'!T-Os   )r%   r   headerregistryAddressHeaderr   r   r   strAddress	addressesappend	addr_specr
   r4   Headerdecode_headerextendr   getaddresses)r4   rA   header_addressesr   address_bytescharsetaddress_strs          r   extract_addressesrL   X   s/    I&%..<<=U3 4 4 < <<=>@P@P
 (G'5#7#7#?#?@  !2!23  w!78	 (  
FELL//	0&+ll&@&@&H"M7mg6HIK];78 '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
ValueErrorrL   )r   resent_datessender_header_namefrom_header_namesender_headers        r   r   r   u   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.
    rN   rO   rP   )z	Resent-Toz	Resent-Ccr    )ToCcr   )failobj)rS   rT   rU   rF   rL   )r   
recipientsrV   recipient_headersr4   	recipients         r   r   r      s     J??=1LC$5$9KLL	D/# <I/	:; = $ r   )*__doc__r"   email.charsetr   email.generatoremail.headeremail.headerregistryemail.messageemail.policyemail.utilsr#   recollections.abcr   typingr   r   r   __all__compileSPECIALS_REGEXESCAPES_REGEXrJ   CharsetUTF8_CHARSETr?   r
   r   r   r&   Messageboolbytesr	   r=   r>   r4   rD   listrL   r   r   r9   r   r   <module>rv      s           	 	 $ ( ( /0

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