Your IP : 216.73.216.196


Current Path : /opt/alt/python310/lib64/python3.10/test/__pycache__/
Upload File :
Current File : //opt/alt/python310/lib64/python3.10/test/__pycache__/test_smtplib.cpython-310.opt-1.pyc

o

0�i2��@s�ddlZddlZddlmZddlmZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlmZmZddlmZddlmZddlmZddlmZddlZe� ��e�!d	e"�ddl#Z#ddl$Z$Wd�n1s�wYej%Z%ej&d
kr�dd�Z'e'e$j(_'d
d�Z)Gdd�d�Z*Gdd�de*ej+�Z,Gdd�de*ej+�Z-dd�Z.dZ/dZ0Gdd�dej+�Z1Gdd�dej+�Z2Gdd�dej+�Z3Gdd �d ej+�Z4Gd!d"�d"ej+�Z5d#d$d%d&�Z6d'Z7d(Z8d)d*gd+gd,�Z9Gd-d.�d.e:�Z;Gd/d0�d0e$j(�Z<Gd1d2�d2e$j=�Z>Gd3d4�d4ej+�Z?Gd5d6�d6e>�Z@Gd7d8�d8ej+�ZAed9d:d;�ZBGd<d=�d=e<�ZCGd>d?�d?e>�ZDGd@dA�dAej+�ZEeFdBk�rfe�G�dSdS)C�N)�EmailMessage)�body_encode)�support�mock_socket)�hashlib_helper)�
socket_helper)�threading_helper)�Mock�ignore�darwincCsdS�N���selfr
r
�8/opt/alt/python310/lib64/python3.10/test/test_smtplib.py�handle_expt%src
Cs�|��|��zVz|��\}}Wn	tyYn:wd}|rE|dkrEt�g|gg�\}}}|r;|�|�}	||	d�}|d8}|rE|dks#|��W|��|��dSW|��|��dS|��|��w)Ni�r�)Zlisten�setZaccept�TimeoutError�select�send�close)
�evtZbuf�serv�conn�addr�n�r�w�eZsentr
r
r�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�smtplib�socket�portrr
r
r�setUpBs
zGeneralTests.setUpcCs
tt_dSr)r$r#rr
r
r�tearDownFs
zGeneralTests.tearDowncCsd}d}|�|t�|��dS)Nzabc
.jkl
foo
..bluezabc
..jkl
foo
...blue)�assertEqualr#Z	quotedata)rZteststr�expectedr
r
r�
testQuoteDataKszGeneralTests.testQuoteDatacCs$t�d�|�t|j�}|��dS)N�220 Hola mundo�r�
reply_with�client�HOSTr%r�rr.r
r
r�
testBasic1Ps
zGeneralTests.testBasic1cC�6t�d�|jt|jdd�}|�|jd�|��dS)Nr+)z	127.0.0.1i�M)�source_address)rr-r.r/r%r(r3rr0r
r
r�testSourceAddressVs

�zGeneralTests.testSourceAddresscCs*t�d�|�dt|jf�}|��dS)Nr+z%s:%sr,r0r
r
r�
testBasic2^s
zGeneralTests.testBasic2cCr2)Nr+Ztesthost)�local_hostname)rr-r.r/r%r(r6rr0r
r
r�testLocalHostNameds
zGeneralTests.testLocalHostNamec	Cszt�d�|�t���t�d�|�t��d�z|�t|j�}Wt�d�nt�d�w|�|j	�
�d�|��dS)Nr+�)rr-�assertIsNone�getdefaulttimeout�setdefaulttimeoutr(r.r/r%�sock�
gettimeoutrr0r
r
r�testTimeoutDefaultks

zGeneralTests.testTimeoutDefaultc	Cslt�d�|�t���t�d�z|jt|jdd�}Wt�d�nt�d�w|�|j	�
��|��dS�Nr+r8��timeout)rr-r9r$r:r;r.r/r%r<r=rr0r
r
r�testTimeoutNonews

zGeneralTests.testTimeoutNonecCsLt�d�|�t��|jt|jdd�Wd�dS1swYdS)Nr+rr@)rr-�assertRaises�
ValueErrorr.r/r%rr
r
r�testTimeoutZero�s
"�zGeneralTests.testTimeoutZerocCs:t�d�|jt|jdd�}|�|j��d�|��dSr?)	rr-r.r/r%r(r<r=rr0r
r
r�testTimeoutValue�s
zGeneralTests.testTimeoutValuecC�|t�d�|��}|�d�t���}|�t|j�Wd�n1s$wY|�	�t
�dt
j�}|�
|��|�dS)N�220 Hello worldrz	^connect:�rr-r.Zset_debuglevelrZcaptured_stderr�connectr/r%r�re�compile�	MULTILINE�assertRegex�getvalue�rr.�stderrr)r
r
r�test_debuglevel�s


�zGeneralTests.test_debuglevelcCrG)NrH�z#^\d{2}:\d{2}:\d{2}\.\d{6} connect: rIrPr
r
r�test_debuglevel_2�s


��zGeneralTests.test_debuglevel_2N)�__name__�
__module__�__qualname__r&r'r*r1r4r5r7r>rBrErFrRrTr
r
r
rr!@s
r!c@seZdZejZdS)�SMTPGeneralTestsN)rUrVrWr#�SMTPr.r
r
r
rrX�s
rXcs<eZdZejZe�ee	d�d�dd��Z
�fdd�Z�ZS)�LMTPGeneralTestsZAF_UNIXz test requires Unix domain socketc	CsTd}t�d�z|�||j�}Wt�d�nt�d�w|�|j���|��dS)N�!/some/local/lmtp/delivery/programrH)	rr-r.r%r;r9r<r=r)r�
local_hostr.r
r
r�"testUnixDomainSocketTimeoutDefault�s
z3LMTPGeneralTests.testUnixDomainSocketTimeoutDefaultcsLt���d}|�t��|j|dd�Wd�dS1swYdS)Nr[rr@)�superrErCrDr.)rr\��	__class__r
rrE�s

"�z LMTPGeneralTests.testTimeoutZero)
rUrVrWr#ZLMTPr.�unittestZ
skipUnless�hasattrr$r]rE�
__classcell__r
r
r_rrZ�s


rZc	Cs�|��zSz1ttd�rtj}ntj}d}tjr5|dkr5|dtj�|��r*|��n|d8}tjr5|dksWn	t	y?YnwW|��sNt
�d�|��t��|��dS|��set
�d�|��t��|��w)N�polli�r�{�G�z�?rg�?)
rrbr�asyncoreZpoll2rdZ
socket_mapZis_setrr�time�sleepZ	close_all)r�serv_evt�
client_evtZpoll_funrr
r
r�debugging_server�s8
����
�

rkz&---------- 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
��|_|jt_t
��|_t
��|_tj|_t
��t_tjtdfddd�|_|jj��dd�\|_|_|j|j|jf}t
jt|d�|_|j��|j��|j��dS)Nr�Znowhere���T��decode_datarS��target�args) r�threading_setup�
thread_keyr$�getfqdn�real_getfqdnr�sys�stdout�
old_stdout�io�StringIO�output�	threading�Eventrirj�smtpd�DEBUGSTREAM�old_DEBUGSTREAMZDebuggingServerr/r�getsockname�hostr%�Threadrk�thread�start�wait�clear�rZ	serv_argsr
r
rr&�s&




�

zDebuggingServerTests.setUpcCs^|jt_|j��|j��t�|j	�|j
t_t
j��|jt
_|`	|��tj|j�dSr)rwr$rvrjrrir�r�join_threadr�rzrxryr�r�rr��
doCleanups�threading_cleanuprurr
r
rr's


zDebuggingServerTests.tearDowncCs$|j��}tjdd|tjtjBd�S)Nz(.*?)^X-Peer:\s*\S+\n(.*)z\1\2)�flags)r}rOrK�subrM�DOTALL)r�test_outputr
r
r�get_output_without_xpeers
�z-DebuggingServerTests.get_output_without_xpeercC�"tjt|jdtjd�}|��dS�N�	localhost�r6rA�r#rYr/r%r�LOOPBACK_TIMEOUT�quit�r�smtpr
r
r�	testBasic��zDebuggingServerTests.testBasicc
Cs�t��}z.tj|j|jdtj|j|fd�}|�|j	�|�
|j|j|f�|�
|jd�|�
�WdStyL}z|jtjkrG|�d|��d}~ww)Nr�)r6rAr3zcouldn't bind to source port %d)rZfind_unused_portr#rYr�r%rr��
addCleanuprr(r3r6r��OSError�errnoZ
EADDRINUSEZskipTest)rZsrc_portr�rr
r
rr4 s ���z&DebuggingServerTests.testSourceAddresscC�Btjt|jdtjd�}|�|j�d}|�|�	�|�|�
�dS�Nr�r���sOK)r#rYr/r%rr�r�rr(�noopr��rr�r)r
r
r�testNOOP0��zDebuggingServerTests.testNOOPcCr�r�)r#rYr/r%rr�r�rr(Zrsetr�r�r
r
r�testRSET8r�zDebuggingServerTests.testRSETcCr�)Nr�r�)r�s
SIZE 33554432
HELP)r#rYr/r%rr�r�rr(�ehlor�r�r
r
r�testELHO@s�zDebuggingServerTests.testELHOcCsLtjt|jdtjd�}|�|j�d}|�d�|�	|�
�|�|��dS)Nr�r�)i�sEXPN not implementedZEXPN)r#rYr/r%rr�r�r�putcmdr(Zgetreplyr�r�r
r
r�testEXPNNotImplementedIs�
z+DebuggingServerTests.testEXPNNotImplementedcCsttjt|jdtjd�}|�|j�|�t	��
}|�
d�Wd�n1s&wY|�dt|j
��|��dS)Nr�r�zhelo
X-INJECTED�prohibited newline characters)r#rYr/r%rr�r�rrCrDr��assertIn�str�	exceptionr�)rr��excr
r
r�&test_issue43124_putcmd_escapes_newlineSs��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#rYr/r%rr�r�rr(�vrfyZverifyr�r�r
r
r�testVRFY]s�zDebuggingServerTests.testVRFYcCsJtjt|jdtjd�}|�|j�|��d}|�	|��|�|�
�dS)Nr�r�)i�sDuplicate HELO/EHLO)r#rYr/r%rr�r�rZhelor(r�r�r
r
r�testSecondHELOgs�z#DebuggingServerTests.testSecondHELOcCs>tjt|jdtjd�}|�|j�|�|�	�d�|�
�dS)Nr�r�s@Supported commands: EHLO HELO MAIL RCPT DATA RSET NOOP QUIT VRFY)r#rYr/r%rr�r�rr(�helpr�r�r
r
r�testHELPrs�zDebuggingServerTests.testHELPcC�d}tjt|jdtjd�}|�|j�|�dd|�t	�
d�|��|j�
�|j��|j��dt|tf}|�|j��|�dS)N�A test messager�r��John�Sallyre�%s%s
%s�r#rYr/r%rr�r�r�sendmailrgrhr�rjrrir�r}�flush�	MSG_BEGIN�MSG_ENDr(rO�r�mr��mexpectr
r
r�testSendzs�



zDebuggingServerTests.testSendcCs�d}tjt|jdtjd�}|�|j�|�dd|�t	�
d�|��|j�
�|j��|j��dt|�d�tf}|�|j��|�dS)	NsA test messager�r�r�r�rer��ascii)r#rYr/r%rr�r�rr�rgrhr�rjrrir�r}r�r��decoder�r(rOr�r
r
r�testSendBinary�s�



z#DebuggingServerTests.testSendBinarycCr�)Nz.A test
.mes.sage.r�r�r�r�rer�r�r�r
r
r�testSendNeedingDotQuote�s�



z,DebuggingServerTests.testSendNeedingDotQuotecCs�d}tjt|jdtjd�}|�|j�|�t	��}|�
dd|�Wd�n1s*wY|�dt|j
��t�d�|��tj��}|�d|�dS)	N�wazzuuup
linetwoz
hi
X-INJECTEDr��	hi@me.com�
you@me.comz2prohibited newline characters: ehlo hi\nX-INJECTEDrez
X-INJECTED)r#rYr/r%rr�r�rrCrDr�r�r�r�rgrhr�r�r�rO�assertNotIn)rr�r�r��debugoutr
r
r�$test_issue43124_escape_localhostname�s ���

z9DebuggingServerTests.test_issue43124_escape_localhostnamecCs�d}tjt|jdtjd�}|�|j�|�dd|�|�	t
��}|�dddg�Wd�n1s2wYt|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-2rezX-OPTIONz	X-OPTION2zX-INJECTED-1zX-INJECTED-2)r#rYr/r%rr�r�rr�rCrD�mailr�r�r�rgrhr�r�r�rOr�)rr�r�r��msgr�r
r
r�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�rer�z^sender: <>$)r#rYr/r%rr�r�rr�rgrhr�rjrrir�r}r�r�r�r(rOr�r�rKrLrMrN)rr�r�r�r��senderr
r
r�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_addrsre�X-Peerr�)�email�mime�text�MIMETextr#rYr/r%rr�r�r�send_messagergrhr�rjrrir�r}r�r�r��	as_stringr�r()rr�r�r�r�r
r
r�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 �}|�!||�qzdS)Nr��foo@bar.com�Fromr��To�Sally, Fred�CC�?John Root <root@localhost>, "Dinsdale" <warped@silly.walks.com>�Bccr�r�rer�r��^sender: foo@bar.com$)r�r�ZFredzroot@localhostzwarped@silly.walks.com�^recips: .*'{}'.*$)#r�r�r�r�r#rYr/r%rr�r�rr�rgrhr�r(rjrrir�r}r�r�r�r�r�r�r�rOrKrLrMrN�format�	rr�r�r�r�r�r�r�to_addrr
r
r�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 �}|�!||�qgdS)Nr�r�r��John, Dinsdaler�r�r�rer�r�r��r��Dinsdaler��#r�r�r�r�r#rYr/r%rr�r�rr�rgrhr�rjrrir�r}r�r�r�r�r�r(r�r�rOrKrLrMrNr�r�r
r
r� testSendMessageWithSomeAddresses(s4�





��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 �}|�#||�qjt�dtj �}	|�!||	�dS)Nr�r�r�r�r�r�r�zjoe@example.comzfoo@example.netr�rer�r�z^sender: joe@example.com$r�r�z^recips: .*'foo@example.net'.*$)$r�r�r�r�r#rYr/r%rr�r�rr�rgrhr�rjrrir�r}r�r�r�r�r�r(r�r�rOrKrLrMrNr�ZassertNotRegex)
rr�r�r�r�r�r�rr�Zrecipr
r
r�%testSendMessageWithSpecifiedAddressesEs6�




�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 �}|�!||�qkdS)Nr�zBernard, Biancar�z#the_rescuers@Rescue-Aid-Society.comZSenderr�r�r�r�rer�r�z-^sender: the_rescuers@Rescue-Aid-Society.com$r�r�r�r�r
r
r�testSendMessageWithMultipleFromds6�





��z4DebuggingServerTests.testSendMessageWithMultipleFromc	Cs4tjj�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�rer�r�z^sender: holy@grail.net$)zmy_mom@great.cooker.comZJeffr�r�r�r�r
r
r�testSendMessageResent�sD�





��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�n1sYwY|��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#rYr/r%rr�r�rrCrDr��rr�r�r
r
r�#testSendMessageMultipleResentRaises�s(��z8DebuggingServerTests.testSendMessageMultipleResentRaises)rUrVrW�maxDiffr&r'r�r�r4r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r
r
r
rrl�s8	


$%rlc@�$eZdZdd�Zdd�Zdd�ZdS)�NonConnectingTestscCs.t��}|�tj|j�|�tj|jd�dS)Nztest msg)r#rYrC�SMTPServerDisconnectedr�rr�r
r
r�testNotConnected�s
�z#NonConnectingTests.testNotConnectedcCs&|�ttjdd�|�ttjd�dS)Nr�Zboguszlocalhost:bogus)rCr�r#rYrr
r
r�testNonnumericPort�s
�
�z%NonConnectingTests.testNonnumericPortcCs:t���}|�|j�Wd�dS1swYdSr)r#rYr9r<r�r
r
r�testSockAttributeExists�s
"�z*NonConnectingTests.testSockAttributeExistsN)rUrVrWrrrr
r
r
rr�s
rc@r)�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#rYr�r	r��has_extnr�rr
r
rr&�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_optionsr
r
rr��s��z%DefaultArgumentsTests.testSendMessagecCsNdg}d}|j�|jdd|�|�|dg�|�|jjjddd|�dS)N�STARTTLS)rrrrr
r)r�mail_optionsrr
r
r�testSendMessageWithMailOptions�s�z4DefaultArgumentsTests.testSendMessageWithMailOptionsN)rUrVrWr&r�rr
r
r
rr�s	rc@r)�BadHELOServerTestscCs4tt_t�d�tj|_t��|_	|j	t_d|_
dS)Ns199 no hello for you!r")rr#r$r-rxryrzr{r|r}r%rr
r
rr&�s


zBadHELOServerTests.setUpcCstt_|jt_dSr)r$r#rzrxryrr
r
rr'�szBadHELOServerTests.tearDowncC�|�tjtjt|jdd�dS�Nr�r
)rCr#ZSMTPConnectErrorrYr/r%rr
r
r�testFailingHELO�
�z"BadHELOServerTests.testFailingHELON)rUrVrWr&r'rr
r
r
rr�src@s:eZdZddejddZdd�Zdd�Zd	d
�ZdS)�TooLongLineTestss250 OK�.rS�
cCs�t��|_tj|_t��|_|jt_t	�
�|_t�tj
tj�|_|j�d�t�|j�|_|j|j|jf}t	jt|d�|_|j��|j��|j��dS)N�rq)rrtrurxryrzr{r|r}r~rrr$ZAF_INETZSOCK_STREAMr<Z
settimeoutrZ	bind_portr%�respdatar�r r�r�r�r�)rZservargsr
r
rr&s




zTooLongLineTests.setUpcCs:|j��|jt_t�|j�|`|��tj	|j
�dSr)rr�rzrxryrr�r�r�r�rurr
r
rr's
zTooLongLineTests.tearDowncCrr)rCr#�SMTPResponseExceptionrYr/r%rr
r
r�testLineTooLong rz TooLongLineTests.testLineTooLongN)	rUrVrWr#Z_MAXLINErr&r'rr
r
r
rrs
rzJohn AzSally BzRuth C)�Mr.A@somewhere.com�Ms.B@xn--fo-fka.com�Mrs.C@somewhereesle.com)rZsomepasswordz<PENCeUxFREJoU0NnbmhNWitOMjNGNndAZWx3b29kLmlubm9zb2Z0LmNvbT4=rr!r )zlist-1zlist-2c@seZdZdS)�ResponseExceptionN)rUrVrWr
r
r
rr"2sr"cs�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�xr
r
r�
<listcomp>Asz+SimSMTPChannel.__init__.<locals>.<listcomp>)�join�_extrafeaturesr^r#�__init__)rZextra_featuresrs�kwr_r
rr+?s�zSimSMTPChannel.__init__c
s�|j|jkrE|j�|j�}tdt|�tjd�g|_z|�	|�WdSt
yD}z|j|_|�d|j
|jf�WYd}~dSd}~wwt���dS)NzData:)�file�%s %s)�
smtp_state�AUTHZ_emptystringr)Zreceived_lines�print�reprr�r��auth_objectr"�COMMAND�push�	smtp_code�
smtp_errorr^�found_terminator)r�linerr_r
rr8Es� ��zSimSMTPChannel.found_terminatorcCs�|js
|�d�dS|jrd|jvr|�d�dS|jdur%|�d�dS|��}t|�dvr6|�d�dSd|d���d	d
�}zt	||�|_
Wnty\|�d�|��YdSw|j
|_|�
t|�dkrp|d
�dSd�dS)Nz503 Error: send EHLO firstr0z(500 Error: command "AUTH" not recognizedz3503 Bad sequence of commands: already authenticated)rrSz/501 Syntax: AUTH <mechanism> [initial-response]z_auth_%sr�-�_zQ504 Command parameter not implemented: unsupported  authentication mechanism {!r}rSr)�
seen_greetingr5�
extended_smtpr*�authenticated_user�split�len�lower�replace�getattrr3�AttributeErrorr�r0r/)r�argrsZauth_object_namer
r
r�	smtp_AUTHSs4


�
��(zSimSMTPChannel.smtp_AUTHcCs,|r||_|�d�n|�d�|j|_dS)Nz235 Authentication Succeededz&535 Authentication credentials invalid)r>r5r4r/)r�userZvalidr
r
r�_authenticatedls

zSimSMTPChannel._authenticatedcCst�|�d���d�S)Nr��utf-8)�base64Zdecodebytes�encoder�)r�stringr
r
r�_decode_base64tszSimSMTPChannel._decode_base64c
Cs�|dur|�d�dS|�|�}z|�d��^}}}Wnty7}z|�d�||��WYd}~dSd}~ww|�||tdk�dS)Nz334 ��=535 Splitting response {!r} into user and password failed: {}r)r5rMr?rDr�rH�sim_auth)rrE�logpassr;rG�passwordrr
r
r�_auth_plainws
���zSimSMTPChannel._auth_plaincCsb|dur|�d�dSt|d�s|�|�|_|�d�dS|�|�}|�|j|tdk�|`dS)Nz334 VXNlcm5hbWU6�_auth_login_userz334 UGFzc3dvcmQ6r)r5rbrMrTrHrP)rrErRr
r
r�_auth_login�s

zSimSMTPChannel._auth_logincCs|�d�dS)Nz334 QnVHZ1liVWdHeQ==)r5�rrEr
r
r�_auth_buggy�szSimSMTPChannel._auth_buggyc
Cs�|dur|�d�t��dS|�|�}z|��\}}Wnty7}z|�d�||��WYd}~dSd}~wwt�td�	d�|�t��	d�d��
�}|�|||k�dS)Nz334 {}rOFrr��md5)r5r��sim_cram_md5_challengerMr?rD�hmacZHMACrPrKZ	hexdigestrH)rrErQrGZhashed_passrZvalid_hashed_passr
r
r�_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*r5r<r=)rrE�respr
r
r�	smtp_EHLO�s


zSimSMTPChannel.smtp_EHLOcCs:|tvr|�dt|t�|�f�dS|�d|�dS)N�	250 %s %sz550 No such user: %s)�	sim_usersr5r#�	quoteaddrrVr
r
r�	smtp_VRFY�s zSimSMTPChannel.smtp_VRFYcCs�|��}|tvr;t|}t|�D](\}}t�|�}|t|�dkr-|�dt||f�q|�dt||f�qdS|�d�dS)Nrz	250-%s %sr^z550 No access for you!)rA�	sim_lists�	enumerater#r`r@r5r_)rrEZ	list_nameZ	user_listrZ
user_emailZquoted_addrr
r
r�	smtp_EXPN�s
�zSimSMTPChannel.smtp_EXPNcs6|jdurtt|��|�dS|�|j�|��dSr)�
quit_responser^r#�	smtp_QUITr5�close_when_donerVr_r
rrf�s
zSimSMTPChannel.smtp_QUITcs<|jdur
t��|�dS|�|j�|jr|��dSdSr)�
mail_responser^�	smtp_MAILr5�
disconnectrgrVr_r
rri�s
�zSimSMTPChannel.smtp_MAILcsB|jdur
t��|�dS|jd7_|�|j|jd�dS�Nr)�
rcpt_responser^�	smtp_RCPT�
rcpt_countr5rVr_r
rrm�s

zSimSMTPChannel.smtp_RCPTcs|jd7_t��|�dSrk)�
rset_countr^�	smtp_RSETrVr_r
rrp�szSimSMTPChannel.smtp_RSETcs*|jdur
t��|�dS|�|j�dSr)�
data_responser^�	smtp_DATAr5rVr_r
rrr�s
zSimSMTPChannel.smtp_DATAcC��rr
rr
r
r�handle_error��zSimSMTPChannel.handle_errorr)rUrVrWrerhrlrqrnrorjr0r>r+r8rFrHrMrSrUrWr[r]rardrfrirmrprrrtrcr
r
r_rr#3s8




r#c@s8eZdZeZdd�Zdd�Zdd�Zdd�Zd	d
�Z	dS)�
SimSMTPServercOs*g|_i|_tjj|g|�Ri|��dSr)�_extra_features�
_addressesr��
SMTPServerr+�rrsr,r
r
rr+�szSimSMTPServer.__init__cCs|j|j||||jd�|_dS)Nro)�
channel_classrw�_decode_data�_SMTPchannel�rrrr
r
r�handle_accepted�s
�zSimSMTPServer.handle_acceptedcCs||jd<||jd<dS)N�from�tos)rx)r�peer�mailfrom�rcpttos�datar
r
r�process_message�s
zSimSMTPServer.process_messagecCs|j�|�dSr)rw�append)rZfeaturer
r
r�add_feature�szSimSMTPServer.add_featurecCrsrr
rr
r
rrtruzSimSMTPServer.handle_errorN)
rUrVrWr#r{r+rr�r�rtr
r
r
rrv�srvc@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�SMTPSimTestscC�t��|_tj|_tjt_t��|_	t��|_
ttdfddd�|_
|j
j��d|_|j
|j	|j
f}tjt|d�|_|j��|j	��|j	��dS�NrrmTrorrq)rrtrur$rvrwrr~rrirjrvr/rr�r%r�rkr�r�r�r�r�r
r
rr&s




zSMTPSimTests.setUpcC�D|jt_|j��|j��t�|j	�|`	|�
�tj|j�dSr�
rwr$rvrjrrir�rr�r�r�r�rurr
r
rr'�

zSMTPSimTests.tearDowncCr�r�r�r�r
r
rr�%r�zSMTPSimTests.testBasiccCs�tjt|jdtjd�}|�|ji�dddddd�}|��|�|j|�|D]
}|�	|�
|��q'|�|�
d��|��dS)Nr�r�r%Z20000000)�expn�sizeZstarttlsZ	deliverbyr�zunsupported-feature)
r#rYr/r%rr�r(�esmtp_featuresr��
assertTruer
�assertFalser�)rr�Zexpected_features�kr
r
r�testEHLO+s ��zSMTPSimTests.testEHLOcCs�tjt|jdtjd�}t��D]\}}dtd|t�	|�fd�f}|�
|�|�|�qd}dd|�d�f}|�
|�|�|�|�
�dS)	Nr�r�r�r.r�r��&zNo such user: %s)r#rYr/r%rr�r_�items�bytesr`r(r�rKr�)rr�Z	addr_spec�name�expected_known�u�expected_unknownr
r
rr�As���zSMTPSimTests.testVRFYc		Cs�tjt|jdtjd�}t��D],\}}g}|D]}|�dt	|t�
|�f�qdtd�|�d�f}|�
|�|�|�qd}d}|�
|�|�|�|��dS)	Nr�r�r.r��
r�zPSU-Members-List)r�sNo access for you!)r#rYr/r%rr�rbr�r�r_r`r�r)r(r�r�)	rr�Zlistname�membersZusersr�r�r�r�r
r
r�testEXPNPs�zSMTPSimTests.testEXPNcC�N|j�d�tjt|jdtjd�}|�t	dt	d�}|�
|d�|��dS)N�
AUTH PLAINr�r�rr���sAuthentication Succeeded�rr�r#rYr/r%rr��loginrPr(r�rr�r\r
r
r�testAUTH_PLAIN`��zSMTPSimTests.testAUTH_PLAINcCr�)N�
AUTH LOGINr�r�rrr�r�r�r
r
r�testAUTH_LOGINhr�zSMTPSimTests.testAUTH_LOGINcC�||j�d�tjt|jdtjd��#}t\|_	|_
|�d�|jd|j
dd�}|�|d�Wd�dS1s7wYdS)	Nr�r�r��test_auth_login�LOGINT�Zinitial_response_okr��rr�r#rYr/r%rr�rPrGrRr��authZ
auth_loginr(r�r
r
r�"testAUTH_LOGIN_initial_response_okp��
"�z/SMTPSimTests.testAUTH_LOGIN_initial_response_okcCr�)	Nr�r�r�r�r�Fr�r�r�r�r
r
r�%testAUTH_LOGIN_initial_response_notokyr�z2SMTPSimTests.testAUTH_LOGIN_initial_response_notokcs��j�d�d�fdd�	}tjt�jdtjd�}z:t\|_	|_
|�d�d}��tj
|��}|jd|d	d
�Wd�n1s@wYW|��dSW|��dS|��w)Nz
AUTH BUGGYcs��d|�dS)Ns
BuGgYbUgGyrN)r()Z	challengerr
r�
auth_buggy�sz/SMTPSimTests.testAUTH_BUGGY.<locals>.auth_buggyr�r�Ztest_auth_buggyz&^Server AUTH mechanism infinite loop.*ZBUGGYFr�r)rr�r#rYr/r%rr�rPrGrRr�ZassertRaisesRegexZ
SMTPExceptionr�r)rr�r�Zexpect�cmr
rr�testAUTH_BUGGY�s �
��zSMTPSimTests.testAUTH_BUGGYrXT)ZopensslcCr�)Nz
AUTH CRAM-MD5r�r�rrr�r�r�r
r
r�testAUTH_CRAM_MD5�s�zSMTPSimTests.testAUTH_CRAM_MD5cCr�)NzAUTH BOGUS PLAIN LOGIN CRAM-MD5r�r�rrr�r�r�r
r
r�testAUTH_multiple�s�zSMTPSimTests.testAUTH_multiplec	Cs�ddh}zt��Wn	tyYnw|�d�|D]}|j�d�|��q|D]P}|j|d��@tj	t
|jdtj
d�}|�d�td	td
|_|_d|���dd
�}|�|t||��}|�|d�|��Wd�n1stwYq)dS)NZPLAINr�zCRAM-MD5zAUTH {})�	mechanismr�r�ZfoorrZauth_r:r;r�)�hashlibrXrD�addrr�r�ZsubTestr#rYr/r%rr�r�rPrGrRrArBr�rCr(r)rZ	supportedr�r��methodr\r
r
r�test_auth_function�s0�

�

���zSMTPSimTests.test_auth_functioncCs�tjt|jdtjd�}|��\}}|�|d�|�d|j	�|�
�|�d|j	�|�t|j�|�d|j	�|�
�|�d|j	�|�
�dS)Nr�r�r�r�)r#rYr/r%rr�r�r(r�r�r�r�rJZehlo_or_helo_if_needed�rr��code�messager
r
r�test_quit_resets_greeting�s
�z&SMTPSimTests.test_quit_resets_greetingcCs�t�t|j��}|��\}}|�|d�Wd�n1swY|�tj|jd�t�t|j��}|�	�Wd�n1sBwY|�tj|jd�dS)Nr�sfoo)
r#rYr/r%r�r(rCrrrr�r
r
r�test_with_statement�s�
�z SMTPSimTests.test_with_statementc	Cs�|�tj��(}t�t|j��}|��d|jj_	Wd�n1s"wYWd�n1s1wY|�
|jjd�|�
|jj
d�dS)Nz421 QUIT FAILED�sQUIT FAILED)rCr#rrYr/r%r�rr}rer(r�r6r7)r�errorr�r
r
r� test_with_statement_QUIT_failure�s���z-SMTPSimTests.test_with_statement_QUIT_failurecCs|tjt|jdtjd�}|��d|jj_	d|jj_
|�tj��|�
ddd�Wd�n1s1wY|�|j�dS)Nr�r�z451 Requested action abortedTr�r��test message)r#rYr/r%rr�r�rr}rhrjrC�SMTPSenderRefusedr�r9r<r�r
r
r�test__rest_from_mail_cmd�s�

�z%SMTPSimTests.test__rest_from_mail_cmdcCs�tjt|jdtjd�}|��d|jj_	|�
tj��|�ddd�Wd�n1s,wY|�
|j�|�|jjjd�dS)Nr�r�z421 closing connectionr�r�r�r)r#rYr/r%rr�r�rr}rhrCr�r�r9r<r(ror�r
r
r�test_421_from_mail_cmd�s�
�z#SMTPSimTests.test_421_from_mail_cmdcCs�tjt|jdtjd�}|��ddg|jj_	|�
tj��}|�dgd�d�Wd�n1s0wY|�
|j�|�|jjjd�|�|jjdd	d
i�dS)Nr�r�z250 accepted�421 closingr�)r��FrankZGeorger�rr�)r�sclosing)r#rYr/r%rr�r�rr}rlrCZSMTPRecipientsRefusedr�r9r<r(ro�assertDictEqualr�rs)rr�rr
r
r�test_421_from_rcpt_cmd�s��z#SMTPSimTests.test_421_from_rcpt_cmdcCs�Gdd�dt�}||j_tjt|jdtjd�}|�	�|�
tj��|�ddgd�Wd�n1s4wY|�
|j�|�|jjjd�dS)	NcseZdZ�fdd�Z�ZS)z=SMTPSimTests.test_421_from_data_cmd.<locals>.MySimSMTPChannelcs(|j|jkr
|�d�dSt���dS)Nr�)r/ZDATAr5r^r8rr_r
rr8szNSMTPSimTests.test_421_from_data_cmd.<locals>.MySimSMTPChannel.found_terminator)rUrVrWr8rcr
r
r_r�MySimSMTPChannelsr�r�r�zJohn@foo.orgz
Sally@foo.orgr�r)r#rr{r#rYr/r%rr�r�rCZ
SMTPDataErrorr�r9r<r(r}rn)rr�r�r
r
r�test_421_from_data_cmds��z#SMTPSimTests.test_421_from_data_cmdcCs�tjt|jdtjd�}|�|j�|��|�	|j
�|�|�d��|j
tj|jdddddgd	�|j
tj|jdddgd
�dS)Nr�r��smtputf8r�r�r%rr�r�Zoptions)r#rYr/r%rr�r�rr�r��
does_esmtpr�r
rC�SMTPNotSupportedErrorr�r�r�r
r
r�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#rYr/r%rr�r�rrC�UnicodeEncodeErrorr�r�r�r
r
r�"test_send_unicode_without_SMTPUTF8#s�z/SMTPSimTests.test_send_unicode_without_SMTPUTF8cCs|t�}d|d<d|d<d|d<tjt|jdtjd�}|�|j�|�	tj
��|�|�Wd�dS1s7wYdS)	Nrr�r�r��Nudge nudge, wink, wink ὠ9�Subjectr�r�)rr#rYr/r%rr�r�rrCr�r�)rr�r�r
r
r�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#rYr/r%rr�r�rrr�ZutilsZ
formataddrr�r�r(rrx)rr�r�r
r
r�1test_name_field_not_included_in_envelop_addresses9s�z>SMTPSimTests.test_name_field_not_included_in_envelop_addressesN)rUrVrWr&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�r
r
r
rr�s8		

		
r�c@s*eZdZdd�Zdd�Z		ddd�ZdS)	�SimSMTPUTF8ServercOs(ddg|_tjj|g|�Ri|��dS)NrZ8BITMIME)rwr�ryr+rzr
r
rr+Ks
zSimSMTPUTF8Server.__init__cCs"|j|j||||j|jd�|_dS)N�rp�enable_SMTPUTF8)r{rwr|r�r}r~r
r
rrRs

�z!SimSMTPUTF8Server.handle_acceptedNcCs(||_||_||_||_||_||_dSr)Z	last_peer�
last_mailfrom�last_rcpttos�last_message�last_mail_options�last_rcpt_options)rr�r�r�r�rZrcpt_optionsr
r
rr�Ys
z!SimSMTPUTF8Server.process_message)NN)rUrVrWr+rr�r
r
r
rr�Is�r�c@s@eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dS)�SMTPUTF8SimTestsNcCs�t��|_tj|_tjt_t��|_	t��|_
ttdfdddd�|_
|j
j��d|_|j
|j	|j
f}tjt|d�|_|j��|j	��|j	��dS)NrrmFTr�rrq)rrtrur$rvrwrr~rrirjr�r/rr�r%r�rkr�r�r�r�r�r
r
rr&gs



�

zSMTPUTF8SimTests.setUpcCr�rr�rr
r
rr'{r�zSMTPUTF8SimTests.tearDowncCsJtjt|jdtjd�}|�|j�|��|�	|j
�|�	|�d��dS)Nr�r�r�)r#rYr/r%rr�r�rr�r�r�r
r�r
r
r�$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!rIr�r�uJőhnuSállyrrr�)rKr#rYr/r%rr�r�rr�r(rr�r�r�r�r�r�r�r
r
r�,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�rIr�r�uJőrrr�r�uJános)rKr#rYr/r%rr�r�rr�r(r�Zrcptr�rr�r�r�r�r�r�r�r
r
r�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.comrr)rZset_content�textwrap�dedentr#rYr/r%rr�r�rr(r�rr�r�r�r�r�r�r�)rr�r)r�r
r
r�2test_send_message_uses_smtputf8_if_addrs_non_ascii�s$


�zCSMTPUTF8SimTests.test_send_message_uses_smtputf8_if_addrs_non_ascii)
rUrVrWrr&r'r�r�r�r�r
r
r
rr�cs	r�spsudoesnotexistr%)Zeolc@seZdZdd�ZdS)�!SimSMTPAUTHInitialResponseChannelcCsL|��}|d��dkrt|�dkr|dtkr|�d�dS|�d�dS)Nr�plainrSrz235 Okz571 Bad authentication)r?rAr@�EXPECTED_RESPONSEr5)rrErsr
r
rrF�s
z+SimSMTPAUTHInitialResponseChannel.smtp_AUTHN)rUrVrWrFr
r
r
rr��sr�c@seZdZeZdS)� SimSMTPAUTHInitialResponseServerN)rUrVrWr�r{r
r
r
rr��sr�c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�SMTPAUTHInitialResponseSimTestscCr�r�)rrtrur$rvrwrr~rrirjr�r/rr�r%r�rkr�r�r�r�r�r
r
rr&�s



�

z%SMTPAUTHInitialResponseSimTests.setUpcCr�rr�rr
r
rr'�r�z(SMTPAUTHInitialResponseSimTests.tearDowncCs:|j�d�tjt|jdtjd�}|�dd�|�	�dS)Nr�r�r��psu�doesnotexist)
rr�r#rYr/r%rr�r�rr�r
r
r�%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#rYr/r%rr�rGrRr�Z
auth_plainrr()rr�r�Zresponser
r
r�$testAUTH_PLAIN_initial_response_auth
s�zDSMTPAUTHInitialResponseSimTests.testAUTH_PLAIN_initial_response_authN)rUrVrWr&r'r�r�r
r
r
rr��s
r��__main__)HrJZemail.mime.textr�Z
email.messagerZemail.base64mimerZ
encode_base64Zemail.utilsr�rZr$r#r{rKrxrgrr�r�r~ra�testrrZtest.supportrrrZ
unittest.mockr	�warnings�catch_warnings�simplefilter�DeprecationWarningrfr�r/�platformrZSMTPChannelr r!ZTestCaserXrZrkr�r�rlrrrrr_rPrYrb�	Exceptionr"r#ryrvr�r�r�r�r�r�r�rU�mainr
r
r
r�<module>s�

�
cX ��9Eo
1�