Uname:Linux ip-10-0-5-176 6.8.0-1057-aws #60~22.04.1-Ubuntu SMP Wed May 27 08:16:59 UTC 2026 x86_64

403WebShell
403Webshell
Server IP : 3.111.61.48  /  Your IP : 216.73.216.67
Web Server : Apache
System : Linux ip-10-0-5-176 6.8.0-1057-aws #60~22.04.1-Ubuntu SMP Wed May 27 08:16:59 UTC 2026 x86_64
User : ubuntu ( 1000)
PHP Version : 8.2.31
Disable Function : exec,passthru,shell_exec,system
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /usr/lib/python3.10/test/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /usr/lib/python3.10/test/__pycache__/test_smtplib.cpython-310.pyc
o

�9j2��@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
�(/usr/lib/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�)�listen�set�accept�TimeoutError�select�send�close)
�evt�buf�serv�conn�addr�n�r�w�e�sentr
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'�	quotedata)r�teststr�expectedr
r
r�
testQuoteDataKszGeneralTests.testQuoteDatacCs$t�d�|�t|j�}|��dS)N�220 Hola mundo�r�
reply_with�client�HOSTr)r�rr4r
r
r�
testBasic1Ps
zGeneralTests.testBasic1cC�6t�d�|jt|jdd�}|�|jd�|��dS)Nr1)z	127.0.0.1i�M)�source_address)rr3r4r5r)r,r9rr6r
r
r�testSourceAddressVs

�zGeneralTests.testSourceAddresscCs*t�d�|�dt|jf�}|��dS)Nr1z%s:%sr2r6r
r
r�
testBasic2^s
zGeneralTests.testBasic2cCr8)Nr1�testhost)�local_hostname)rr3r4r5r)r,r=rr6r
r
r�testLocalHostNameds
zGeneralTests.testLocalHostNamec	Cszt�d�|�t���t�d�|�t��d�z|�t|j�}Wt�d�nt�d�w|�|j	�
�d�|��dS)Nr1�)rr3�assertIsNone�getdefaulttimeout�setdefaulttimeoutr,r4r5r)�sock�
gettimeoutrr6r
r
r�testTimeoutDefaultks

zGeneralTests.testTimeoutDefaultc	Cslt�d�|�t���t�d�z|jt|jdd�}Wt�d�nt�d�w|�|j	�
��|��dS�Nr1r?��timeout)rr3r@r(rArBr4r5r)rCrDrr6r
r
r�testTimeoutNonews

zGeneralTests.testTimeoutNonecCsLt�d�|�t��|jt|jdd�Wd�dS1swYdS)Nr1rrG)rr3�assertRaises�
ValueErrorr4r5r)rr
r
r�testTimeoutZero�s
"�zGeneralTests.testTimeoutZerocCs:t�d�|jt|jdd�}|�|j��d�|��dSrF)	rr3r4r5r)r,rCrDrr6r
r
r�testTimeoutValue�s
zGeneralTests.testTimeoutValuecC�|t�d�|��}|�d�t���}|�t|j�Wd�n1s$wY|�	�t
�dt
j�}|�
|��|�dS)N�220 Hello worldrz	^connect:�rr3r4�set_debuglevelr�captured_stderr�connectr5r)r�re�compile�	MULTILINE�assertRegex�getvalue�rr4�stderrr/r
r
r�test_debuglevel�s


�zGeneralTests.test_debuglevelcCrN)NrO�z#^\d{2}:\d{2}:\d{2}\.\d{6} connect: rPrYr
r
r�test_debuglevel_2�s


��zGeneralTests.test_debuglevel_2N)�__name__�
__module__�__qualname__r*r+r0r7r:r;r>rErIrLrMr[r]r
r
r
rr%@s
r%c@seZdZejZdS)�SMTPGeneralTestsN)r^r_r`r'�SMTPr4r
r
r
rra�s
racs<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�nt�d�w|�|j���|��dS)N�!/some/local/lmtp/delivery/programrO)	rr3r4r)rBr@rCrDr)r�
local_hostr4r
r
r�"testUnixDomainSocketTimeoutDefault�s
z3LMTPGeneralTests.testUnixDomainSocketTimeoutDefaultcsLt���d}|�t��|j|dd�Wd�dS1swYdS)NrerrG)�superrLrJrKr4)rrf��	__class__r
rrL�s

"�z LMTPGeneralTests.testTimeoutZero)
r^r_r`r'�LMTPr4�unittest�
skipUnless�hasattrr(rgrL�
__classcell__r
r
rirrc�s


rcc	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�?)
rrnr�asyncore�poll2rp�
socket_map�is_setrr�time�sleep�	close_all)r�serv_evt�
client_evt�poll_funrr
r
r�debugging_server�s8
����
�

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
��|_|jt_t
��|_t
��|_tj|_t
��t_tjtdfddd�|_|jj��dd�\|_|_|j|j|jf}t
jt|d�|_|j��|j��|j��dS)Nr��nowhere���T��decode_datar\��target�args) r�threading_setup�
thread_keyr(�getfqdn�real_getfqdnr�sys�stdout�
old_stdout�io�StringIO�output�	threading�Eventryrz�smtpd�DEBUGSTREAM�old_DEBUGSTREAM�DebuggingServerr5r�getsockname�hostr)�Threadr|�thread�start�wait�clear�r�	serv_argsr
r
rr*�s&




�

zDebuggingServerTests.setUpcCs^|jt_|j��|j��t�|j	�|j
t_t
j��|jt
_|`	|��tj|j�dSr)r�r(r�rzrryr�r�join_threadr�r�r�r�r�r�rr��
doCleanups�threading_cleanupr�rr
r
rr+s


zDebuggingServerTests.tearDowncCs$|j��}tjdd|tjtjBd�S)Nz(.*?)^X-Peer:\s*\S+\n(.*)z\1\2)�flags)r�rXrT�subrV�DOTALL)r�test_outputr
r
r�get_output_without_xpeers
�z-DebuggingServerTests.get_output_without_xpeercC�"tjt|jdtjd�}|��dS�N�	localhost�r=rH�r'rbr5r)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�)r=rHr9zcouldn't bind to source port %d)r�find_unused_portr'rbr�r)rr��
addCleanuprr,r9r=r��OSError�errno�
EADDRINUSE�skipTest)r�src_portr�r"r
r
rr: s ���z&DebuggingServerTests.testSourceAddresscC�Btjt|jdtjd�}|�|j�d}|�|�	�|�|�
�dS�Nr�r���sOK)r'rbr5r)rr�r�rr,�noopr��rr�r/r
r
r�testNOOP0��zDebuggingServerTests.testNOOPcCr�r�)r'rbr5r)rr�r�rr,�rsetr�r�r
r
r�testRSET8r�zDebuggingServerTests.testRSETcCr�)Nr�r�)r�s
SIZE 33554432
HELP)r'rbr5r)rr�r�rr,�ehlor�r�r
r
r�testELHO@s�zDebuggingServerTests.testELHOcCsLtjt|jdtjd�}|�|j�d}|�d�|�	|�
�|�|��dS)Nr�r�)i�sEXPN not implemented�EXPN)r'rbr5r)rr�r�r�putcmdr,�getreplyr�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'rbr5r)rr�r�rrJrKr��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'rbr5r)rr�r�rr,�vrfy�verifyr�r�r
r
r�testVRFY]s�zDebuggingServerTests.testVRFYcCsJtjt|jdtjd�}|�|j�|��d}|�	|��|�|�
�dS)Nr�r�)i�sDuplicate HELO/EHLO)r'rbr5r)rr�r�r�helor,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'rbr5r)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�Sallyrq�%s%s
%s�r'rbr5r)rr�r�r�sendmailrvrwr�rzrryr�r��flush�	MSG_BEGIN�MSG_ENDr,rX�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�rqr��ascii)r'rbr5r)rr�r�rr�rvrwr�rzrryr�r�r�r��decoder�r,rXr�r
r
r�testSendBinary�s�



z#DebuggingServerTests.testSendBinarycCr�)Nz.A test
.mes.sage.r�r�r�r�rqr�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-INJECTEDrqz
X-INJECTED)r'rbr5r)rr�r�rrJrKr�r�r�r�rvrwr�r�r�rX�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-2rqzX-OPTIONz	X-OPTION2zX-INJECTED-1zX-INJECTED-2)r'rbr5r)rr�r�rr�rJrK�mailr�r�r�rvrwr�r�r�rXr�)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�rqr�z^sender: <>$)r'rbr5r)rr�r�rr�rvrwr�rzrryr�r�r�r�r�r,rXr�r�rTrUrVrW)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���	from_addr�to_addrsrq�X-Peerr�)�email�mime�text�MIMETextr'rbr5r)rr�r�r�send_messagervrwr�rzrryr�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�rqr�r��^sender: foo@bar.com$)r�r��Fredzroot@localhostzwarped@silly.walks.com�^recips: .*'{}'.*$)#r�r�r�r�r'rbr5r)rr�r�rr�rvrwr�r,rzrryr�r�r�r�r�r�r�r�r�rXrTrUrVrW�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�rr�John, Dinsdalerr�r�rqr�r�r�r��Dinsdaler	�#r�r�r�r�r'rbr5r)rr�r�rr�rvrwr�rzrryr�r�r�r�r�r�r�r,r�r�rXrTrUrVrWr
rr
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�rrrrr�r�zjoe@example.comzfoo@example.netr�rqr�r�z^sender: joe@example.com$rr	z^recips: .*'foo@example.net'.*$)$r�r�r�r�r'rbr5r)rr�r�rr�rvrwr�rzrryr�r�r�r�r�r�r�r,r�r�rXrTrUrVrWr
�assertNotRegex)
rr�r�r�r�r�r�rr�recipr
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, Biancarz#the_rescuers@Rescue-Aid-Society.com�Senderrrr�r�rqr�r�z-^sender: the_rescuers@Rescue-Aid-Society.com$rr	rrr
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�rrr�rrrrr�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�rqr�r�z^sender: holy@grail.net$)zmy_mom@great.cooker.com�Jeffrr	rrr
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�rrr�rrrrrrrrrrrrrzThu, 2 Jan 1970 17:42:00 +0000r�r�)r�r�r�r�r'rbr5r)rr�r�rrJrKr��rr�r�r
r
r�#testSendMessageMultipleResentRaises�s(��z8DebuggingServerTests.testSendMessageMultipleResentRaises)r^r_r`�maxDiffr*r+r�r�r:r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r
rrrr!r#r
r
r
rr}�s8	


$%r}c@�$eZdZdd�Zdd�Zdd�ZdS)�NonConnectingTestscCs.t��}|�tj|j�|�tj|jd�dS)Nztest msg)r'rbrJ�SMTPServerDisconnectedr�rr�r
r
r�testNotConnected�s
�z#NonConnectingTests.testNotConnectedcCs&|�ttjdd�|�ttjd�dS)Nr��boguszlocalhost:bogus)rJr�r'rbrr
r
r�testNonnumericPort�s
�
�z%NonConnectingTests.testNonnumericPortcCs:t���}|�|j�Wd�dS1swYdSr)r'rbr@rCr�r
r
r�testSockAttributeExists�s
"�z*NonConnectingTests.testSockAttributeExistsN)r^r_r`r(r*r+r
r
r
rr&�s
r&c@r%)�DefaultArgumentsTestscCsDt�|_d|jd<t��|_tdd�|j_t�t�|j_|j_dS)N�Páolo <főo@bar.com>r)���OK)�return_value)	rr�r'rbr�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��call_args_list)r�expected_mail_optionsr
r
rr��s��z%DefaultArgumentsTests.testSendMessagecCsNdg}d}|j�|jdd|�|�|dg�|�|jjjddd|�dS)N�STARTTLS)r8r2r3rr4r5)r�mail_optionsr7r
r
r�testSendMessageWithMailOptions�s�z4DefaultArgumentsTests.testSendMessageWithMailOptionsN)r^r_r`r*r�r:r
r
r
rr,�s	r,c@r%)�BadHELOServerTestscCs4tt_t�d�tj|_t��|_	|j	t_d|_
dS)Ns199 no hello for you!r&)rr'r(r3r�r�r�r�r�r�r)rr
r
rr*�s


zBadHELOServerTests.setUpcCstt_|jt_dSr)r(r'r�r�r�rr
r
rr+�szBadHELOServerTests.tearDowncC�|�tjtjt|jdd�dS�Nr�r4)rJr'�SMTPConnectErrorrbr5r)rr
r
r�testFailingHELO�
�z"BadHELOServerTests.testFailingHELON)r^r_r`r*r+r?r
r
r
rr;�sr;c@s:eZdZddejddZdd�Zdd�Zd	d
�ZdS)�TooLongLineTestss250 OK�.r\�
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�r�)rr�r�r�r�r�r�r�r�r�r�rr(�AF_INET�SOCK_STREAMrC�
settimeoutr�	bind_portr)�respdatar�r$r�r�r�r�)r�servargsr
r
rr*s




zTooLongLineTests.setUpcCs:|j��|jt_t�|j�|`|��tj	|j
�dSr)rr�r�r�r�rr�r�r�r�r�rr
r
rr+s
zTooLongLineTests.tearDowncCr<r=)rJr'�SMTPResponseExceptionrbr5r)rr
r
r�testLineTooLong r@z TooLongLineTests.testLineTooLongN)	r^r_r`r'�_MAXLINErIr*r+rLr
r
r
rrAs
rAzJohn AzSally BzRuth C)�Mr.A@somewhere.com�Ms.B@xn--fo-fka.com�Mrs.C@somewhereesle.com)rN�somepasswordz<PENCeUxFREJoU0NnbmhNWitOMjNGNndAZWx3b29kLmlubm9zb2Z0LmNvbT4=rNrPrO)zlist-1zlist-2c@seZdZdS)�ResponseExceptionN)r^r_r`r
r
r
rrR2srRcs�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�_extrafeaturesrhrS�__init__)r�extra_featuresr��kwrir
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�AUTH�_emptystringrY�received_lines�print�reprr�r��auth_objectrR�COMMAND�push�	smtp_code�
smtp_errorrh�found_terminator)r�liner"rir
rrkEs� ��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 firstraz(500 Error: command "AUTH" not recognizedz3503 Bad sequence of commands: already authenticated)rr\z/501 Syntax: AUTH <mechanism> [initial-response]z_auth_%sr�-�_zQ504 Command parameter not implemented: unsupported  authentication mechanism {!r}r\r)�
seen_greetingrh�
extended_smtprZ�authenticated_user�split�len�lower�replace�getattrrf�AttributeErrorr
rar`)r�argr��auth_object_namer
r
r�	smtp_AUTHSs4


�
��(zSimSMTPChannel.smtp_AUTHcCs,|r||_|�d�n|�d�|j|_dS)Nz235 Authentication Succeededz&535 Authentication credentials invalid)rqrhrgr`)r�user�validr
r
r�_authenticatedls

zSimSMTPChannel._authenticatedcCst�|�d���d�S)Nr��utf-8)�base64�decodebytes�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)rhr�rrrKr
r}�sim_auth)rrx�logpassrnr{�passwordr"r
r
r�_auth_plainws
���zSimSMTPChannel._auth_plaincCsb|dur|�d�dSt|d�s|�|�|_|�d�dS|�|�}|�|j|tdk�|`dS)Nz334 VXNlcm5hbWU6�_auth_login_userz334 UGFzc3dvcmQ6r)rhrnr�r�r}r�)rrxr�r
r
r�_auth_login�s

zSimSMTPChannel._auth_logincCs|�d�dS)Nz334 QnVHZ1liVWdHeQ==)rh�rrxr
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 {}r�Frr��md5)rhr
�sim_cram_md5_challenger�rrrK�hmac�HMACr�r��	hexdigestr})rrxr�r{�hashed_passr"�valid_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)rZrhrorp)rrx�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_usersrhr'�	quoteaddrr�r
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!)rt�	sim_lists�	enumerater'r�rsrhr�)rrx�	list_name�	user_listr�
user_email�quoted_addrr
r
r�	smtp_EXPN�s
�zSimSMTPChannel.smtp_EXPNcs6|jdurtt|��|�dS|�|j�|��dSr)�
quit_responserhrS�	smtp_QUITrh�close_when_doner�rir
rr��s
zSimSMTPChannel.smtp_QUITcs<|jdur
t��|�dS|�|j�|jr|��dSdSr)�
mail_responserh�	smtp_MAILrh�
disconnectr�r�rir
rr��s
�zSimSMTPChannel.smtp_MAILcsB|jdur
t��|�dS|jd7_|�|j|jd�dS�Nr)�
rcpt_responserh�	smtp_RCPT�
rcpt_countrhr�rir
rr��s

zSimSMTPChannel.smtp_RCPTcs|jd7_t��|�dSr�)�
rset_countrh�	smtp_RSETr�rir
rr��szSimSMTPChannel.smtp_RSETcs*|jdur
t��|�dS|�|j�dSr)�
data_responserh�	smtp_DATArhr�rir
rr��s
zSimSMTPChannel.smtp_DATAcC��rr
rr
r
r�handle_error��zSimSMTPChannel.handle_errorr)r^r_r`r�r�r�r�r�r�r�rarqr[rkrzr}r�r�r�r�r�r�r�r�r�r�r�r�r�r�ror
r
rirrS3s8




rSc@s8eZdZeZdd�Zdd�Zdd�Zdd�Zd	d
�Z	dS)�
SimSMTPServercOs*g|_i|_tjj|g|�Ri|��dSr)�_extra_features�
_addressesr��
SMTPServerr[�rr�r]r
r
rr[�szSimSMTPServer.__init__cCs|j|j||||jd�|_dS)Nr�)�
channel_classr��_decode_data�_SMTPchannel�rrrr
r
r�handle_accepted�s
�zSimSMTPServer.handle_acceptedcCs||jd<||jd<dS)N�from�tos)r�)r�peer�mailfrom�rcpttos�datar
r
r�process_message�s
zSimSMTPServer.process_messagecCs|j�|�dSr)r��append)r�featurer
r
r�add_feature�szSimSMTPServer.add_featurecCr�rr
rr
r
rr�r�zSimSMTPServer.handle_errorN)
r^r_r`rSr�r[r�r�r�r�r
r
r
rr��sr�c@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�Nrr~Tr�rr�)rr�r�r(r�r�rr�r�ryrzr�r5rr�r)r�r|r�r�r�r�r�r
r
rr*s




zSMTPSimTests.setUpcC�D|jt_|j��|j��t�|j	�|`	|�
�tj|j�dSr�
r�r(r�rzrryr�rr�r�r�r�r�rr
r
rr+�

zSMTPSimTests.tearDowncCr�r�r�r�r
r
rr�%r�zSMTPSimTests.testBasiccCs�tjt|jdtjd�}|�|ji�dddddd�}|��|�|j|�|D]
}|�	|�
|��q'|�|�
d��|��dS)Nr�r�rU�20000000)�expn�size�starttls�	deliverbyr�zunsupported-feature)
r'rbr5r)rr�r,�esmtp_featuresr��
assertTruer1�assertFalser�)rr��expected_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'rbr5r)rr�r��items�bytesr�r,r�r�r�)rr��	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'rbr5r)rr�r�r�r�r�r�r�rYr,r�r�)	rr��listname�members�usersr�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'rbr5r)rr��loginr�r,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��initial_response_okr��rr�r'rbr5r)rr�r�r{r�r��auth�
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
BuGgYbUgGyr�)r,)�	challengerr
r�
auth_buggy�sz/SMTPSimTests.testAUTH_BUGGY.<locals>.auth_buggyr�r��test_auth_buggyz&^Server AUTH mechanism infinite loop.*�BUGGYFr�r)rr�r'rbr5r)rr�r�r{r�r��assertRaisesRegex�
SMTPExceptionr�r)rr�r��expect�cmr
rr�testAUTH_BUGGY�s �
��zSMTPSimTests.testAUTH_BUGGYr�T)�opensslcCr�)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)N�PLAINr�zCRAM-MD5zAUTH {})�	mechanismr�r��foorr�auth_rmrnr�)�hashlibr�rK�addrr�r
�subTestr'rbr5r)rr�r�r�r{r�rtrur�rvr,r)r�	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'rbr5r)rr�r�r,r�r�r�r�rS�ehlo_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'rbr5r)r�r,rJr'rrrr
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)rJr'rKrbr5r)r�rr�r�r,r�rirj)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'rbr5r)rr�r�rr�r�r�rJ�SMTPSenderRefusedr�r@rCr�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�rr)r'rbr5r)rr�r�rr�r�rJrr�r@rCr,r�r�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��Frank�Georgerrr )rsclosing)r'rbr5r)rr�r�rr�r�rJ�SMTPRecipientsRefusedr�r@rCr,r��assertDictEqualr�r�)rr�r r
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`�DATArhrhrkrrir
rrkszNSMTPSimTests.test_421_from_data_cmd.<locals>.MySimSMTPChannel.found_terminator)r^r_r`rkror
r
rir�MySimSMTPChannelsr&r�r�zJohn@foo.orgz
Sally@foo.orgrr)rSrr�r'rbr5r)rr�r�rJ�
SMTPDataErrorr�r@rCr,r�r�)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�rUr3r2�r9��options)r'rbr5r)rr�r�rr�r��
does_esmtpr�r1rJ�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��AliceuBöbrUuÄlice)r'rbr5r)rr�r�rrJ�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)	Nr-rrr�Nudge nudge, wink, wink ὠ9�Subjectr�r�)rr'rbr5r)rr�r�rrJr.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.comrr�r6r�r7)r'rbr5r)rr�r�rrr��utils�
formataddrr#r�r,rr�)rr�rr
r
r�1test_name_field_not_included_in_envelop_addresses9s�z>SMTPSimTests.test_name_field_not_included_in_envelop_addressesN)r^r_r`r*r+r�r�r�r�r�r�r�r�rr�requires_hashdigestrrrrrrrrr$r(r/r2r5r:r
r
r
rr�s8		

		
r�c@s*eZdZdd�Zdd�Z		ddd�ZdS)	�SimSMTPUTF8ServercOs(ddg|_tjj|g|�Ri|��dS)Nr2�8BITMIME)r�r�r�r[r�r
r
rr[Ks
zSimSMTPUTF8Server.__init__cCs"|j|j||||j|jd�|_dS)N�r��enable_SMTPUTF8)r�r�r�r?r�r�r
r
rr�Rs

�z!SimSMTPUTF8Server.handle_acceptedNcCs(||_||_||_||_||_||_dSr)�	last_peer�
last_mailfrom�last_rcpttos�last_message�last_mail_options�last_rcpt_options)rr�r�r�r�r9�rcpt_optionsr
r
rr�Ys
z!SimSMTPUTF8Server.process_message)NN)r^r_r`r[r�r�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)Nrr~FTr>rr�)rr�r�r(r�r�rr�r�ryrzr<r5rr�r)r�r|r�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'rbr5r)rr�r�rr�r�r-r1r�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!r~r�r�uJőhnuSállyr3r2r*)r�r'rbr5r)rr�r�rr�r,rrArBrCr�rDrEr"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)NrIr~r�r�uJőr3r2r+r�uJános)r�r'rbr5r)rr�r�rr�r,r��rcptr�rrArBrCr�rDrEr"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)Nr-rrrr3r4u1oh 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.comr3r2)r�set_content�textwrap�dedentr'rbr5r)rr�r�rr,r�rrArBrCr�r�rDrE)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)
r^r_r`r$r*r+rHrJrLrPr
r
r
rrGcs	rGspsudoesnotexistrU)�eolc@seZdZdd�ZdS)�!SimSMTPAUTHInitialResponseChannelcCsL|��}|d��dkrt|�dkr|dtkr|�d�dS|�d�dS)Nr�plainr\rz235 Okz571 Bad authentication)rrrtrs�EXPECTED_RESPONSErh)rrxr�r
r
rrz�s
z+SimSMTPAUTHInitialResponseChannel.smtp_AUTHN)r^r_r`rzr
r
r
rrR�srRc@seZdZeZdS)� SimSMTPAUTHInitialResponseServerN)r^r_r`rRr�r
r
r
rrU�srUc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�SMTPAUTHInitialResponseSimTestscCr�r�)rr�r�r(r�r�rr�r�ryrzrUr5rr�r)r�r|r�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'rbr5r)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�rWrXrSr�)rr�r'rbr5r)rr�r{r�r��
auth_plainrr,)rr�r�responser
r
r�$testAUTH_PLAIN_initial_response_auth
s�zDSMTPAUTHInitialResponseSimTests.testAUTH_PLAIN_initial_response_authN)r^r_r`r*r+rYr\r
r
r
rrV�s
rV�__main__)Hr�email.mime.textr��
email.messager�email.base64mimer�
encode_base64�email.utilsrr�r(r'r�rTr�rvrr�rNr�rl�testrr�test.supportrrr�
unittest.mockr	�warnings�catch_warnings�simplefilter�DeprecationWarningrrr�r5�platformr�SMTPChannelr$r%�TestCaserarcr|r�r�r}r&r,r;rAr�r�r�r��	ExceptionrRrSr�r�r�r<rGrTrRrUrVr^�mainr
r
r
r�<module>s�

�
cX ��9Eo
1�

Youez - 2016 - github.com/yon3zu
LinuXploit