Sindbad~EG File Manager

Current Path : /usr/local/lib/python3.9/test/__pycache__/
Upload File :
Current File : //usr/local/lib/python3.9/test/__pycache__/test_smtplib.cpython-39.opt-2.pyc

a

��g���@s�ddlZddlZddlZddlmZddlmZddl	Zddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlmZmZddlmZddlmZddlmZmZm Z ddl!m"Z"ej#Z#ej$d	k�rd
d�Z%e%e
j&_%dd
�Z'Gdd�d�Z(Gdd�de(ej)�Z*Gdd�de(ej)�Z+dd�Z,dZ-dZ.Gdd�dej)�Z/Gdd�dej)�Z0Gdd�dej)�Z1Gdd�dej)�Z2Gd d!�d!ej)�Z3d"d#d$d%�Z4d&Z5d'Z6d(d)gd*gd+�Z7Gd,d-�d-e8�Z9Gd.d/�d/e
j&�Z:Gd0d1�d1e
j;�Z<Gd2d3�d3ej)�Z=Gd4d5�d5e<�Z>Gd6d7�d7ej)�Z?ed8d9d:�Z@Gd;d<�d<e:�ZAGd=d>�d>e<�ZBGd?d@�d@ej)�ZCeDdAk�r�e�E�dS)B�N)�EmailMessage)�body_encode)�support�mock_socket)�hashlib_helper)�
socket_helper)�threading_setup�threading_cleanup�join_thread)�Mock�darwincCsdS�N���selfrr�-/usr/local/lib/python3.9/test/test_smtplib.py�handle_expt!src
Cs�|��|��z�z|��\}}Wntjy6YnT0d}|r�|dkr�t�g|gg�\}}}|rx|�|�}	||	d�}|d8}q<|��W|��|��n|��|��0dS)Ni�r�)�listen�set�accept�socket�timeout�select�send�close)
�evt�buf�serv�conn�addr�n�r�w�e�sentrrr�server&s$



�r&c@steZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�ZdS)�GeneralTestscCstt_d|_dS)N�)r�smtplibr�portrrrr�setUp>szGeneralTests.setUpcCs
tt_dSr
)rr)rrrr�tearDownBszGeneralTests.tearDowncCsd}d}|�|t�|��dS)Nzabc
.jkl
foo
..bluezabc
..jkl
foo
...blue)�assertEqualr)Z	quotedata)rZteststr�expectedrrr�
testQuoteDataGszGeneralTests.testQuoteDatacCs$t�d�|�t|j�}|��dS)N�220 Hola mundo�r�
reply_with�client�HOSTr*r�rr3rrr�
testBasic1Ls
zGeneralTests.testBasic1cCs6t�d�|jt|jdd�}|�|jd�|��dS)Nr0)z	127.0.0.1i�M)�source_address)rr2r3r4r*r-r7rr5rrr�testSourceAddressRs

�zGeneralTests.testSourceAddresscCs*t�d�|�dt|jf�}|��dS)Nr0z%s:%sr1r5rrr�
testBasic2Zs
zGeneralTests.testBasic2cCs6t�d�|jt|jdd�}|�|jd�|��dS)Nr0Ztesthost)�local_hostname)rr2r3r4r*r-r:rr5rrr�testLocalHostName`s
zGeneralTests.testLocalHostNamec	Cszt�d�|�t���t�d�|�t��d�z|�t|j�}Wt�d�nt�d�0|�|j	�
�d�|��dS)Nr0�)rr2�assertIsNone�getdefaulttimeout�setdefaulttimeoutr-r3r4r*�sock�
gettimeoutrr5rrr�testTimeoutDefaultgs

zGeneralTests.testTimeoutDefaultc	Cslt�d�|�t���t�d�z |jt|jdd�}Wt�d�nt�d�0|�|j	�
��|��dS�Nr0r<�r)rr2r=rr>r?r3r4r*r@rArr5rrr�testTimeoutNoness

zGeneralTests.testTimeoutNonecCsJt�d�|�t��"|jt|jdd�Wd�n1s<0YdS)Nr0rrD)rr2�assertRaises�
ValueErrorr3r4r*rrrr�testTimeoutZero~s
zGeneralTests.testTimeoutZerocCs:t�d�|jt|jdd�}|�|j��d�|��dSrC)	rr2r3r4r*r-r@rArr5rrr�testTimeoutValue�s
zGeneralTests.testTimeoutValuecCs|t�d�|��}|�d�t���}|�t|j�Wd�n1sH0Y|�	�t
�dt
j�}|�
|��|�dS)N�220 Hello worldrz	^connect:�rr2r3Zset_debuglevelrZcaptured_stderr�connectr4r*r�re�compile�	MULTILINE�assertRegex�getvalue�rr3�stderrr.rrr�test_debuglevel�s


,zGeneralTests.test_debuglevelcCs|t�d�|��}|�d�t���}|�t|j�Wd�n1sH0Y|�	�t
�dt
j�}|�
|��|�dS)NrJ�z#^\d{2}:\d{2}:\d{2}\.\d{6} connect: rKrRrrr�test_debuglevel_2�s


,�zGeneralTests.test_debuglevel_2N)�__name__�
__module__�__qualname__r+r,r/r6r8r9r;rBrErHrIrTrVrrrrr'<s
r'c@seZdZejZdS)�SMTPGeneralTestsN)rWrXrYr)�SMTPr3rrrrrZ�srZcs<eZdZejZe�ee	d�d�dd��Z
�fdd�Z�ZS)�LMTPGeneralTests�AF_UNIXz test requires Unix domain socketc	CsTd}t�d�z|�||j�}Wt�d�nt�d�0|�|j���|��dS)N�!/some/local/lmtp/delivery/programrJ)	rr2r3r*r?r=r@rAr)r�
local_hostr3rrr�"testUnixDomainSocketTimeoutDefault�s
z3LMTPGeneralTests.testUnixDomainSocketTimeoutDefaultcsJt���d}|�t��|j|dd�Wd�n1s<0YdS)Nr^rrD)�superrHrFrGr3)rr_��	__class__rrrH�s
z LMTPGeneralTests.testTimeoutZero)
rWrXrYr)ZLMTPr3�unittestZ
skipUnless�hasattrrr`rH�
__classcell__rrrbrr\�s

r\c	Cs�|��z�zVttd�rtj}ntj}d}tjr^|dkr^|dtj�|��rT|��q^|d8}q(Wnt	j
ytYn0W|��s�t�d�|��t�
�|��n,|��s�t�d�|��t�
�|��0dS)N�polli�r�{�G�z�?rg�?)rrer�asyncoreZpoll2rgZ
socket_map�is_setrrr�time�sleepZ	close_all)r�serv_evt�
client_evtZpoll_funr!rrr�debugging_server�s0


�
roz&---------- MESSAGE FOLLOWS ----------
z&------------ END MESSAGE ------------
c@s�eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�Zd4d5�ZdS)6�DebuggingServerTestsNcCs�t�|_tj|_tjt_tj|_t	�
�|_|jt_t�
�|_t�
�|_tj|_t	�
�t_tjtdfddd�|_|jj��dd�\|_|_|j|j|jf}tjt|d�|_|j��|j��|j��dS)Nr�Znowhere���T��decode_datarU��target�args)r�
thread_keyr�getfqdn�real_getfqdnr�sys�stdout�
old_stdout�io�StringIO�output�	threading�Eventrmrn�smtpd�DEBUGSTREAM�old_DEBUGSTREAMZDebuggingServerr4r�getsockname�hostr*�Threadro�thread�start�wait�clear�rZ	serv_argsrrrr+�s&



�

zDebuggingServerTests.setUpcCsZ|jt_|j��|j��t|j�|j	t
_tj
��|jt_
|`|��t|j�dSr
)rzrryrnrrmr�r
r�r}r{r|r�r�rr��
doCleanupsr	rxrrrrr,s



zDebuggingServerTests.tearDowncCs$|j��}tjdd|tjtjBd�S)Nz(.*?)^X-Peer:\s*\S+\n(.*)z\1\2)�flags)r�rQrM�subrO�DOTALL)r�test_outputrrr�get_output_without_xpeers
�z-DebuggingServerTests.get_output_without_xpeercCs"tjt|jdtjd�}|��dS�N�	localhost�r:r�r)r[r4r*r�LOOPBACK_TIMEOUT�quit�r�smtprrr�	testBasics�zDebuggingServerTests.testBasicc
Cs�t��}zZtj|j|jdtj|j|fd�}|�|j	�|�
|j|j|f�|�
|jd�|�
�Wn@ty�}z(|jtjkr�|�d|��WYd}~n
d}~00dS)Nr�)r:rr7zcouldn't bind to source port %d)rZfind_unused_portr)r[r�r*rr��
addCleanuprr-r7r:r��OSError�errnoZ
EADDRINUSEZskipTest)rZsrc_portr�r$rrrr8s�z&DebuggingServerTests.testSourceAddresscCsBtjt|jdtjd�}|�|j�d}|�|�	�|�|�
�dS�Nr�r���sOK)r)r[r4r*rr�r�rr-�noopr��rr�r.rrr�testNOOP,s�zDebuggingServerTests.testNOOPcCsBtjt|jdtjd�}|�|j�d}|�|�	�|�|�
�dSr�)r)r[r4r*rr�r�rr-Zrsetr�r�rrr�testRSET4s�zDebuggingServerTests.testRSETcCsBtjt|jdtjd�}|�|j�d}|�|�	�|�|�
�dS)Nr�r�)r�s
SIZE 33554432
HELP)r)r[r4r*rr�r�rr-�ehlor�r�rrr�testELHO<s�zDebuggingServerTests.testELHOcCsLtjt|jdtjd�}|�|j�d}|�d�|�	|�
�|�|��dS)Nr�r�)i�sEXPN not implementedZEXPN)r)r[r4r*rr�r�r�putcmdr-Zgetreplyr�r�rrr�testEXPNNotImplementedEs�
z+DebuggingServerTests.testEXPNNotImplementedcCsttjt|jdtjd�}|�|j�|�t	��}|�
d�Wd�n1sL0Y|�dt|j
��|��dS)Nr�r�zhelo
X-INJECTED�prohibited newline characters)r)r[r4r*rr�r�rrFrGr��assertIn�str�	exceptionr�)rr��excrrr�&test_issue43124_putcmd_escapes_newlineOs�(z;DebuggingServerTests.test_issue43124_putcmd_escapes_newlinecCsVtjt|jdtjd�}|�|j�d}|�|�	d�|�|�|�
d�|�|��dS)Nr�r�)�s>Cannot VRFY user, but will accept message and attempt delivery�nobody@nowhere.com)r)r[r4r*rr�r�rr-�vrfyZverifyr�r�rrr�testVRFYYs�zDebuggingServerTests.testVRFYcCsJtjt|jdtjd�}|�|j�|��d}|�	|��|�|�
�dS)Nr�r�)i�sDuplicate HELO/EHLO)r)r[r4r*rr�r�rZhelor-r�r�rrr�testSecondHELOcs�z#DebuggingServerTests.testSecondHELOcCs>tjt|jdtjd�}|�|j�|�|�	�d�|�
�dS)Nr�r�s@Supported commands: EHLO HELO MAIL RCPT DATA RSET NOOP QUIT VRFY)r)r[r4r*rr�r�rr-�helpr�r�rrr�testHELPns�zDebuggingServerTests.testHELPcCs�d}tjt|jdtjd�}|�|j�|�dd|�t	�
d�|��|j�
�|j��|j��dt|tf}|�|j��|�dS)N�A test messager�r��John�Sallyrh�%s%s
%s�r)r[r4r*rr�r�r�sendmailrkrlr�rnrrmr�r��flush�	MSG_BEGIN�MSG_ENDr-rQ�r�mr��mexpectrrr�testSendvs�



zDebuggingServerTests.testSendcCs�d}tjt|jdtjd�}|�|j�|�dd|�t	�
d�|��|j�
�|j��|j��dt|�d�tf}|�|j��|�dS)	NsA test messager�r�r�r�rhr��ascii)r)r[r4r*rr�r�rr�rkrlr�rnrrmr�r�r�r��decoder�r-rQr�rrr�testSendBinary�s�



z#DebuggingServerTests.testSendBinarycCs�d}tjt|jdtjd�}|�|j�|�dd|�t	�
d�|��|j�
�|j��|j��dt|tf}|�|j��|�dS)Nz.A test
.mes.sage.r�r�r�r�rhr�r�r�rrr�testSendNeedingDotQuote�s�



z,DebuggingServerTests.testSendNeedingDotQuotecCs�d}tjt|jdtjd�}|�|j�|�t	��}|�
dd|�Wd�n1sT0Y|�dt|j
��t�d�|��tj��}|�d|�dS)	N�wazzuuup
linetwoz
hi
X-INJECTEDr��	hi@me.com�
you@me.comz2prohibited newline characters: ehlo hi\nX-INJECTEDrhz
X-INJECTED)r)r[r4r*rr�r�rrFrGr�r�r�r�rkrlr�r�r�rQ�assertNotIn)rr�r�r��debugoutrrr�$test_issue43124_escape_localhostname�s�,�

z9DebuggingServerTests.test_issue43124_escape_localhostnamecCs�d}tjt|jdtjd�}|�|j�|�dd|�|�	t
�� }|�dddg�Wd�n1sd0Yt|j
�}|�d|�|�d	|�t�d
�|��tj��}|�d|�|�d|�|�d
|�|�d|�dS)Nr�r�r�r�r�zX-OPTION
X-INJECTED-1zX-OPTION2
X-INJECTED-2r�z.X-OPTION\nX-INJECTED-1 X-OPTION2\nX-INJECTED-2rhzX-OPTIONz	X-OPTION2zX-INJECTED-1zX-INJECTED-2)r)r[r4r*rr�r�rr�rFrG�mailr�r�r�rkrlr�r�r�rQr�)rr�r�r��msgr�rrr�test_issue43124_escape_options�s&�.


z3DebuggingServerTests.test_issue43124_escape_optionscCs�d}tjt|jdtjd�}|�|j�|�dd|�t	�
d�|��|j�
�|j��|j��dt|tf}|�|j��|�tj��}t�dtj�}|�||�dS)	Nr�r�r�z<>r�rhr�z^sender: <>$)r)r[r4r*rr�r�rr�rkrlr�rnrrmr�r�r�r�r�r-rQr�r�rMrNrOrP)rr�r�r�r��senderrrr�testSendNullSender�s �




z'DebuggingServerTests.testSendNullSendercCs�tjj�d�}tjt|jdtj	d�}|�
|j�|j|ddd�t
�d�|��|j��|j��|j��|��}|d=d	t|��tf}|�||�dS)
Nr�r�r�r�r��Z	from_addrZto_addrsrh�X-Peerr�)�email�mime�text�MIMETextr)r[r4r*rr�r�r�send_messagerkrlr�rnrrmr�r�r�r�r��	as_stringr�r-)rr�r�r�r�rrr�testSendMessage�s�



z$DebuggingServerTests.testSendMessagec	Cstjj�d�}d|d<d|d<d|d<d|d	<tjt|jd
tj	d�}|�
|j�|�|�t
�d�|��|�|d	d�|j��|j��|j��|��}|d
=|d	=dt|��tf}|�||�tj��}t�dtj �}|�!||�dD]$}t�d�"|�tj �}|�!||�q�dS)Nr��foo@bar.com�Fromr��To�Sally, Fred�CC�?John Root <root@localhost>, "Dinsdale" <warped@silly.walks.com>�Bccr�r�rhr�r��^sender: foo@bar.com$)r�r�ZFredzroot@localhostzwarped@silly.walks.com�^recips: .*'{}'.*$)#r�r�r�r�r)r[r4r*rr�r�rr�rkrlr�r-rnrrmr�r�r�r�r�r�r�r�r�rQrMrNrOrP�format�	rr�r�r�r�r�r�r �to_addrrrr�testSendMessageWithAddressess:�





�z1DebuggingServerTests.testSendMessageWithAddressesc	Cs�tjj�d�}d|d<d|d<tjt|jdtj	d�}|�
|j�|�|�t
�d�|��|j��|j��|j��|��}|d	=d
t|��tf}|�||�tj��}t�dtj �}|�!||�dD]$}t�d
�"|�tj �}|�!||�q�dS)Nr�r�r��John, Dinsdaler�r�r�rhr�r�r��r��Dinsdaler��#r�r�r�r�r)r[r4r*rr�r�rr�rkrlr�rnrrmr�r�r�r�r�r�r�r-r�r�rQrMrNrOrPr�r�rrr� testSendMessageWithSomeAddresses$s2�





�z5DebuggingServerTests.testSendMessageWithSomeAddressesc
Cstjj�d�}d|d<d|d<tjt|jdtj	d�}|�
|j�|j|dd	d
�t
�d�|��|j��|j��|j��|��}|d=d
t|��tf}|�||�tj��}t�dtj �}|�!||�dD]$}t�d�"|�tj �}|�#||�q�t�dtj �}	|�!||	�dS)Nr�r�r�r�r�r�r�zjoe@example.comzfoo@example.netr�rhr�r�z^sender: joe@example.com$r�r�z^recips: .*'foo@example.net'.*$)$r�r�r�r�r)r[r4r*rr�r�rr�rkrlr�rnrrmr�r�r�r�r�r�r�r-r�r�rQrMrNrOrPr�ZassertNotRegex)
rr�r�r�r�r�r�r r�Zreciprrr�%testSendMessageWithSpecifiedAddressesAs6�




�z:DebuggingServerTests.testSendMessageWithSpecifiedAddressesc	Cstjj�d�}d|d<d|d<d|d<tjt|jdtj	d	�}|�
|j�|�|�t
�d
�|��|j��|j��|j��|��}|d=dt|��tf}|�||�tj��}t�d
tj �}|�!||�dD]$}t�d�"|�tj �}|�!||�q�dS)Nr�zBernard, Biancar�z#the_rescuers@Rescue-Aid-Society.comZSenderr�r�r�r�rhr�r�z-^sender: the_rescuers@Rescue-Aid-Society.com$r�r�r�r�rrr�testSendMessageWithMultipleFrom`s4�





�z4DebuggingServerTests.testSendMessageWithMultipleFromc	Cs6tjj�d�}d|d<d|d<d|d<d|d	<d
|d<d|d
<d|d<d|d<tjt|jdtj	d�}|�
|j�|�|�t
�d�|��|j��|j��|j��|d	=|d=|��}|d=dt|��tf}|�||�tj��}t�dtj �}|�!||�dD]&}t�d�"|�tj �}|�!||��q
dS)Nr�r�r�r�r�r�r�r�r��Thu, 1 Jan 1970 17:42:00 +0000�Resent-Date�holy@grail.net�Resent-From�&Martha <my_mom@great.cooker.com>, Jeff�	Resent-To�doe@losthope.net�
Resent-Bccr�r�rhr�r�z^sender: holy@grail.net$)zmy_mom@great.cooker.comZJeffr�r�r�r�rrr�testSendMessageResent~sB�





�z*DebuggingServerTests.testSendMessageResentcCs�tjj�d�}d|d<d|d<d|d<d|d	<d
|d<d|d
<d|d<d|d<d|d<d|d<d|d
<tjt|jdtj	d�}|�
|j�|�t
��|�|�Wd�n1s�0Y|��dS)Nr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�zThu, 2 Jan 1970 17:42:00 +0000r�r�)r�r�r�r�r)r[r4r*rr�r�rrFrGr��rr�r�rrr�#testSendMessageMultipleResentRaises�s&�(z8DebuggingServerTests.testSendMessageMultipleResentRaises)rWrXrY�maxDiffr+r,r�r�r8r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrp�s6	


$%rpc@s$eZdZdd�Zdd�Zdd�ZdS)�NonConnectingTestscCs.t��}|�tj|j�|�tj|jd�dS)Nztest msg)r)r[rF�SMTPServerDisconnectedr�rr�rrr�testNotConnected�s
�z#NonConnectingTests.testNotConnectedcCs&|�ttjdd�|�ttjd�dS)Nr�Zboguszlocalhost:bogus)rFr�r)r[rrrr�testNonnumericPort�s
�
�z%NonConnectingTests.testNonnumericPortcCs8t���}|�|j�Wd�n1s*0YdSr
)r)r[r=r@r�rrr�testSockAttributeExists�s
z*NonConnectingTests.testSockAttributeExistsN)rWrXrYr�rrrrrrr��s
r�c@s$eZdZdd�Zdd�Zdd�ZdS)�DefaultArgumentsTestscCsDt�|_d|jd<t��|_tdd�|j_t�t�|j_|j_dS)N�Páolo <főo@bar.com>r�)��ZOK)Zreturn_value)	rr�r)r[r�rr��has_extnr�rrrrr+�s


zDefaultArgumentsTests.setUpcCs`d}|j�|j�|j�|j�|�|jjjddd|�|�|jjjddd|�dS)N)�SMTPUTF8�
BODY=8BITMIMEr�r�r�r�r�r-r�Zcall_args_list)r�expected_mail_optionsrrrr��s��z%DefaultArgumentsTests.testSendMessagecCsNdg}d}|j�|jdd|�|�|dg�|�|jjjddd|�dS)N�STARTTLS)rrrrrr	)r�mail_optionsr
rrr�testSendMessageWithMailOptions�s�z4DefaultArgumentsTests.testSendMessageWithMailOptionsN)rWrXrYr+r�r
rrrrr�s	rc@s$eZdZdd�Zdd�Zdd�ZdS)�BadHELOServerTestscCs4tt_t�d�tj|_t��|_	|j	t_d|_
dS)Ns199 no hello for you!r()rr)rr2r{r|r}r~rr�r*rrrrr+�s

zBadHELOServerTests.setUpcCstt_|jt_dSr
)rr)r}r{r|rrrrr,�szBadHELOServerTests.tearDowncCs|�tjtjt|jdd�dS�Nr�r)rFr)ZSMTPConnectErrorr[r4r*rrrr�testFailingHELO�s
�z"BadHELOServerTests.testFailingHELON)rWrXrYr+r,rrrrrr�src@s:eZdZddejddZdd�Zdd�Zd	d
�ZdS)�TooLongLineTestss250 OK�.rU�
cCs�t�|_tj|_t��|_|jt_t�	�|_
t�tjtj
�|_|j�d�t�|j�|_|j
|j|jf}tjt|d�|_|j��|j
��|j
��dS)N�ru)rrxr{r|r}r~rr�r�r�rr�AF_INET�SOCK_STREAMr@�
settimeoutrZ	bind_portr*�respdatar�r&r�r�r�r�)rZservargsrrrr+s



zTooLongLineTests.setUpcCs6|j��|jt_t|j�|`|��t|j	�dSr
)
rr�r}r{r|r
r�r�r	rxrrrrr,s

zTooLongLineTests.tearDowncCs|�tjtjt|jdd�dSr)rFr)�SMTPResponseExceptionr[r4r*rrrr�testLineTooLongs
�z TooLongLineTests.testLineTooLongN)	rWrXrYr)Z_MAXLINErr+r,rrrrrrsrzJohn AzSally BzRuth C)�Mr.A@somewhere.com�Ms.B@xn--fo-fka.com�Mrs.C@somewhereesle.com)rZsomepasswordz<PENCeUxFREJoU0NnbmhNWitOMjNGNndAZWx3b29kLmlubm9zb2Z0LmNvbT4=rrr)zlist-1zlist-2c@seZdZdS)�ResponseExceptionN)rWrXrYrrrrr.�rcs�eZdZdZdZdZdZdZdZdZ	dZ
dZ�fdd�Z�fdd�Z
dd	�Zd
d�Zdd
�Zd(dd�Zd)dd�Zd*dd�Zd+dd�Zdd�Zdd�Zdd�Z�fdd�Z�fdd�Z�fd d!�Z�fd"d#�Z�fd$d%�Zd&d'�Z�ZS),�SimSMTPChannelNr�ccs0d�dd�|D��|_tt|�j|i|��dS)N�cSsg|]}d�|��qS)z	250-{0}
)r�)�.0�xrrr�
<listcomp>=rz+SimSMTPChannel.__init__.<locals>.<listcomp>)�join�_extrafeaturesrar �__init__)rZextra_featuresrw�kwrbrrr(;s�zSimSMTPChannel.__init__c
s�|j|jkr�|j�|j�}tdt|�tjd�g|_z|�	|�WnBt
y�}z*|j|_|�d|j
|jf�WYd}~n
d}~00dSt���dS)NzData:)�file�%s %s)�
smtp_state�AUTHZ_emptystringr&Zreceived_lines�print�reprr�r��auth_objectr�COMMAND�push�	smtp_code�
smtp_errorra�found_terminator)r�liner$rbrrr5As,zSimSMTPChannel.found_terminatorcCs�|js|�d�dS|jr$d|jvr2|�d�dS|jdurJ|�d�dS|��}t|�dvrl|�d�dSd|d���d	d
�}zt	||�|_
Wn$ty�|�d�|��YdS0|j
|_|�
t|�dkr�|d
nd�dS)Nz503 Error: send EHLO firstr-z(500 Error: command "AUTH" not recognizedz3503 Bad sequence of commands: already authenticated)rrUz/501 Syntax: AUTH <mechanism> [initial-response]z_auth_%sr�-�_zQ504 Command parameter not implemented: unsupported  authentication mechanism {!r}rUr)�
seen_greetingr2�
extended_smtpr'�authenticated_user�split�len�lower�replace�getattrr0�AttributeErrorr�r-r,)r�argrwZauth_object_namerrr�	smtp_AUTHOs2


�
�zSimSMTPChannel.smtp_AUTHcCs,|r||_|�d�n
|�d�|j|_dS)Nz235 Authentication Succeededz&535 Authentication credentials invalid)r;r2r1r,)r�userZvalidrrr�_authenticatedhs

zSimSMTPChannel._authenticatedcCst�|�d���d�S)Nr��utf-8)�base64Zdecodebytes�encoder�)r�stringrrr�_decode_base64pszSimSMTPChannel._decode_base64c
Cs�|dur|�d�nn|�|�}z|�d��^}}}Wn8tyl}z |�d�||��WYd}~dSd}~00|�||tdk�dS)Nz334 ��=535 Splitting response {!r} into user and password failed: {}r)r2rJr<rGr�rE�sim_auth)rrB�logpassr8rD�passwordr$rrr�_auth_plainss
�zSimSMTPChannel._auth_plaincCs^|dur|�d�nFt|d�s6|�|�|_|�d�n$|�|�}|�|j|tdk�|`dS)Nz334 VXNlcm5hbWU6�_auth_login_userz334 UGFzc3dvcmQ6r)r2rerJrQrErM)rrBrOrrr�_auth_login�s

zSimSMTPChannel._auth_logincCs|�d�dS)Nz334 QnVHZ1liVWdHeQ==)r2�rrBrrr�_auth_buggy�szSimSMTPChannel._auth_buggyc
Cs�|dur|�d�t��n�|�|�}z|��\}}Wn8tyl}z |�d�||��WYd}~dSd}~00t�td�	d�|�t��	d�d��
�}|�|||k�dS)Nz334 {}rLFrr��md5)r2r��sim_cram_md5_challengerJr<rG�hmacZHMACrMrH�	hexdigestrE)rrBrNrDZhashed_passr$Zvalid_hashed_passrrr�_auth_cram_md5�s 
��zSimSMTPChannel._auth_cram_md5cCs,d}||jd}|�|�||_d|_dS)NzH250-testhost
250-EXPN
250-SIZE 20000000
250-STARTTLS
250-DELIVERBY
z250 HELPT)r'r2r9r:)rrB�resprrr�	smtp_EHLO�s

zSimSMTPChannel.smtp_EHLOcCs8|tvr&|�dt|t�|�f�n|�d|�dS)N�	250 %s %sz550 No such user: %s)�	sim_usersr2r)�	quoteaddrrSrrr�	smtp_VRFY�szSimSMTPChannel.smtp_VRFYcCs�|��}|tvrtt|}t|�D]P\}}t�|�}|t|�dkrZ|�dt||f�q |�dt||f�q n
|�d�dS)Nrz	250-%s %sr\z550 No access for you!)r>�	sim_lists�	enumerater)r^r=r2r])rrBZ	list_nameZ	user_listr!Z
user_emailZquoted_addrrrr�	smtp_EXPN�s
zSimSMTPChannel.smtp_EXPNcs4|jdurtt|��|�n|�|j�|��dSr
)�
quit_responserar �	smtp_QUITr2�close_when_donerSrbrrrd�s
zSimSMTPChannel.smtp_QUITcs6|jdurt��|�n|�|j�|jr2|��dSr
)�
mail_responsera�	smtp_MAILr2�
disconnectrerSrbrrrg�s

zSimSMTPChannel.smtp_MAILcsB|jdurt��|�dS|jd7_|�|j|jd�dS�Nr)�
rcpt_responsera�	smtp_RCPT�
rcpt_countr2rSrbrrrk�s

zSimSMTPChannel.smtp_RCPTcs|jd7_t��|�dSri)�
rset_countra�	smtp_RSETrSrbrrrn�szSimSMTPChannel.smtp_RSETcs(|jdurt��|�n|�|j�dSr
)�
data_responsera�	smtp_DATAr2rSrbrrrp�s
zSimSMTPChannel.smtp_DATAcCs�dSr
rrrrr�handle_error�szSimSMTPChannel.handle_error)N)N)N)N)rWrXrYrcrfrjrorlrmrhr-r;r(r5rCrErJrPrRrTrYr[r_rbrdrgrkrnrprqrfrrrbrr /s6




r c@s8eZdZeZdd�Zdd�Zdd�Zdd�Zd	d
�Z	dS)�
SimSMTPServercOs*g|_i|_tjj|g|�Ri|��dSr
)�_extra_features�
_addressesr��
SMTPServerr(�rrwr)rrrr(�szSimSMTPServer.__init__cCs|j|j||||jd�|_dS)Nrs)�
channel_classrs�_decode_data�_SMTPchannel�rrr rrr�handle_accepted�s
�zSimSMTPServer.handle_acceptedcCs||jd<||jd<dS)N�from�tos)rt)r�peer�mailfrom�rcpttos�datarrr�process_message�s
zSimSMTPServer.process_messagecCs|j�|�dSr
)rs�append)rZfeaturerrr�add_feature�szSimSMTPServer.add_featurecCs�dSr
rrrrrrq�szSimSMTPServer.handle_errorN)
rWrXrYr rwr(r{r�r�rqrrrrrr�srrc@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
ejddd�dd��Zejddd�dd��Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�Zd4d5�Zd6S)7�SMTPSimTestscCs�t�|_tj|_tjt_t��|_t��|_	t
tdfddd�|_|jj�
�d|_|j|j|j	f}tjt|d�|_|j��|j��|j��dS�NrrqTrsrru)rrxrryrzrr�r�rmrnrrr4rr�r*r�ror�r�r�r�r�rrrr+s



zSMTPSimTests.setUpcCs@|jt_|j��|j��t|j�|`|�	�t
|j�dSr
�rzrryrnrrmr�r
r�r�r	rxrrrrr,s


zSMTPSimTests.tearDowncCs"tjt|jdtjd�}|��dSr�r�r�rrrr�!s�zSMTPSimTests.testBasiccCs�tjt|jdtjd�}|�|ji�dddddd�}|��|�|j|�|D]}|�	|�
|��qN|�|�
d��|��dS)Nr�r�r"Z20000000)�expn�sizeZstarttlsZ	deliverbyr�zunsupported-feature)
r)r[r4r*rr�r-�esmtp_featuresr��
assertTruer�assertFalser�)rr�Zexpected_features�krrr�testEHLO's ��zSMTPSimTests.testEHLOcCs�tjt|jdtjd�}t��D]6\}}dtd|t�	|�fd�f}|�
|�|�|�qd}dd|�d�f}|�
|�|�|�|�
�dS)	Nr�r�r�r+r�r��&zNo such user: %s)r)r[r4r*rr�r]�items�bytesr^r-r�rHr�)rr�Z	addr_spec�name�expected_known�u�expected_unknownrrrr�=s���zSMTPSimTests.testVRFYc		Cs�tjt|jdtjd�}t��D]X\}}g}|D] }|�dt	|t�
|�f�q.dtd�|�d�f}|�
|�|�|�qd}d}|�
|�|�|�|��dS)	Nr�r�r+r��
r�zPSU-Members-List)r�sNo access for you!)r)r[r4r*rr�r`r�r�r]r^r�r&r-r�r�)	rr�Zlistname�membersZusersr�r�r�r�rrr�testEXPNLs�zSMTPSimTests.testEXPNcCsN|j�d�tjt|jdtjd�}|�t	dt	d�}|�
|d�|��dS)N�
AUTH PLAINr�r�rr���sAuthentication Succeeded�rr�r)r[r4r*rr��loginrMr-r�rr�rZrrr�testAUTH_PLAIN\s�zSMTPSimTests.testAUTH_PLAINcCsN|j�d�tjt|jdtjd�}|�t	dt	d�}|�
|d�|��dS)N�
AUTH LOGINr�r�rrr�r�r�rrr�testAUTH_LOGINds�zSMTPSimTests.testAUTH_LOGINcCsz|j�d�tjt|jdtjd��D}t\|_	|_
|�d�|jd|j
dd�}|�|d�Wd�n1sl0YdS)	Nr�r�r��test_auth_login�LOGINT�Zinitial_response_okr��rr�r)r[r4r*rr�rMrDrOr��authZ
auth_loginr-r�rrr�"testAUTH_LOGIN_initial_response_okls�
z/SMTPSimTests.testAUTH_LOGIN_initial_response_okcCsz|j�d�tjt|jdtjd��D}t\|_	|_
|�d�|jd|j
dd�}|�|d�Wd�n1sl0YdS)	Nr�r�r�r�r�Fr�r�r�r�rrr�%testAUTH_LOGIN_initial_response_notokus�
z2SMTPSimTests.testAUTH_LOGIN_initial_response_notokcs��j�d�d�fdd�	}tjt�jdtjd�}zdt\|_	|_
|�d�d}��tj
|�� }|jd|d	d
�Wd�n1s�0YW|��n
|��0dS)Nz
AUTH BUGGYcs��d|�dS)Ns
BuGgYbUgGyrK)r-)Z	challengerrr�
auth_buggy�sz/SMTPSimTests.testAUTH_BUGGY.<locals>.auth_buggyr�r�Ztest_auth_buggyz&^Server AUTH mechanism infinite loop.*ZBUGGYFr�)N)rr�r)r[r4r*rr�rMrDrOr�ZassertRaisesRegexZ
SMTPExceptionr�r)rr�r��expect�cmrrr�testAUTH_BUGGY~s�
0zSMTPSimTests.testAUTH_BUGGYrUT)ZopensslcCsN|j�d�tjt|jdtjd�}|�t	dt	d�}|�
|d�|��dS)Nz
AUTH CRAM-MD5r�r�rrr�r�r�rrr�testAUTH_CRAM_MD5�s�zSMTPSimTests.testAUTH_CRAM_MD5cCsN|j�d�tjt|jdtjd�}|�t	dt	d�}|�
|d�|��dS)NzAUTH BOGUS PLAIN LOGIN CRAM-MD5r�r�rrr�r�r�rrr�testAUTH_multiple�s�zSMTPSimTests.testAUTH_multiplec	Cs�ddh}zt��Wnty&Yn0|�d�|D]}|j�d�|��q6|D]�}|j|d���tj	t
|jdtj
d�}|�d�td	td
|_|_d|���dd
�}|�|t||��}|�|d�|��Wd�qR1s�0YqRdS)NZPLAINr�zCRAM-MD5zAUTH {})�	mechanismr�r�ZfoorrZauth_r7r8r�)�hashlibrUrG�addrr�r�ZsubTestr)r[r4r*rr�r�rMrDrOr>r?r�r@r-r)rZ	supportedr�r��methodrZrrr�test_auth_function�s(

�
zSMTPSimTests.test_auth_functioncCs�tjt|jdtjd�}|��\}}|�|d�|�d|j	�|�
�|�d|j	�|�t|j�|�d|j	�|�
�|�d|j	�|�
�dS)Nr�r�r�r�)r)r[r4r*rr�r�r-r�r�r�r�rLZehlo_or_helo_if_needed�rr��code�messagerrr�test_quit_resets_greeting�s
�z&SMTPSimTests.test_quit_resets_greetingcCs�t�t|j��(}|��\}}|�|d�Wd�n1s<0Y|�tj|jd�t�t|j��}|�	�Wd�n1s�0Y|�tj|jd�dS)Nr�sfoo)
r)r[r4r*r�r-rFr�rrr�rrr�test_with_statement�s*&z SMTPSimTests.test_with_statementc	Cs�|�tj��P}t�t|j��"}|��d|jj_	Wd�n1sD0YWd�n1sb0Y|�
|jjd�|�
|jj
d�dS)Nz421 QUIT FAILED�sQUIT FAILED)rFr)rr[r4r*r�rryrcr-r�r3r4)r�errorr�rrr� test_with_statement_QUIT_failure�sFz-SMTPSimTests.test_with_statement_QUIT_failurecCs|tjt|jdtjd�}|��d|jj_	d|jj_
|�tj��|�
ddd�Wd�n1sb0Y|�|j�dS)Nr�r�z451 Requested action abortedTr�r��test message)r)r[r4r*rr�r�rryrfrhrF�SMTPSenderRefusedr�r=r@r�rrr�test__rest_from_mail_cmd�s�

,z%SMTPSimTests.test__rest_from_mail_cmdcCs�tjt|jdtjd�}|��d|jj_	|�
tj��|�ddd�Wd�n1sX0Y|�
|j�|�|jjjd�dS)Nr�r�z421 closing connectionr�r�r�r)r)r[r4r*rr�r�rryrfrFr�r�r=r@r-rmr�rrr�test_421_from_mail_cmd�s�
,z#SMTPSimTests.test_421_from_mail_cmdcCs�tjt|jdtjd�}|��ddg|jj_	|�
tj��"}|�dgd�d�Wd�n1s`0Y|�
|j�|�|jjjd�|�|jjdd	d
i�dS)Nr�r�z250 accepted�421 closingr�)r��FrankZGeorger�rr�)r�sclosing)r)r[r4r*rr�r�rryrjrFZSMTPRecipientsRefusedr�r=r@r-rm�assertDictEqualr�rw)rr�r"rrr�test_421_from_rcpt_cmd�s�0z#SMTPSimTests.test_421_from_rcpt_cmdcCs�Gdd�dt�}||j_tjt|jdtjd�}|�	�|�
tj�� |�ddgd�Wd�n1sh0Y|�
|j�|�|jjjd�dS)	NcseZdZ�fdd�Z�ZS)z=SMTPSimTests.test_421_from_data_cmd.<locals>.MySimSMTPChannelcs&|j|jkr|�d�n
t���dS)Nr�)r,ZDATAr2rar5rrbrrr5szNSMTPSimTests.test_421_from_data_cmd.<locals>.MySimSMTPChannel.found_terminator)rWrXrYr5rfrrrbr�MySimSMTPChannelsr�r�r�zJohn@foo.orgz
Sally@foo.orgr�r)r rrwr)r[r4r*rr�r�rFZ
SMTPDataErrorr�r=r@r-ryrl)rr�r�rrr�test_421_from_data_cmd�s�.z#SMTPSimTests.test_421_from_data_cmdcCs�tjt|jdtjd�}|�|j�|��|�	|j
�|�|�d��|j
tj|jdddddgd	�|j
tj|jdddgd
�dS)Nr�r��smtputf8r�r�r"rr�r��options)r)r[r4r*rr�r�rr�r��
does_esmtpr�rrF�SMTPNotSupportedErrorr�r�r�rrr�4test_smtputf8_NotSupportedError_if_no_server_supports"���zASMTPSimTests.test_smtputf8_NotSupportedError_if_no_server_supportcCsJtjt|jdtjd�}|�|j�|�t	|j
ddd�|�t	|jd�dS)Nr�r�ZAliceuBöbr"uÄlice)r)r[r4r*rr�r�rrF�UnicodeEncodeErrorr�r�r�rrr�"test_send_unicode_without_SMTPUTF8s�z/SMTPSimTests.test_send_unicode_without_SMTPUTF8cCszt�}d|d<d|d<d|d<tjt|jdtjd�}|�|j�|�	tj
��|�|�Wd�n1sl0YdS)	Nrr�r�r��Nudge nudge, wink, wink ὠ9�Subjectr�r�)rr)r[r4r*rr�r�rrFr�r�)rr�r�rrr�9test_send_message_error_on_non_ascii_addrs_if_no_smtputf8's�zFSMTPSimTests.test_send_message_error_on_non_ascii_addrs_if_no_smtputf8cCs�tjt|jdtjd�}|�|j�t�}t	j
�d�|d<t	j
�d�|d<|�|�
|�i�|�|jjdd�|�|jjd	d
g�dS)Nr�r�)uMichaël�michael@example.comr�)uRené�rene@example.comr�r|r�r}r�)r)r[r4r*rr�r�rrr�ZutilsZ
formataddrr�r�r-rrt)rr�r�rrr�1test_name_field_not_included_in_envelop_addresses5s�z>SMTPSimTests.test_name_field_not_included_in_envelop_addressesN)rWrXrYr+r,r�r�r�r�r�r�r�r�r�rZrequires_hashdigestr�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrr�s6		

		
r�c@s&eZdZdd�Zdd�Zddd�ZdS)	�SimSMTPUTF8ServercOs(ddg|_tjj|g|�Ri|��dS)NrZ8BITMIME)rsr�rur(rvrrrr(Gs
zSimSMTPUTF8Server.__init__cCs"|j|j||||j|jd�|_dS)N�rt�enable_SMTPUTF8)rwrsrxr�ryrzrrrr{Ns

�z!SimSMTPUTF8Server.handle_acceptedNcCs(||_||_||_||_||_||_dSr
)Z	last_peer�
last_mailfrom�last_rcpttos�last_message�last_mail_options�last_rcpt_options)rr~rr�r�rZrcpt_optionsrrrr�Usz!SimSMTPUTF8Server.process_message)NN)rWrXrYr(r{r�rrrrr�Es
�r�c@s@eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dS)�SMTPUTF8SimTestsNcCs�t�|_tj|_tjt_t��|_t��|_	t
tdfdddd�|_|jj�
�d|_|j|j|j	f}tjt|d�|_|j��|j��|j��dS)NrrqFTr�rru)rrxrryrzrr�r�rmrnr�r4rr�r*r�ror�r�r�r�r�rrrr+cs


�

zSMTPUTF8SimTests.setUpcCs@|jt_|j��|j��t|j�|`|�	�t
|j�dSr
r�rrrrr,ws


zSMTPUTF8SimTests.tearDowncCsJtjt|jdtjd�}|�|j�|��|�	|j
�|�	|�d��dS)Nr�r�r�)r)r[r4r*rr�r�rr�r�r�rr�rrr�$test_test_server_supports_extensions�s�z5SMTPUTF8SimTests.test_test_server_supports_extensionscCs�d�d�}tjt|jdtjd�}|�|j�|j	dd|ddgd	�|�
|jjd�|�
|jj
dg�|�
|jj|�|�d|jj�|�d|jj�|�
|jjg�dS)
N�$¡a test message containing unicode!rFr�r�uJőhnuSállyrrr�)rHr)r[r4r*rr�r�rr�r-rr�r�r�r�r�r�r�rrr�,test_send_unicode_with_SMTPUTF8_via_sendmail�s
�
�z=SMTPUTF8SimTests.test_send_unicode_with_SMTPUTF8_via_sendmailcCs�d�d�}tjt|jdtjd�}|�|j�|�	�|�
|jdddgd�d	�|�
|�d
�d	�|�
|�
|�d	�|�
|jjd�|�
|jjd
g�|�
|jj|�|�d|jj�|�d|jj�|�
|jjg�dS)Nr�rFr�r�uJőrrr�r�uJános)rHr)r[r4r*rr�r�rr�r-r�Zrcptr�rr�r�r�r�r�r�r�rrr�1test_send_unicode_with_SMTPUTF8_via_low_level_API�s&
��zBSMTPUTF8SimTests.test_send_unicode_with_SMTPUTF8_via_low_level_APIcCs�t�}d|d<d|d<d|d<|�d�t�d�}tjt|jd	tj	d
�}|�
|j�|�|�
|�i�|�|jjd�|�|jjdg�|�|jj��|�|�d|jj�|�d
|jj�|�|jjg�dS)Nrr�r�r�r�r�u1oh là là, know what I mean, know what I mean?

u<            From: Páolo <főo@bar.com>
            To: Dinsdale
            Subject: Nudge nudge, wink, wink ὠ9
            Content-Type: text/plain; charset="utf-8"
            Content-Transfer-Encoding: 8bit
            MIME-Version: 1.0

            oh là là, know what I mean, know what I mean?
            r�r�ufőo@bar.comrr)rZset_content�textwrap�dedentr)r[r4r*rr�r�rr-r�rr�r�r�r�r�r�r�)rr�r.r�rrr�2test_send_message_uses_smtputf8_if_addrs_non_ascii�s$


�zCSMTPUTF8SimTests.test_send_message_uses_smtputf8_if_addrs_non_ascii)
rWrXrYr�r+r,r�r�r�r�rrrrr�_s	r�spsudoesnotexistr")Zeolc@seZdZdd�ZdS)�!SimSMTPAUTHInitialResponseChannelcCsL|��}|d��dkr>t|�dkr>|dtkr>|�d�dS|�d�dS)Nr�plainrUrz235 Okz571 Bad authentication)r<r>r=�EXPECTED_RESPONSEr2)rrBrwrrrrC�s
z+SimSMTPAUTHInitialResponseChannel.smtp_AUTHN)rWrXrYrCrrrrr��sr�c@seZdZeZdS)� SimSMTPAUTHInitialResponseServerN)rWrXrYr�rwrrrrr��sr�c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�SMTPAUTHInitialResponseSimTestscCs�t�|_tj|_tjt_t��|_t��|_	t
tdfddd�|_|jj�
�d|_|j|j|j	f}tjt|d�|_|j��|j��|j��dSr�)rrxrryrzrr�r�rmrnr�r4rr�r*r�ror�r�r�r�r�rrrr+�s


�

z%SMTPAUTHInitialResponseSimTests.setUpcCs@|jt_|j��|j��t|j�|`|�	�t
|j�dSr
r�rrrrr,�s


z(SMTPAUTHInitialResponseSimTests.tearDowncCs:|j�d�tjt|jdtjd�}|�dd�|�	�dS)Nr�r�r��psu�doesnotexist)
rr�r)r[r4r*rr�r�rr�rrr�%testAUTH_PLAIN_initial_response_logins�zESMTPAUTHInitialResponseSimTests.testAUTH_PLAIN_initial_response_logincCsX|j�d�tjt|jdtjd�}d|_d|_	|�
d|j�\}}|��|�
|d�dS)Nr�r�r�r�r�r�r�)rr�r)r[r4r*rr�rDrOr�Z
auth_plainrr-)rr�r��responserrr�$testAUTH_PLAIN_initial_response_auth	s�zDSMTPAUTHInitialResponseSimTests.testAUTH_PLAIN_initial_response_authN)rWrXrYr+r,r�r�rrrrr��sr��__main__)FrirGZemail.mime.textr�Z
email.messagerZemail.base64mimerZ
encode_base64Zemail.utilsr�rWrr�r)r~rMr{rkrr�r�r�rd�testrrZtest.supportrrrr	r
Z
unittest.mockrr4�platformrZSMTPChannelr&r'ZTestCaserZr\ror�r�rpr�rrrr]rMrVr`�	Exceptionrr rurrr�r�r�r�r�r�r�rW�mainrrrr�<module>s�cX ��9Eo1


Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists