???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................U
    e5dɯ                     @   sn  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Zd dlmZ ddddddd	d
dddddgZdZdZdZdZdZdZedejZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd	 d	eZ G dd
 d
eZ!G dd deZ"G d d deZ#d!d Z$d"d# Z%d$d Z&d%d& Z'd'd( Z(zd dl)Z)W n e*k
r   d)Z+Y nX d*Z+G d+d dZ,e+rG d,d- d-e,Z-e.d- d.Z/G d/d0 d0e,Z0e1d1krjd2d3 Z2e2d4Z3e2d54d6Z5e6d7 d8Z7ej89 Z:e:s&q2e7e: Z7qe6d9e;e7  e,d:Z<e<=d; e<>e3e5e7 e<?  dS )<    N)body_encodeSMTPExceptionSMTPNotSupportedErrorSMTPServerDisconnectedSMTPResponseExceptionSMTPSenderRefusedSMTPRecipientsRefusedSMTPDataErrorSMTPConnectErrorSMTPHeloErrorSMTPAuthenticationError	quoteaddr	quotedataSMTP   i  
s   
i       z	auth=(.*)c                   @   s   e Zd ZdS )r   N__name__
__module____qualname__ r   r   /usr/lib64/python3.8/smtplib.pyr   H   s   c                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r   K   s   c                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r   R   s   c                   @   s   e Zd Zdd ZdS )r   c                 C   s   || _ || _||f| _d S N)	smtp_code
smtp_errorargs)selfcodemsgr   r   r   __init__c   s    zSMTPResponseException.__init__Nr   r   r   r    r   r   r   r   r   Z   s   	c                   @   s   e Zd Zdd ZdS )r   c                 C   s"   || _ || _|| _|||f| _d S r   )r   r   senderr   )r   r   r   r"   r   r   r   r    o   s    zSMTPSenderRefused.__init__Nr!   r   r   r   r   r   h   s   c                   @   s   e Zd Zdd ZdS )r   c                 C   s   || _ |f| _d S r   )
recipientsr   )r   r#   r   r   r   r    }   s    zSMTPRecipientsRefused.__init__Nr!   r   r   r   r   r   u   s   c                   @   s   e Zd ZdS )r	   Nr   r   r   r   r   r	      s   c                   @   s   e Zd ZdS )r
   Nr   r   r   r   r   r
      s   c                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r      s   c                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r      s   c                 C   s>   t j| \}}||fdkr6|  dr.| S d|  S d| S )N r%   <z<%s>)emailutils	parseaddrstrip
startswithZ
addrstringZdisplaynameaddrr   r   r   r      s    c                 C   s$   t j| \}}||fdkr | S |S )Nr$   )r'   r(   r)   r,   r   r   r   
_addr_only   s    r.   c              	   C   s   t ddt dt| S )Nz(?m)^\.z..(?:\r\n|\n|\r(?!\n))resubCRLFdatar   r   r   r      s    c                 C   s   t dd| S )Ns   (?m)^\.s   ..)r1   r2   )Zbindatar   r   r   _quote_periods   s    r6   c                 C   s   t dt| S )Nr/   r0   r4   r   r   r   	_fix_eols   s    r7   FTc                   @   sv  e Zd ZdZdZdZdZdZdZdZ	e
ZdddejdfddZdd Zd	d
 Zdd Zdd Zdd ZdMddZdd ZdNddZdd ZdOddZdPddZdQddZd d! ZdRd"d#Zd$d% Zd&d' Zd(d) ZdSd+d,Z dTd-d.Z!d/d0 Z"d1d2 Z#e#Z$d3d4 Z%d5d6 Z&d7d8d9d:Z'dUd;d<Z(dVd=d>Z)dWd?d@Z*d7d8dAdBZ+dXdCdDZ,dYdEdFZ-dZdGdHZ.dIdJ Z/dKdL Z0dS )[r   r   Nehlor%   c           
      C   s   || _ || _i | _d| _|| _d| _|rR| ||\}}|dkrR|   t|||d k	rb|| _	nPt
 }d|krz|| _	n8d}	zt
t
 }	W n t
jk
r   Y nX d|	 | _	d S )Nasciir      .z	127.0.0.1z[%s])_hosttimeoutesmtp_featurescommand_encodingsource_address_auth_challenge_countconnectcloser
   local_hostnamesocketZgetfqdnZgethostbynameZgethostnameZgaierror)
r   hostportrD   r=   r@   r   r   Zfqdnr-   r   r   r   r       s,    
zSMTP.__init__c                 C   s   | S r   r   r   r   r   r   	__enter__  s    zSMTP.__enter__c                 G   sN   z>z$| d\}}|dkr$t||W n tk
r:   Y nX W 5 |    X d S )NZQUIT   )rC   docmdr   r   )r   r   r   messager   r   r   __exit__  s    
zSMTP.__exit__c                 C   s
   || _ d S r   )
debuglevel)r   rN   r   r   r   set_debuglevel"  s    zSMTP.set_debuglevelc                 G   s@   | j dkr,ttj  f|dtji nt|dtji d S )N   file)rN   printdatetimeZnowtimesysstderrr   r   r   r   r   _print_debug+  s    
"zSMTP._print_debugc                 C   s2   | j dkr| d||f| j t||f|| jS )Nr   zconnect: to)rN   rX   r@   rE   create_connection)r   rF   rG   r=   r   r   r   _get_socket1  s
    
zSMTP._get_socket	localhostc                 C   s   |r
|| _ |s||d|dkr||d}|dkr||d | ||d d   }}zt|}W n tk
rz   tdY nX |s| j}td| || | 	||| j
| _d | _|  \}}| jdkr| dt| ||fS )N:r   rP   znonnumeric portzsmtplib.connectconnect:)r@   findrfindint
ValueErrorOSErrordefault_portrU   auditrZ   r=   sockrQ   getreplyrN   rX   repr)r   rF   rG   r@   ir   r   r   r   r   rB   9  s&    

zSMTP.connectc                 C   s   | j dkr| dt| | jr|t|tr6|| j}t	d| | z| j
| W q tk
rx   |   tdY qX ntdd S )Nr   zsend:zsmtplib.sendServer not connectedzplease run connect() first)rN   rX   rg   re   
isinstancestrencoder?   rU   rd   Zsendallrb   rC   r   )r   sr   r   r   sendZ  s    

z	SMTP.sendc                 C   sd   |dkr|}n| d| }d|ks,d|krN| dd dd}td| | | t  d S )Nr%    
z\nz\rz=command and arguments contain prohibited newline characters: )replacera   rn   r3   )r   cmdr   rm   r   r   r   putcmdm  s    zSMTP.putcmdc              
   C   sP  g }| j d kr| jd| _ z| j td }W n: tk
rj } z|   tdt| W 5 d }~X Y nX |s|   td| j	dkr| 
dt| t|tkr|   tdd||d	d  d
 |d d }zt|}W n  tk
r   d}Y q Y nX |dd	 dkrq qd|}| j	dkrH| 
d||f  ||fS )NrbrP   z Connection unexpectedly closed: zConnection unexpectedly closedr   zreply:i  zLine too long.   s    	
      -   
zreply: retcode (%s); Msg: %a)rQ   re   Zmakefilereadline_MAXLINErb   rC   r   rk   rN   rX   rg   lenr   appendr*   r`   ra   join)r   resplineer   Zerrcodeerrmsgr   r   r   rf   z  s>    



zSMTP.getreplyc                 C   s   |  || |  S r   rt   rf   )r   rs   r   r   r   r   rK     s    z
SMTP.docmdc                 C   s,   |  d|p| j |  \}}|| _||fS )Nhelo)rt   rD   rf   	helo_resp)r   namer   r   r   r   r   r     s    z	SMTP.heloc           
      C   s.  i | _ | | j|p| j |  \}}|dkrJt|dkrJ|   td|| _|dkr`||fS d| _	| j
dd}|d= |D ]}t|}|r| j dd	d
 |dd  | j d< qtd|}|r|d }|j|dd   }	|dkr| j |d	d
 |	 | j |< q|	| j |< q||fS )Nrx   r   ri      rP   zlatin-1rq   authr%   ro   z((?P<feature>[A-Za-z0-9][A-Za-z0-9\-]*) ?feature)r>   rt   ehlo_msgrD   rf   r}   rC   r   	ehlo_resp
does_esmtpdecodesplitOLDSTYLE_AUTHmatchgetgroupsr1   grouplowerstringendr*   )
r   r   r   r   r   eachZ
auth_matchmr   Zparamsr   r   r   r8     sB    


z	SMTP.ehloc                 C   s   |  | jkS r   )r   r>   )r   optr   r   r   has_extn  s    zSMTP.has_extnc                 C   s   |  d| |  d S )NhelprP   r   rW   r   r   r   r     s    z	SMTP.helpc                 C   s   d| _ | dS )Nr9   rset)r?   rK   rH   r   r   r   r     s    z	SMTP.rsetc                 C   s&   z|    W n tk
r    Y nX d S r   )r   r   rH   r   r   r   _rset  s    z
SMTP._rsetc                 C   s
   |  dS )Nnoop)rK   rH   r   r   r   r   	  s    z	SMTP.noopr   c                 C   sh   d}|rH| j rHtdd |D r:| dr2d| _ntddd| }| dd	t||f  |  S )
Nr%   c                 s   s   | ]}|  d kV  qdS )smtputf8N)r   ).0xr   r   r   	<genexpr>  s     zSMTP.mail.<locals>.<genexpr>r   zutf-8z SMTPUTF8 not supported by serverro   mailz	FROM:%s%s)	r   anyr   r?   r   r   rt   r   rf   )r   r"   options
optionlistr   r   r   r     s    	

z	SMTP.mailc                 C   s<   d}|r| j rdd| }| ddt||f  |  S )Nr%   ro   rcptzTO:%s%s)r   r   rt   r   rf   )r   Zrecipr   r   r   r   r   r   "  s
    
z	SMTP.rcptc                 C   s   |  d |  \}}| jdkr0| d||f |dkrDt||n|t|tr\t|d}t	|}|dd  t
kr||t
 }|d t
 }| | |  \}}| jdkr| d||f ||fS d S )Nr5   r   zdata:ib  r9      .)rt   rf   rN   rX   r	   rj   rk   r7   rl   r6   bCRLFrn   )r   r   r   replqr   r   r   r5   *  s"    





z	SMTP.datac                 C   s   |  dt| |  S )Nvrfyrt   r.   rf   r   Zaddressr   r   r   verifyG  s    zSMTP.verifyc                 C   s   |  dt| |  S )Nexpnr   r   r   r   r   r   N  s    z	SMTP.expnc                 C   sb   | j d kr^| jd kr^d|  d   kr0dks^n |  \}}d|  krRdks^n t||d S )N   r   i+  )r   r   r8   r   r   )r   r   r   r   r   r   ehlo_or_helo_if_neededU  s
    zSMTP.ehlo_or_helo_if_neededTinitial_response_okc          	      C   s   |  }|r| nd }|d k	rPt|ddd}| d|d | \}}d| _n| d|\}}d| _|dkr|  jd7  _t|}t||ddd}| |\}}| jtkrftd	t	||f qf|d
kr||fS t
||d S )Nr9   r%   )ZeolZAUTHro   rP   r   iN  z4Server AUTH mechanism infinite loop. Last response:    i  )upperencode_base64rl   rK   rA   base64Zdecodebytes_MAXCHALLENGEr   rg   r   )	r   Z	mechanismZ
authobjectr   Zinitial_responseZresponser   r   	challenger   r   r   r   f  s2    
 

z	SMTP.authc                 C   s0   |d krd S | j d t| jd|d  S )Nro   r9   Zmd5)userhmacZHMACpasswordrl   Z	hexdigestr   r   r   r   r   auth_cram_md5  s    
  zSMTP.auth_cram_md5c                 C   s   d| j | jf S )Nz %s %s)r   r   r   r   r   r   
auth_plain  s    zSMTP.auth_plainc                 C   s"   |d ks| j dk r| jS | jS d S )N   )rA   r   r   r   r   r   r   
auth_login  s    zSMTP.auth_loginc                   s   |    | dstd| jd   dddg} fdd|D }|sPtd|| | _| _|D ]t}d	| 	d
d }z4| j
|t| ||d\}}	|dkr||	fW   S W qb tk
r }
 z|
}W 5 d }
~
X Y qbX qb|d S )Nr   z,SMTP AUTH extension not supported by server.zCRAM-MD5ZPLAINZLOGINc                    s   g | ]}| kr|qS r   r   )r   r   Zadvertised_authlistr   r   
<listcomp>  s    zSMTP.login.<locals>.<listcomp>z(No suitable authentication method found.Zauth_-_r   r   )r   r   r   r>   r   r   r   r   r   rr   r   getattrr   )r   r   r   r   Zpreferred_authsZauthlistZ
authmethodZmethod_namer   r   r   Zlast_exceptionr   r   r   login  s0    

 
z
SMTP.loginc                 C   s   |    | dstd| d\}}|dkrts<td|d k	rT|d k	rTtd|d k	rl|d k	rltd|d k	s||d k	rdd l}|d	t	d
 |d krt
j||d}|j| j| jd| _d | _d | _d | _i | _d| _n
t||||fS )Nstarttlsz+STARTTLS extension not supported by server.ZSTARTTLSr:   z&No SSL support included in this Python4context and keyfile arguments are mutually exclusive5context and certfile arguments are mutually exclusiver   Akeyfile and certfile are deprecated, use a custom context insteadr   certfilekeyfileZserver_hostname)r   r   r   rK   	_have_sslRuntimeErrorra   warningswarnDeprecationWarningssl_create_stdlib_contextwrap_socketre   r<   rQ   r   r   r>   r   r   )r   r   r   contextr   Zreplyr   r   r   r   r     sB    
 
zSMTP.starttlsc                 C   s^  |    g }t|tr$t|d}| jrZ| drF|dt|  |D ]}|| qJ| 	||\}}	|dkr|dkr| 
  n|   t||	|i }
t|tr|g}|D ]H}| ||\}}	|dkr|dkr||	f|
|< |dkr| 
  t|
qt|
t|kr|   t|
| |\}}	|dkrZ|dkrH| 
  n|   t||	|
S )Nr9   sizezsize=%dr   i     )r   rj   rk   r7   rl   r   r   r~   r}   r   rC   r   r   r   r   r5   r	   )r   	from_addrto_addrsr   mail_optionsrcpt_optionsZ
esmtp_optsZoptionr   r   Zsenderrsr   r   r   r   sendmail&  sF    @








zSMTP.sendmailc              	   C   s  |    |d}|d kr d}nt|dkr2d}ntd|d kr||d |krZ||d  n
||d  }tj|gd d }|d krd	d
 ||d  ||d  ||d  fD }dd
 tj|D }t|}	|	d= |	d= d}
zd|f|	d W n. t
k
r(   | ds tdd}
Y nX t R}|
r^tjj||jjddd}|d}ntj|}|j|	dd | }W 5 Q R X | |||||S )NzResent-Dater%   rP   zResent-z0message has more than one 'Resent-' header blockZSenderFromr   c                 S   s   g | ]}|d k	r|qS r   r   )r   fr   r   r   r     s    z%SMTP.send_message.<locals>.<listcomp>ToZBccZCcc                 S   s   g | ]}|d  qS )rP   r   )r   ar   r   r   r     s     z
Resent-BccFr9   r   zOne or more source or delivery addresses require internationalized email support, but the server does not advertise the required SMTPUTF8 capabilityT)utf8)policySMTPUTF8BODY=8BITMIMEr   )linesep)r   r   )r   Zget_allr}   ra   r'   r(   Zgetaddressescopyr   rl   UnicodeEncodeErrorr   r   ioBytesIO	generatorZBytesGeneratorr   ZcloneZflattengetvaluer   )r   r   r   r   r   r   ZresentZheader_prefixZaddr_fieldsZmsg_copyZinternationalZbytesmsggZflatmsgr   r   r   send_message  sX    







 
zSMTP.send_messagec                 C   s<   z| j}d | _|r|  W 5 | j }d | _ |r6|  X d S r   )re   rC   rQ   )r   re   rQ   r   r   r   rC     s    z
SMTP.closec                 C   s.   |  d}d  | _| _i | _d| _|   |S )NquitF)rK   r   r   r>   r   rC   )r   resr   r   r   r     s    
z	SMTP.quit)r[   r   N)r%   )r%   )r%   )r%   )r%   )r   )r   )N)N)N)NNN)r   r   )NNr   r   )1r   r   r   rN   re   rQ   r   r   r   r   	SMTP_PORTrc   rE   _GLOBAL_DEFAULT_TIMEOUTr    rI   rM   rO   rX   rZ   rB   rn   rt   rf   rK   r   r8   r   r   r   r   r   r   r   r5   r   r   r   r   r   r   r   r   r   r   r   r   rC   r   r   r   r   r   r      sf   
0
	
!
1



3


0
	

B
8  
h    
Mc                   @   s4   e Zd ZeZdddddejddfddZdd ZdS )SMTP_SSLr%   r   Nc	           
      C   s   |d k	r|d k	rt d|d k	r0|d k	r0t d|d k	s@|d k	rVdd l}	|	dtd || _|| _|d krxtj||d}|| _t	
| ||||| d S )Nr   r   r   r   r   r   )ra   r   r   r   r   r   r   r   r   r   r    )
r   rF   rG   rD   r   r   r=   r@   r   r   r   r   r   r      s(     zSMTP_SSL.__init__c                 C   sD   | j dkr| d||f t||f|| j}| jj|| jd}|S )Nr   r]   r   )rN   rX   rE   rY   r@   r   r   r<   )r   rF   rG   r=   Z
new_socketr   r   r   rZ     s    
zSMTP_SSL._get_socket)	r   r   r   SMTP_SSL_PORTrc   rE   r   r    rZ   r   r   r   r   r     s     
r   i  c                   @   s,   e Zd ZdZdeddfddZd
dd	ZdS )LMTPZlhlor%   Nc                 C   s   t j| ||||d d S )N)rD   r@   )r   r    )r   rF   rG   rD   r@   r   r   r   r    ;  s    zLMTP.__init__r[   r   c                 C   s   |d dkrt j| |||dS z(ttjtj| _d | _| j| W nB tk
r   | jdkrl| 	d| | jr|| j
  d | _ Y nX |  \}}| jdkr| 	d| ||fS )Nr   /)r@   zconnect fail:r]   )r   rB   rE   ZAF_UNIXZSOCK_STREAMre   rQ   rb   rN   rX   rC   rf   )r   rF   rG   r@   r   r   r   r   r   rB   A  s"    


zLMTP.connect)r[   r   N)r   r   r   r   	LMTP_PORTr    rB   r   r   r   r   r   +  s
   
r   __main__c                 C   s(   t j| d  t j  t j  S )Nz: )rU   stdoutwriteflushstdinr{   r*   )promptr   r   r   r  [  s    
r  r   r   ,zEnter message, end with ^D:r%   zMessage length is %dr[   rP   )@rE   r   r1   Zemail.utilsr'   Zemail.messageZemail.generatorr   r   r   rS   rU   Zemail.base64mimer   r   __all__r   r   r3   r   r|   r   compileIr   rb   r   r   r   r   r   r   r	   r
   r   r   r   r.   r   r6   r7   r   ImportErrorr   r   r   r~   r   r   r   r  Zfromaddrr   ZtoaddrsrR   r   r  r{   r   r}   ZserverrO   r   r   r   r   r   r   <module>,   s         	
      :0
/


