Server : LiteSpeed
System : Linux server51.dnsbootclub.com 4.18.0-553.62.1.lve.el8.x86_64 #1 SMP Mon Jul 21 17:50:35 UTC 2025 x86_64
User : nandedex ( 1060)
PHP Version : 8.1.33
Disable Function : NONE
Directory :  /opt/cppython/lib/python3.8/test/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]


Current File : //opt/cppython/lib/python3.8/test/__pycache__/test_smtplib.cpython-38.opt-1.pyc
U

>��g��@spddlZddlZddlZddlmZddlmZddl	Zddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlmZmZddlmZddlmZmZmZddlm Z ddl!m"Z"ej#d	k�rd
d�Z$e$e
j%_$dd
�Z&Gdd�dej'�Z(dd�Z)dZ*dZ+Gdd�dej'�Z,Gdd�dej'�Z-Gdd�dej'�Z.Gdd�dej'�Z/Gdd�dej'�Z0ddd d!�Z1d"Z2d#Z3d$d%gd&gd'�Z4Gd(d)�d)e5�Z6Gd*d+�d+e
j%�Z7Gd,d-�d-e
j8�Z9Gd.d/�d/ej'�Z:Gd0d1�d1e9�Z;Gd2d3�d3ej'�Z<ed4d5d6�Z=Gd7d8�d8e7�Z>Gd9d:�d:e9�Z?Gd;d<�d<ej'�Z@eAd=k�rle�B�dS)>�N)�EmailMessage)�body_encode)�support�mock_socket)�HOST)�threading_setup�threading_cleanup�join_thread)�requires_hashdigest)�Mock�darwincCsdS�N���selfrr�0/opt/cppython/lib/python3.8/test/test_smtplib.py�handle_expt src
Cs�|��|��z~z|��\}}Wntjk
r8YnTXd}|r�|dkr�t�g|gg�\}}}|rz|�|�}	||	d�}|d8}q>|��W5|��|��XdS)Ni�r�)�listen�set�close�accept�socket�timeout�select�send)
�evt�buf�serv�conn�addr�n�r�w�e�sentrrr�server%s 

r&c@sleZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�ZdS)�GeneralTestscCstt_d|_dS)N�)r�smtplibr�portrrrr�setUp=szGeneralTests.setUpcCs
tt_dSr
)rr)rrrr�tearDownAszGeneralTests.tearDowncCsd}d}|�|t�|��dS)Nzabc
.jkl
foo
..bluezabc
..jkl
foo
...blue)�assertEqualr)Z	quotedata)rZteststr�expectedrrr�
testQuoteDataFszGeneralTests.testQuoteDatacCs$t�d�t�t|j�}|��dS)N�220 Hola mundo�r�
reply_withr)�SMTPrr*r�r�smtprrr�
testBasic1Ks
zGeneralTests.testBasic1cCs6t�d�tjt|jdd�}|�|jd�|��dS)Nr0)z	127.0.0.1i�M)�source_address)	rr2r)r3rr*r-r7rr4rrr�testSourceAddressQs

�zGeneralTests.testSourceAddresscCs*t�d�t�dt|jf�}|��dS)Nr0z%s:%sr1r4rrr�
testBasic2Ys
zGeneralTests.testBasic2cCs6t�d�tjt|jdd�}|�|jd�|��dS)Nr0Ztesthost)�local_hostname)	rr2r)r3rr*r-r:rr4rrr�testLocalHostName_s
zGeneralTests.testLocalHostNamec	Cspt�d�|�t���t�d�|�t��d�zt�t|j	�}W5t�d�X|�|j
��d�|��dS)Nr0�)
rr2�assertIsNone�getdefaulttimeout�setdefaulttimeoutr-r)r3rr*�sock�
gettimeoutrr4rrr�testTimeoutDefaultfs

zGeneralTests.testTimeoutDefaultc	Csbt�d�|�t���t�d�ztjt|j	dd�}W5t�d�X|�|j
���|��dS�Nr0r<)r)
rr2r=rr>r?r)r3rr*r@rArr4rrr�testTimeoutNoners

zGeneralTests.testTimeoutNonecCs:t�d�tjt|jdd�}|�|j��d�|�	�dSrC)
rr2r)r3rr*r-r@rArr4rrr�testTimeoutValue}s
zGeneralTests.testTimeoutValuec	Csht�d�t��}|�d�t���}|�t|j	�W5QRX|�
�t�dtj
�}|�|��|�dS)N�220 Hello worldrz	^connect:�rr2r)r3Zset_debuglevelrZcaptured_stderr�connectrr*r�re�compile�	MULTILINE�assertRegex�getvalue�rr5�stderrr.rrr�test_debuglevel�s


zGeneralTests.test_debuglevelc	Csht�d�t��}|�d�t���}|�t|j	�W5QRX|�
�t�dtj
�}|�|��|�dS)NrF�z#^\d{2}:\d{2}:\d{2}\.\d{6} connect: rGrNrrr�test_debuglevel_2�s


�zGeneralTests.test_debuglevel_2N)�__name__�
__module__�__qualname__r+r,r/r6r8r9r;rBrDrErPrRrrrrr';s
r'c	Cs�|��zrzVttd�rtj	}ntj
}d}tjr^|dkr^|dtj�|��rT|��q^|d8}q(Wntj
k
rvYnXW5|��s�t�d�|��t��|��XdS)Ng�?�polli�r�{�G�z�?r)r�is_set�time�sleepr�asyncoreZ	close_all�hasattrrZpoll2rVZ
socket_maprr)r�serv_evt�
client_evtZpoll_funr!rrr�debugging_server�s&


r_z&---------- 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_datarQ��target�args)r�
thread_keyr�getfqdn�real_getfqdnr�sys�stdout�
old_stdout�io�StringIO�output�	threading�Eventr]r^�smtpd�DEBUGSTREAM�old_DEBUGSTREAMZDebuggingServerrr�getsockname�hostr*�Threadr_�thread�start�wait�clear�rZ	serv_argsrrrr+�s&



�

zDebuggingServerTests.setUpcCsZ|jt_|j��|j��t|j�|j	t
_tj
��|jt_
|`|��t|j�dSr
)rjrrir^rr]r{r	ryrmrkrlrsrtrru�
doCleanupsrrhrrrrr,�s



zDebuggingServerTests.tearDowncCs$|j��}tjdd|tjtjBd�S)Nz(.*?)^X-Peer:\s*\S+\n(.*)z\1\2)�flags)rprMrI�subrK�DOTALL)r�test_outputrrr�get_output_without_xpeer�s


�z-DebuggingServerTests.get_output_without_xpeercCs tjt|jddd�}|��dS)N�	localhost��r:r�r)r3rr*�quitr4rrr�	testBasic�szDebuggingServerTests.testBasicc
Cs�t��}zXtj|j|jdd|j|fd�}|�|j�|�|j	|j|f�|�|j
d�|��Wn>tk
r�}z |j
t
jkr�|�d|��W5d}~XYnXdS)Nr�r�)r:rr7zcouldn't bind to source port %d)rZfind_unused_portr)r3rwr*�
addCleanuprr-r7r:r��OSError�errnoZ
EADDRINUSEZskipTest)rZsrc_portr5r$rrrr8�s�z&DebuggingServerTests.testSourceAddresscCs@tjt|jddd�}|�|j�d}|�|��|�|��dS�Nr�r�r���sOK)	r)r3rr*r�rr-�noopr��rr5r.rrr�testNOOP
s
zDebuggingServerTests.testNOOPcCs@tjt|jddd�}|�|j�d}|�|��|�|��dSr�)	r)r3rr*r�rr-Zrsetr�r�rrr�testRSETs
zDebuggingServerTests.testRSETcCs@tjt|jddd�}|�|j�d}|�|��|�|��dS)Nr�r�r�)r�s
SIZE 33554432
HELP)	r)r3rr*r�rr-�ehlor�r�rrr�testELHOs
zDebuggingServerTests.testELHOcCsJtjt|jddd�}|�|j�d}|�d�|�|��|�|�	�dS)Nr�r�r�)i�sEXPN not implementedZEXPN)
r)r3rr*r�r�putcmdr-Zgetreplyr�r�rrr�testEXPNNotImplemented s
z+DebuggingServerTests.testEXPNNotImplementedc	Cs^tjt|jddd�}|�|j�|�t��}|�d�W5QRX|�	dt
|j��|��dS)Nr��
r�zhelo
X-INJECTED�prohibited newline characters)
r)r3rr*r�r�assertRaises�
ValueErrorr��assertIn�str�	exceptionr�)rr5�excrrr�&test_issue43124_putcmd_escapes_newline)s�z;DebuggingServerTests.test_issue43124_putcmd_escapes_newlinecCsTtjt|jddd�}|�|j�d}|�|�d�|�|�|�d�|�|�	�dS)Nr�r�r�)�s>Cannot VRFY user, but will accept message and attempt delivery�nobody@nowhere.com)
r)r3rr*r�rr-�vrfyZverifyr�r�rrr�testVRFY3szDebuggingServerTests.testVRFYcCsHtjt|jddd�}|�|j�|��d}|�|��|�|��dS)Nr�r�r�)i�sDuplicate HELO/EHLO)	r)r3rr*r�rZhelor-r�r�rrr�testSecondHELO<sz#DebuggingServerTests.testSecondHELOcCs<tjt|jddd�}|�|j�|�|��d�|��dS)Nr�r�r�s@Supported commands: EHLO HELO MAIL RCPT DATA RSET NOOP QUIT VRFY)	r)r3rr*r�rr-�helpr�r4rrr�testHELPFszDebuggingServerTests.testHELPcCs�d}tjt|jddd�}|�|j�|�dd|�t�d�|�	�|j
��|j�
�|j��dt|tf}|�|j��|�dS)	N�A test messager�r�r��John�SallyrW�%s%s
%s�r)r3rr*r�r�sendmailrYrZr�r^rr]r{rp�flush�	MSG_BEGIN�MSG_ENDr-rM�r�mr5�mexpectrrr�testSendMs



zDebuggingServerTests.testSendcCs�d}tjt|jddd�}|�|j�|�dd|�t�d�|�	�|j
��|j�
�|j��dt|�d	�tf}|�|j��|�dS)
NsA test messager�r�r�r�r�rWr��ascii)r)r3rr*r�rr�rYrZr�r^rr]r{rpr�r��decoder�r-rMr�rrr�testSendBinary_s



z#DebuggingServerTests.testSendBinarycCs�d}tjt|jddd�}|�|j�|�dd|�t�d�|�	�|j
��|j�
�|j��dt|tf}|�|j��|�dS)	Nz.A test
.mes.sage.r�r�r�r�r�rWr�r�r�rrr�testSendNeedingDotQuotens



z,DebuggingServerTests.testSendNeedingDotQuotec	Cs�d}tjt|jddd�}|�|j�|�t��}|�dd|�W5QRX|�	dt
|j��t�
d�|��tj��}|�d	|�dS)
N�wazzuuup
linetwoz
hi
X-INJECTEDr�r��	hi@me.com�
you@me.comz2prohibited newline characters: ehlo hi\nX-INJECTEDrWz
X-INJECTED)r)r3rr*r�rr�r�r�r�r�r�rYrZr�rsrtrM�assertNotIn)rr�r5r��debugoutrrr�$test_issue43124_escape_localhostname~s��

z9DebuggingServerTests.test_issue43124_escape_localhostnamec	Cs�d}tjt|jddd�}|�|j�|�dd|�|�t��}|�	dddg�W5QRXt
|j�}|�d	|�|�d
|�t
�d�|��tj��}|�d|�|�d
|�|�d|�|�d|�dS)Nr�r�r�r�r�r�zX-OPTION
X-INJECTED-1zX-OPTION2
X-INJECTED-2r�z.X-OPTION\nX-INJECTED-1 X-OPTION2\nX-INJECTED-2rWzX-OPTIONz	X-OPTION2zX-INJECTED-1zX-INJECTED-2)r)r3rr*r�rr�r�r��mailr�r�r�rYrZr�rsrtrMr�)rr�r5r��msgr�rrr�test_issue43124_escape_options�s*�


z3DebuggingServerTests.test_issue43124_escape_optionscCs�d}tjt|jddd�}|�|j�|�dd|�t�d�|�	�|j
��|j�
�|j��dt|tf}|�|j��|�tj��}t�d	tj�}|�||�dS)
Nr�r�r�r�z<>r�rWr�z^sender: <>$)r)r3rr*r�rr�rYrZr�r^rr]r{rpr�r�r�r-rMrsrtrIrJrKrL)rr�r5r�r��senderrrr�testSendNullSender�s




z'DebuggingServerTests.testSendNullSendercCs�tjj�d�}tjt|jddd�}|�|j	�|j
|ddd�t�d�|�
�|j��|j��|j��|��}|d	=d
t|��tf}|�||�dS)Nr�r�r�r�r�r��Z	from_addrZto_addrsrW�X-Peerr�)�email�mime�text�MIMETextr)r3rr*r�r�send_messagerYrZr�r^rr]r{rpr�r�r��	as_stringr�r-)rr�r5r�r�rrr�testSendMessage�s



z$DebuggingServerTests.testSendMessagec	Cstjj�d�}d|d<d|d<d|d<d|d	<tjt|jd
dd�}|�|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�r�rWr�r��^sender: foo@bar.com$)r�r�ZFredzroot@localhostzwarped@silly.walks.com�^recips: .*'{}'.*$)!r�r�r�r�r)r3rr*r�rr�rYrZr�r-r^rr]r{rpr�r�r�r�r�rsrtrMrIrJrKrL�format�	rr�r5r�r�r�r�r �to_addrrrr�testSendMessageWithAddresses�s6





�z1DebuggingServerTests.testSendMessageWithAddressesc	Cs�tjj�d�}d|d<d|d<tjt|jddd�}|�|j	�|�
|�t�d	�|�
�|j��|j��|j��|��}|d
=dt|��tf}|�||�tj��}t�dtj�}|�||�d
D]$}t�d� |�tj�}|�||�q�dS)Nr�r�r��John, Dinsdaler�r�r�r�rWr�r�r��r��Dinsdaler��!r�r�r�r�r)r3rr*r�rr�rYrZr�r^rr]r{rpr�r�r�r�r�r-rsrtrMrIrJrKrLr�r�rrr� testSendMessageWithSomeAddresses�s.





�z5DebuggingServerTests.testSendMessageWithSomeAddressesc
Cstjj�d�}d|d<d|d<tjt|jddd�}|�|j	�|j
|d	d
d�t�d�|�
�|j��|j��|j��|��}|d
=dt|��tf}|�||�tj��}t�dtj�}|�||�dD]$}t�d� |�tj�}|�!||�q�t�dtj�}	|�||	�dS)Nr�r�r�r�r�r�r�r�zjoe@example.comzfoo@example.netr�rWr�r�z^sender: joe@example.com$r�r�z^recips: .*'foo@example.net'.*$)"r�r�r�r�r)r3rr*r�rr�rYrZr�r^rr]r{rpr�r�r�r�r�r-rsrtrMrIrJrKrLr�ZassertNotRegex)
rr�r5r�r�r�r�r r�Zreciprrr�%testSendMessageWithSpecifiedAddressess2




�z:DebuggingServerTests.testSendMessageWithSpecifiedAddressesc	Cs�tjj�d�}d|d<d|d<d|d<tjt|jdd	d
�}|�|j	�|�
|�t�d�|�
�|j��|j��|j��|��}|d=d
t|��tf}|�||�tj��}t�dtj�}|�||�dD]$}t�d� |�tj�}|�||�q�dS)Nr�zBernard, Biancar�z#the_rescuers@Rescue-Aid-Society.comZSenderr�r�r�r�r�rWr�r�z-^sender: the_rescuers@Rescue-Aid-Society.com$r�r�r�r�rrr�testSendMessageWithMultipleFrom/s0





�z4DebuggingServerTests.testSendMessageWithMultipleFromc	Cs4tjj�d�}d|d<d|d<d|d<d|d	<d
|d<d|d
<d|d<d|d<tjt|jddd�}|�|j	�|�
|�t�d�|�
�|j��|j��|j��|d	=|d=|��}|d=dt|��tf}|�||�tj��}t�dtj�}|�||�dD]&}t�d� |�tj�}|�||��qdS)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�r�rWr�r�z^sender: holy@grail.net$)zmy_mom@great.cooker.comZJeffr�r�r�r�rrr�testSendMessageResentLs>





�z*DebuggingServerTests.testSendMessageResentc	Cs�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|jddd�}|�|j	�|�
t��|�|�W5QRX|�	�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)r3rr*r�rr�r�r��rr�r5rrr�#testSendMessageMultipleResentRaisesps"z8DebuggingServerTests.testSendMessageMultipleResentRaises)rSrTrU�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�rrrrr`�s6	
	
#$r`c@s$eZdZdd�Zdd�Zdd�ZdS)�NonConnectingTestscCs.t��}|�tj|j�|�tj|jd�dS)Nztest msg)r)r3r��SMTPServerDisconnectedr�rr4rrr�testNotConnected�s�z#NonConnectingTests.testNotConnectedcCs&|�ttjdd�|�ttjd�dS)Nr�Zboguszlocalhost:bogus)r�r�r)r3rrrr�testNonnumericPort�s
�
�z%NonConnectingTests.testNonnumericPortc	Cs$t���}|�|j�W5QRXdSr
)r)r3r=r@r4rrr�testSockAttributeExists�s
z*NonConnectingTests.testSockAttributeExistsN)rSrTrUr�r�r�rrrrr��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)r3r5rr��has_extnr�rrrrr+�s


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

zBadHELOServerTests.setUpcCstt_|jt_dSr
)rr)rmrkrlrrrrr,�szBadHELOServerTests.tearDowncCs|�tjtjt|jdd�dS�Nr�r�)r�r)ZSMTPConnectErrorr3rr*rrrr�testFailingHELO�s�z"BadHELOServerTests.testFailingHELON)rSrTrUr+r,r�rrrrr��sr�c@s:eZdZddejddZdd�Zdd�Zd	d
�ZdS)�TooLongLineTestss250 OK�.rQ�
cCs�t�|_tj|_t��|_|jt_t�	�|_
t�tjtj
�|_|j�d�t�|j�|_|j
|j|jf}tjt|d�|_|j��|j
��|j
��dS)N�re)rrhrkrlrmrnrorprqrrrr�AF_INET�SOCK_STREAMr@�
settimeoutrZ	bind_portr*�respdatarxr&ryrzr{r|)rZservargsrrrr+�s



zTooLongLineTests.setUpcCs6|j��|jt_t|j�|`|��t|j	�dSr
)
rr{rmrkrlr	ryr~rrhrrrrr,�s

zTooLongLineTests.tearDowncCs|�tjtjt|jdd�dSr�)r�r)�SMTPResponseExceptionr3rr*rrrr�testLineTooLong�s�z TooLongLineTests.testLineTooLongN)	rSrTrUr)Z_MAXLINErr+r,r	rrrrr�srzJohn AzSally BzRuth C)�Mr.A@somewhere.com�Ms.B@xn--fo-fka.com�Mrs.C@somewhereesle.com)r
Zsomepasswordz<PENCeUxFREJoU0NnbmhNWitOMjNGNndAZWx3b29kLmlubm9zb2Z0LmNvbT4=r
rr)zlist-1zlist-2c@seZdZdS)�ResponseExceptionN)rSrTrUrrrrr
�sr
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�ccs,d�dd�|D��|_tt|�j||�dS)N�cSsg|]}d�|��qS)z	250-{0}
)r�)�.0�xrrr�
<listcomp>	sz+SimSMTPChannel.__init__.<locals>.<listcomp>)�join�_extrafeatures�superr�__init__)rZextra_featuresrg�kw��	__class__rrrs�zSimSMTPChannel.__init__c
s�|j|jkr�|j�|j�}tdt|�tjd�g|_z|�	|�Wn@t
k
r�}z"|j|_|�d|j
|jf�W5d}~XYnXdSt���dS)NzData:)�file�%s %s)�
smtp_state�AUTHZ_emptystringrZreceived_lines�print�reprrsrt�auth_objectr
�COMMAND�push�	smtp_code�
smtp_errorr�found_terminator)r�liner$rrrr&
s(zSimSMTPChannel.found_terminatorcCs�|js|�d�dS|jr$d|jkr2|�d�dS|jdk	rJ|�d�dS|��}t|�dkrl|�d�dSd|d���d	d
�}zt	||�|_
Wn&tk
r�|�d�|��YdSX|j
|_|�
t|�dkr�|d
nd�dS)Nz503 Error: send EHLO firstrz(500 Error: command "AUTH" not recognizedz3503 Bad sequence of commands: already authenticated)rrQz/501 Syntax: AUTH <mechanism> [initial-response]z_auth_%sr�-�_zQ504 Command parameter not implemented: unsupported  authentication mechanism {!r}rQr)�
seen_greetingr#�
extended_smtpr�authenticated_user�split�len�lower�replace�getattrr!�AttributeErrorr�rr)r�argrgZauth_object_namerrr�	smtp_AUTHs2


�
�zSimSMTPChannel.smtp_AUTHcCs,|r||_|�d�n
|�d�|j|_dS)Nz235 Authentication Succeededz&535 Authentication credentials invalid)r,r#r"r)r�userZvalidrrr�_authenticated4s

zSimSMTPChannel._authenticatedcCst�|�d���d�S)Nr��utf-8)�base64Zdecodebytes�encoder�)r�stringrrr�_decode_base64<szSimSMTPChannel._decode_base64c
Cs�|dkr|�d�np|�|�}z|�d��^}}}Wn:tk
rn}z|�d�||��WY�dSd}~XYnX|�||tdk�dS)Nz334 ��=535 Splitting response {!r} into user and password failed: {}r)r#r;r-r�r�r6�sim_auth)rr3�logpassr)r5�passwordr$rrr�_auth_plain?s
�zSimSMTPChannel._auth_plaincCs^|dkr|�d�nFt|d�s6|�|�|_|�d�n$|�|�}|�|j|tdk�|`dS)Nz334 VXNlcm5hbWU6�_auth_login_userz334 UGFzc3dvcmQ6r)r#r\r;rBr6r>)rr3r@rrr�_auth_loginLs

zSimSMTPChannel._auth_logincCs|�d�dS)Nz334 QnVHZ1liVWdHeQ==)r#�rr3rrr�_auth_buggyYszSimSMTPChannel._auth_buggyc
Cs�|dkr|�d�t��n�|�|�}z|��\}}Wn:tk
rn}z|�d�||��WY�dSd}~XYnXt�td�	d�|�t��	d�d��
�}|�|||k�dS)Nz334 {}r=Frr��md5)r#r��sim_cram_md5_challenger;r-r��hmacZHMACr>r9�	hexdigestr6)rr3r?r5Zhashed_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)rr#r*r+)rr3�resprrr�	smtp_EHLOps

zSimSMTPChannel.smtp_EHLOcCs8|tkr&|�dt|t�|�f�n|�d|�dS)N�	250 %s %sz550 No such user: %s)�	sim_usersr#r)�	quoteaddrrDrrr�	smtp_VRFY{szSimSMTPChannel.smtp_VRFYcCs�|��}|tkrtt|}t|�D]P\}}t�|�}|t|�dkrZ|�dt||f�q |�dt||f�q n
|�d�dS)Nrz	250-%s %srMz550 No access for you!)r/�	sim_lists�	enumerater)rOr.r#rN)rr3Z	list_nameZ	user_listr!Z
user_emailZquoted_addrrrr�	smtp_EXPN�s
zSimSMTPChannel.smtp_EXPNcs4|jdkrtt|��|�n|�|j�|��dSr
)�
quit_responserr�	smtp_QUITr#�close_when_donerDrrrrU�s
zSimSMTPChannel.smtp_QUITcs6|jdkrt��|�n|�|j�|jr2|��dSr
)�
mail_responser�	smtp_MAILr#�
disconnectrVrDrrrrX�s

zSimSMTPChannel.smtp_MAILcsB|jdkrt��|�dS|jd7_|�|j|jd�dS�Nr)�
rcpt_responser�	smtp_RCPT�
rcpt_countr#rDrrrr\�s

zSimSMTPChannel.smtp_RCPTcs|jd7_t��|�dSrZ)�
rset_countr�	smtp_RSETrDrrrr_�szSimSMTPChannel.smtp_RSETcs(|jdkrt��|�n|�|j�dSr
)�
data_responser�	smtp_DATAr#rDrrrra�s
zSimSMTPChannel.smtp_DATAcCs�dSr
rrrrr�handle_error�szSimSMTPChannel.handle_error)N)N)N)N)rSrTrUrTrWr[r`r]r^rYrr,rr&r4r6r;rArCrErJrLrPrSrUrXr\r_rarb�
__classcell__rrrrr�s6




rc@s8eZdZeZdd�Zdd�Zdd�Zdd�Zd	d
�Z	dS)�
SimSMTPServercOs$g|_i|_tjj|f|�|�dSr
)�_extra_features�
_addressesrs�
SMTPServerr�rrgrrrrr�szSimSMTPServer.__init__cCs|j|j||||jd�|_dS)Nrc)�
channel_classre�_decode_data�_SMTPchannel�rrr rrr�handle_accepted�s�zSimSMTPServer.handle_acceptedcCs||jd<||jd<dS)N�from�tos)rf)r�peer�mailfrom�rcpttos�datarrr�process_message�s
zSimSMTPServer.process_messagecCs|j�|�dSr
)re�append)rZfeaturerrr�add_feature�szSimSMTPServer.add_featurecCs�dSr
rrrrrrb�szSimSMTPServer.handle_errorN)
rSrTrUrrirrmrtrvrbrrrrrd�srdc@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
ed�dd��Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�Zd4S)5�SMTPSimTestscCs�t�|_tj|_tjt_t��|_t��|_	t
tdfddd�|_|jj�
�d|_|j|j|j	f}tjt|d�|_|j��|j��|j��dS�NrraTrcrre)rrhrrirjrrqrrr]r^rdrrrvr*rxr_ryrzr{r|r}rrrr+�s



zSMTPSimTests.setUpcCs@|jt_|j��|j��t|j�|`|�	�t
|j�dSr
�rjrrir^rr]r{r	ryr~rrhrrrrr,�s


zSMTPSimTests.tearDowncCs tjt|jddd�}|��dS)Nr�rr�r�r4rrrr��szSMTPSimTests.testBasiccCs~tjt|jddd�}|�|ji�dddddd�}|��|�|j|�|D]}|�|�|��qL|�	|�d��|�
�dS)Nr�rr�rZ20000000)�expn�sizeZstarttlsZ	deliverbyr�zunsupported-feature)r)r3rr*r-�esmtp_featuresr��
assertTruer��assertFalser�)rr5Zexpected_features�krrr�testEHLO�s�zSMTPSimTests.testEHLOcCs�tjt|jddd�}t��D]6\}}dtd|t�|�fd�f}|�|�	|�|�qd}dd	|�
d�f}|�|�	|�|�|��dS)
Nr�rr�r�rr�r��&zNo such user: %s)r)r3rr*rN�items�bytesrOr-r�r9r�)rr5Z	addr_spec�name�expected_known�u�expected_unknownrrrr�s��zSMTPSimTests.testVRFYc		Cs�tjt|jddd�}t��D]X\}}g}|D] }|�dt|t�|�f�q,dt	d�
|�d�f}|�|�|�|�qd}d	}|�|�|�|�|�
�dS)
Nr�rr�rr��
r�zPSU-Members-List)r�sNo access for you!)r)r3rr*rQr�rurNrOr�rr-rzr�)	rr5Zlistname�membersZusersr�r�r�r�rrr�testEXPNszSMTPSimTests.testEXPNcCsL|j�d�tjt|jddd�}|�tdtd�}|�|d�|�	�dS)N�
AUTH PLAINr�rr�rr���sAuthentication Succeeded�
rrvr)r3rr*�loginr>r-r�rr5rKrrr�testAUTH_PLAIN$s
zSMTPSimTests.testAUTH_PLAINcCsL|j�d�tjt|jddd�}|�tdtd�}|�|d�|�	�dS)N�
AUTH LOGINr�rr�rrr�r�r�rrr�testAUTH_LOGIN+s
zSMTPSimTests.testAUTH_LOGINc	Csd|j�d�tjt|jddd��:}t\|_|_|�	d�|j
d|jdd�}|�|d	�W5QRXdS)
Nr�r�rr��test_auth_login�LOGINT�Zinitial_response_okr��
rrvr)r3rr*r>r5r@r��authZ
auth_loginr-r�rrr�"testAUTH_LOGIN_initial_response_ok2s
z/SMTPSimTests.testAUTH_LOGIN_initial_response_okc	Csd|j�d�tjt|jddd��:}t\|_|_|�	d�|j
d|jdd�}|�|d	�W5QRXdS)
Nr�r�rr�r�r�Fr�r�r�r�rrr�%testAUTH_LOGIN_initial_response_notok:s
z2SMTPSimTests.testAUTH_LOGIN_initial_response_notokc	s��j�d�d�fdd�	}tjt�jddd�}zHt\|_|_	|�
d�d}��tj|��}|j
d	|d
d�W5QRXW5|��XdS)
Nz
AUTH BUGGYcs��d|�dS)Ns
BuGgYbUgGyr<)r-)Z	challengerrr�
auth_buggyEsz/SMTPSimTests.testAUTH_BUGGY.<locals>.auth_buggyr�rr�Ztest_auth_buggyz&^Server AUTH mechanism infinite loop.*ZBUGGYFr�)N)rrvr)r3rr*rr>r5r@r�ZassertRaisesRegexZ
SMTPExceptionr�)rr�r5�expect�cmrrr�testAUTH_BUGGYBs
zSMTPSimTests.testAUTH_BUGGYrFcCsL|j�d�tjt|jddd�}|�tdtd�}|�|d�|�	�dS)Nz
AUTH CRAM-MD5r�rr�rrr�r�r�rrr�testAUTH_CRAM_MD5Ss
zSMTPSimTests.testAUTH_CRAM_MD5cCsL|j�d�tjt|jddd�}|�tdtd�}|�|d�|�	�dS)NzAUTH BOGUS PLAIN LOGIN CRAM-MD5r�rr�rrr�r�r�rrr�testAUTH_multiple[s
zSMTPSimTests.testAUTH_multiplec
Cs�ddh}zt��Wntk
r(YnX|�d�|D]}|j�d�|��q8|D]�}|j|d��ttj	t
|jddd�}|�d	�t
d
t
d|_|_d|���d
d�}|�|t||��}|�|d�|��W5QRXqTdS)NZPLAINr�zCRAM-MD5zAUTH {})�	mechanismr�rr�ZfoorrZauth_r(r)r�)�hashlibrFr��addrrvr�ZsubTestr)r3rr*r�r>r5r@r/r0r�r1r-r)rZ	supportedr�r5�methodrKrrr�test_auth_functioncs(

�
zSMTPSimTests.test_auth_functioncCs�tjt|jddd�}|��\}}|�|d�|�d|j�|��|�	d|j�|�
t|j�|�	d|j�|��|�d|j�|��dS)Nr�rr�r�r{)r)r3rr*r�r-r�r|r�r�rHZehlo_or_helo_if_needed�rr5�code�messagerrr�test_quit_resets_greetingxs
�z&SMTPSimTests.test_quit_resets_greetingc	Cs|t�t|j��}|��\}}|�|d�W5QRX|�tj|jd�t�t|j��}|�	�W5QRX|�tj|jd�dS)Nr�sfoo)
r)r3rr*r�r-r�r�rrr�rrr�test_with_statement�sz SMTPSimTests.test_with_statementc
Csh|�tj��2}t�t|j��}|��d|jj_	W5QRXW5QRX|�
|jjd�|�
|jj
d�dS)Nz421 QUIT FAILED�sQUIT FAILED)r�r)rr3rr*r�rrkrTr-r�r$r%)r�errorr5rrr� test_with_statement_QUIT_failure�sz-SMTPSimTests.test_with_statement_QUIT_failurec	Csftjt|jddd�}|��d|jj_d|jj_|�	tj
��|�ddd�W5QRX|�|j
�dS)	Nr�rr�z451 Requested action abortedTr�r��test message)r)r3rr*r�rrkrWrYr��SMTPSenderRefusedr�r=r@r4rrr�test__rest_from_mail_cmd�s

z%SMTPSimTests.test__rest_from_mail_cmdc	Csntjt|jddd�}|��d|jj_|�tj	��|�
ddd�W5QRX|�|j�|�
|jjjd�dS)	Nr�rr�z421 closing connectionr�r�r�r)r)r3rr*r�rrkrWr�r�r�r=r@r-r^r4rrr�test_421_from_mail_cmd�s
z#SMTPSimTests.test_421_from_mail_cmdc	Cs�tjt|jddd�}|��ddg|jj_|�tj	��}|�
dddd	gd
�W5QRX|�|j�|�
|jjjd�|�|jjdddi�dS)
Nr�rr�z250 accepted�421 closingr�r�ZFrankZGeorger�r)r�sclosing)r)r3rr*r�rrkr[r�ZSMTPRecipientsRefusedr�r=r@r-r^�assertDictEqualr�rg)rr5r"rrr�test_421_from_rcpt_cmd�sz#SMTPSimTests.test_421_from_rcpt_cmdc	Cs~Gdd�dt�}||j_tjt|jddd�}|��|�tj	��|�
ddgd�W5QRX|�|j�|�
|jjjd	�dS)
NcseZdZ�fdd�Z�ZS)z=SMTPSimTests.test_421_from_data_cmd.<locals>.MySimSMTPChannelcs&|j|jkr|�d�n
t���dS)Nr�)rZDATAr#rr&rrrrr&�szNSMTPSimTests.test_421_from_data_cmd.<locals>.MySimSMTPChannel.found_terminator)rSrTrUr&rcrrrr�MySimSMTPChannel�sr�r�rr�zJohn@foo.orgz
Sally@foo.orgr�r)rrrir)r3rr*r�r�Z
SMTPDataErrorr�r=r@r-rkr])rr�r5rrr�test_421_from_data_cmd�sz#SMTPSimTests.test_421_from_data_cmdcCs�tjt|jddd�}|�|j�|��|�|j�|�	|�
d��|jtj|j
ddddd	gd
�|jtj|jddd	gd�dS)Nr�r�r��smtputf8r�r�rr�r��r���options)r)r3rr*r�rr�r}�
does_esmtpr~r�r��SMTPNotSupportedErrorr�r�r4rrr�4test_smtputf8_NotSupportedError_if_no_server_support�s0���zASMTPSimTests.test_smtputf8_NotSupportedError_if_no_server_supportcCsHtjt|jddd�}|�|j�|�t|jddd�|�t|j	d�dS)Nr�r�r�ZAliceuBöbruÄlice)
r)r3rr*r�rr��UnicodeEncodeErrorr�r�r4rrr�"test_send_unicode_without_SMTPUTF8�s�z/SMTPSimTests.test_send_unicode_without_SMTPUTF8c	Csdt�}d|d<d|d<d|d<tjt|jddd	�}|�|j�|�tj��|�	|�W5QRXdS)
Nr�r�r�r��Nudge nudge, wink, wink ὠ9�Subjectr�r�r�)
rr)r3rr*r�rr�r�r�)rr�r5rrr�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|jddd�}|�|j�t�}tj�	d�|d<tj�	d�|d<|�
|�|�i�|�|j
jdd	�|�|j
jd
dg�dS)Nr�r�r�)uMichaël�michael@example.comr�)uRené�rene@example.comr�rnr�ror�)r)r3rr*r�rrr�ZutilsZ
formataddrr�r�r-rrf)rr5r�rrr�1test_name_field_not_included_in_envelop_addresses�s�z>SMTPSimTests.test_name_field_not_included_in_envelop_addressesN)rSrTrUr+r,r�r�r�r�r�r�r�r�r�r
r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrw�s4
	
	

rwc@s&eZdZdd�Zdd�Zddd�ZdS)	�SimSMTPUTF8ServercOs"ddg|_tjj|f|�|�dS)Nr�Z8BITMIME)rersrgrrhrrrr�s
zSimSMTPUTF8Server.__init__cCs"|j|j||||j|jd�|_dS)N�rd�enable_SMTPUTF8)rirerjr�rkrlrrrrms�z!SimSMTPUTF8Server.handle_acceptedNcCs(||_||_||_||_||_||_dSr
)Z	last_peer�
last_mailfrom�last_rcpttos�last_message�last_mail_options�last_rcpt_options)rrprqrrrsr�Zrcpt_optionsrrrrtsz!SimSMTPUTF8Server.process_message)NN)rSrTrUrrmrtrrrrr��s
�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)NrraFTr�rre)rrhrrirjrrqrrr]r^r�rrrvr*rxr_ryrzr{r|r}rrrr+s


�

zSMTPUTF8SimTests.setUpcCs@|jt_|j��|j��t|j�|`|�	�t
|j�dSr
ryrrrrr,-s


zSMTPUTF8SimTests.tearDowncCsHtjt|jddd�}|�|j�|��|�|j�|�|�	d��dS)Nr�r�r�r�)
r)r3rr*r�rr�r}r�r�r4rrr�$test_test_server_supports_extensions8s�z5SMTPUTF8SimTests.test_test_server_supports_extensionscCs�d�d�}tjt|jddd�}|�|j�|jdd|dd	gd
�|�|j	j
d�|�|j	jdg�|�|j	j|�|�
d|j	j�|�
d	|j	j�|�|j	jg�dS)N�$¡a test message containing unicode!r7r�r�r�uJőhnuSállyr�r�r�)r9r)r3rr*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|jddd�}|�|j�|��|�|j	dddgd	�d
�|�|�
d�d
�|�|�|�d
�|�|jj
d�|�|jjdg�|�|jj|�|�d|jj�|�d|jj�|�|jjg�dS)Nr�r7r�r�r�uJőr�r�r�r�uJános)r9r)r3rr*r�rr�r-r�Zrcptrsrr�r�r�r�r�r�r�rrr�1test_send_unicode_with_SMTPUTF8_via_low_level_APINs*
��zBSMTPUTF8SimTests.test_send_unicode_with_SMTPUTF8_via_low_level_APIcCs�t�}d|d<d|d<d|d<|�d�t�d�}tjt|jd	d
d�}|�|j	�|�
|�|�i�|�
|jj
d�|�
|jjdg�|�
|jj��|�|�d
|jj�|�d|jj�|�
|jjg�dS)Nr�r�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�r�ufőo@bar.comr�r�)rZset_content�textwrap�dedentr)r3rr*r�rr-r�rr�r�r�r�r�r�r�)rr�r.r5rrr�2test_send_message_uses_smtputf8_if_addrs_non_ascii`s(


�zCSMTPUTF8SimTests.test_send_message_uses_smtputf8_if_addrs_non_ascii)
rSrTrUr�r+r,r�r�r�r�rrrrr�sr�spsudoesnotexistr)Zeolc@seZdZdd�ZdS)�!SimSMTPAUTHInitialResponseChannelcCsL|��}|d��dkr>t|�dkr>|dtkr>|�d�dS|�d�dS)Nr�plainrQrz235 Okz571 Bad authentication)r-r/r.�EXPECTED_RESPONSEr#)rr3rgrrrr4�s
z+SimSMTPAUTHInitialResponseChannel.smtp_AUTHN)rSrTrUr4rrrrr��sr�c@seZdZeZdS)� SimSMTPAUTHInitialResponseServerN)rSrTrUr�rirrrrr��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��dSrx)rrhrrirjrrqrrr]r^r�rrrvr*rxr_ryrzr{r|r}rrrr+�s 

�

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


z(SMTPAUTHInitialResponseSimTests.tearDowncCs8|j�d�tjt|jddd�}|�dd�|��dS)Nr�r�rr��psu�doesnotexist)rrvr)r3rr*r�rr4rrr�%testAUTH_PLAIN_initial_response_login�s
�zESMTPAUTHInitialResponseSimTests.testAUTH_PLAIN_initial_response_logincCsV|j�d�tjt|jddd�}d|_d|_|�d|j	�\}}|�
�|�|d�dS)	Nr�r�rr�r�r�r�r�)rrvr)r3rr*r5r@r�Z
auth_plainrr-)rr5r��responserrr�$testAUTH_PLAIN_initial_response_auth�s
�zDSMTPAUTHInitialResponseSimTests.testAUTH_PLAIN_initial_response_authN)rSrTrUr+r,r�r�rrrrr��sr��__main__)Cr[r8Zemail.mime.textr�Z
email.messagerZemail.base64mimerZ
encode_base64Zemail.utilsr�rHrrsr)rnrIrkrYrr�r�rqZunittest�testrrZtest.supportrrrr	r
Z
unittest.mockr�platformrZSMTPChannelr&ZTestCaser'r_r�r�r`r�r�r�rrNr>rGrQ�	Exceptionr
rrgrdrwr�r�r�r�r�r�rS�mainrrrr�<module>s�_D ��9/k1


F1le Man4ger