HEX
Server: Apache
System: Linux zacp120.webway.host 4.18.0-553.50.1.lve.el8.x86_64 #1 SMP Thu Apr 17 19:10:24 UTC 2025 x86_64
User: govancoz (1003)
PHP: 8.3.26
Disabled: exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: //proc/thread-self/root/usr/local/lib/python3.7/test/__pycache__/test_smtplib.cpython-37.opt-2.pyc
B

��g���@sNddlZddlZddlZddlmZddlmZddl	Zddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlmZmZddlmZmZmZddlmZej dkr�dd	�Z!e!ej"_!d
d�Z#Gdd
�d
ej$�Z%dd�Z&dZ'dZ(Gdd�dej$�Z)Gdd�dej$�Z*Gdd�dej$�Z+Gdd�dej$�Z,Gdd�dej$�Z-dddd�Z.d Z/d!Z0d"d#gd$gd%�Z1Gd&d'�d'e2�Z3Gd(d)�d)ej"�Z4Gd*d+�d+ej5�Z6Gd,d-�d-ej$�Z7Gd.d/�d/e6�Z8Gd0d1�d1ej$�Z9ed2d3d4�Z:Gd5d6�d6e4�Z;Gd7d8�d8e6�Z<Gd9d:�d:ej$�Z=e>d;k�rJe�?�dS)<�N)�EmailMessage)�body_encode)�support�mock_socket)�HOST�HOSTv4�HOSTv6)�Mock�darwincCsdS)N�)�selfrr�-/usr/local/lib/python3.7/test/test_smtplib.py�handle_exptsrc
Cs�|��|��z�y|��\}}Wntjk
r8YnXXd}xH|r�|dkr�t�g|gg�\}}}|r||�|�}	||	d�}|d8}q@W|��Wd|��|��XdS)Ni�r�)Zlisten�setZaccept�socket�timeout�select�send�close)
�evt�buf�serv�conn�addr�n�r�w�eZsentrrr
�server"s 
rc@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�port)rrrr
�setUp:szGeneralTests.setUpcCs
tt_dS)N)rr")rrrr
�tearDown>szGeneralTests.tearDowncCsd}d}|�|t�|��dS)Nzabc
.jkl
foo
..bluezabc
..jkl
foo
...blue)�assertEqualr"Z	quotedata)rZteststr�expectedrrr
�
testQuoteDataCszGeneralTests.testQuoteDatacCs$t�d�t�t|j�}|��dS)Ns220 Hola mundo)r�
reply_withr"�SMTPrr#r)r�smtprrr
�
testBasic1Hs
zGeneralTests.testBasic1cCs6t�d�tjt|jdd�}|�|jd�|��dS)Ns220 Hola mundo)z	127.0.0.1i�M)�source_address)	rr)r"r*rr#r&r-r)rr+rrr
�testSourceAddressNs


zGeneralTests.testSourceAddresscCs*t�d�t�dt|jf�}|��dS)Ns220 Hola mundoz%s:%s)rr)r"r*rr#r)rr+rrr
�
testBasic2Vs
zGeneralTests.testBasic2cCs6t�d�tjt|jdd�}|�|jd�|��dS)Ns220 Hola mundoZtesthost)�local_hostname)	rr)r"r*rr#r&r0r)rr+rrr
�testLocalHostName\s
zGeneralTests.testLocalHostNamec	Cspt�d�|�t���t�d�|�t��d�zt�t|j	�}Wdt�d�X|�|j
��d�|��dS)Ns220 Hola mundo�)
rr)�assertIsNone�getdefaulttimeout�setdefaulttimeoutr&r"r*rr#�sock�
gettimeoutr)rr+rrr
�testTimeoutDefaultcs

zGeneralTests.testTimeoutDefaultc	Csbt�d�|�t���t�d�ztjt|j	dd�}Wdt�d�X|�|j
���|��dS)Ns220 Hola mundor2)r)
rr)r3rr4r5r"r*rr#r6r7r)rr+rrr
�testTimeoutNoneos

zGeneralTests.testTimeoutNonecCs:t�d�tjt|jdd�}|�|j��d�|�	�dS)Ns220 Hola mundor2)r)
rr)r"r*rr#r&r6r7r)rr+rrr
�testTimeoutValuezs
zGeneralTests.testTimeoutValuec	Csht�d�t��}|�d�t���}|�t|j	�WdQRX|�
�t�dtj
�}|�|��|�dS)Ns220 Hello worldrz	^connect:)rr)r"r*�set_debuglevelr�captured_stderr�connectrr#r�re�compile�	MULTILINE�assertRegex�getvalue)rr+�stderrr'rrr
�test_debuglevel�s


zGeneralTests.test_debuglevelc	Csht�d�t��}|�d�t���}|�t|j	�WdQRX|�
�t�dtj
�}|�|��|�dS)Ns220 Hello world�z#^\d{2}:\d{2}:\d{2}\.\d{6} connect: )rr)r"r*r;rr<r=rr#rr>r?r@rArB)rr+rCr'rrr
�test_debuglevel_2�s


zGeneralTests.test_debuglevel_2N)�__name__�
__module__�__qualname__r$r%r(r,r.r/r1r8r9r:rDrFrrrr
r 8s
r c	Cs�|��zvyZttd�rtj}ntj}d}x8tjr`|dkr`|dtj�|��rV|��P|d8}q*WWnt	j
k
rzYnXWd|��s�t�d�|��t�
�|��XdS)N�polli�rg{�G�z�?rg�?)r�hasattrr�asyncoreZpoll2rJZ
socket_mapZis_setrrr�time�sleepZ	close_all)r�serv_evt�
client_evtZpoll_funrrrr
�debugging_server�s&


rQz&---------- 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�tj|_tjt_tj|_t��|_	|j	t_t
��|_t
��|_
tj|_t��t_tjtdfddd�|_|jj��dd�\|_|_|j|j|j
f}t
jt|d�|_|j��|j��|j��dS)Nr)�nowhere���T)�decode_datarE)�target�args)r�getfqdn�real_getfqdnr�sys�stdout�
old_stdout�io�StringIO�output�	threading�EventrOrP�smtpd�DEBUGSTREAM�old_DEBUGSTREAMZDebuggingServerrr�getsockname�hostr#�ThreadrQ�thread�start�wait�clear)r�	serv_argsrrr
r$�s"






zDebuggingServerTests.setUpcCsD|jt_|j��|j��|j��|j	t
_tj
��|jt_
dS)N)rYrrXrPrrOrjrh�joinr\rZr[rbrcrrd)rrrr
r%�s



zDebuggingServerTests.tearDowncCs$|j��}tjdd|tjtjBd�S)Nz(.*?)^X-Peer:\s*\S+\n(.*)z\1\2)�flags)r_rBr>�subr@�DOTALL)r�test_outputrrr
�get_output_without_xpeer�s
z-DebuggingServerTests.get_output_without_xpeercCs tjt|jddd�}|��dS)N�	localhost�)r0r)r"r*rr#�quit)rr+rrr
�	testBasic�szDebuggingServerTests.testBasicc
Cs�t��}yLtj|j|jdd|j|fd�}|�|j|j|f�|�|jd�|�	�Wn>t
k
r�}z |jtjkr�|�
d|��Wdd}~XYnXdS)Nrsrt)r0rr-zcouldn't bind to source port %d)rZfind_unused_portr"r*rfr#r&r-r0ru�OSError�errnoZ
EADDRINUSEZskipTest)rZsrc_portr+rrrr
r.�sz&DebuggingServerTests.testSourceAddresscCs4tjt|jddd�}d}|�|��|�|��dS)Nrsrt)r0r)�sOK)r"r*rr#r&�noopru)rr+r'rrr
�testNOOPszDebuggingServerTests.testNOOPcCs4tjt|jddd�}d}|�|��|�|��dS)Nrsrt)r0r)rysOK)r"r*rr#r&Zrsetru)rr+r'rrr
�testRSETszDebuggingServerTests.testRSETcCs4tjt|jddd�}d}|�|��|�|��dS)Nrsrt)r0r)rys
SIZE 33554432
HELP)r"r*rr#r&�ehloru)rr+r'rrr
�testELHOszDebuggingServerTests.testELHOcCs>tjt|jddd�}d}|�d�|�|��|�|��dS)Nrsrt)r0r)i�sEXPN not implementedZEXPN)r"r*rr#�putcmdr&Zgetreplyru)rr+r'rrr
�testEXPNNotImplementeds

z+DebuggingServerTests.testEXPNNotImplementedc	Cs^tjt|jddd�}|�|j�|�t��}|�d�WdQRX|�	dt
|j��|��dS)Nrs�
)r0rzhelo
X-INJECTEDzprohibited newline characters)
r"r*rr#�
addCleanupr�assertRaises�
ValueErrorr�assertIn�str�	exceptionru)rr+�excrrr
�&test_issue43124_putcmd_escapes_newlinesz;DebuggingServerTests.test_issue43124_putcmd_escapes_newlinecCsHtjt|jddd�}d}|�|�d�|�|�|�d�|�|��dS)Nrsrt)r0r)�s>Cannot VRFY user, but will accept message and attempt deliveryznobody@nowhere.com)r"r*rr#r&�vrfyZverifyru)rr+r'rrr
�testVRFY's
zDebuggingServerTests.testVRFYcCs<tjt|jddd�}|��d}|�|��|�|��dS)Nrsrt)r0r)i�sDuplicate HELO/EHLO)r"r*rr#Zhelor&ru)rr+r'rrr
�testSecondHELO/s
z#DebuggingServerTests.testSecondHELOcCs0tjt|jddd�}|�|��d�|��dS)Nrsrt)r0rs@Supported commands: EHLO HELO MAIL RCPT DATA RSET NOOP QUIT VRFY)r"r*rr#r&�helpru)rr+rrr
�testHELP8szDebuggingServerTests.testHELPcCszd}tjt|jddd�}|�dd|�t�d�|��|j�	�|j
��|j�
�dt|tf}|�|j��|�dS)	NzA test messagersrt)r0r�John�Sallyg{�G�z�?z%s%s
%s)r"r*rr#�sendmailrMrNrurPrrOrjr_�flush�	MSG_BEGIN�MSG_ENDr&rB)r�mr+�mexpectrrr
�testSend>s



zDebuggingServerTests.testSendcCs�d}tjt|jddd�}|�dd|�t�d�|��|j�	�|j
��|j�
�dt|�d	�tf}|�|j��|�dS)
NsA test messagersrt)r0rr�r�g{�G�z�?z%s%s
%s�ascii)r"r*rr#r�rMrNrurPrrOrjr_r�r��decoder�r&rB)rr�r+r�rrr
�testSendBinaryOs



z#DebuggingServerTests.testSendBinarycCszd}tjt|jddd�}|�dd|�t�d�|��|j�	�|j
��|j�
�dt|tf}|�|j��|�dS)	Nz.A test
.mes.sage.rsrt)r0rr�r�g{�G�z�?z%s%s
%s)r"r*rr#r�rMrNrurPrrOrjr_r�r�r�r&rB)rr�r+r�rrr
�testSendNeedingDotQuote]s



z,DebuggingServerTests.testSendNeedingDotQuotec	Cs�d}tjt|jddd�}|�|j�|�t��}|�dd|�WdQRX|�	dt
|j��t�
d�|��tj��}|�d	|�dS)
Nzwazzuuup
linetwoz
hi
X-INJECTEDr�)r0rz	hi@me.comz
you@me.comz2prohibited newline characters: ehlo hi\nX-INJECTEDg{�G�z�?z
X-INJECTED)r"r*rr#r�rr�r�r�r�r�r�rMrNrurbrcrB�assertNotIn)rr�r+r��debugoutrrr
�$test_issue43124_escape_localhostnamels

z9DebuggingServerTests.test_issue43124_escape_localhostnamec	Cs�d}tjt|jddd�}|�|j�|�dd|�|�t��}|�	dddg�WdQRXt
|j�}|�d	|�|�d
|�t
�d�|��tj��}|�d|�|�d
|�|�d|�|�d|�dS)Nzwazzuuup
linetworsr�)r0rz	hi@me.comz
you@me.comzX-OPTION
X-INJECTED-1zX-OPTION2
X-INJECTED-2zprohibited newline charactersz.X-OPTION\nX-INJECTED-1 X-OPTION2\nX-INJECTED-2g{�G�z�?zX-OPTIONz	X-OPTION2zX-INJECTED-1zX-INJECTED-2)r"r*rr#r�rr�r�r��mailr�r�r�rMrNrurbrcrBr�)rr�r+r��msgr�rrr
�test_issue43124_escape_options�s$


z3DebuggingServerTests.test_issue43124_escape_optionscCs�d}tjt|jddd�}|�dd|�t�d�|��|j�	�|j
��|j�
�dt|tf}|�|j��|�tj��}t�d	tj�}|�||�dS)
NzA test messagersrt)r0rz<>r�g{�G�z�?z%s%s
%sz^sender: <>$)r"r*rr#r�rMrNrurPrrOrjr_r�r�r�r&rBrbrcr>r?r@rA)rr�r+r�r��senderrrr
�testSendNullSender�s




z'DebuggingServerTests.testSendNullSendercCs�tjj�d�}tjt|jddd�}|j|ddd�t	�
d�|��|j�
�|j��|j��|��}|d	=d
t|��tf}|�||�dS)NzA test messagersrt)r0rr�r�)�	from_addr�to_addrsg{�G�z�?zX-Peerz%s%s
%s)�email�mime�text�MIMETextr"r*rr#�send_messagerMrNrurPrrOrjr_r�rrr��	as_stringr�r&)rr�r+rqr�rrr
�testSendMessage�s



z$DebuggingServerTests.testSendMessagec	Cstjj�d�}d|d<d|d<d|d<d|d	<tjt|jd
dd�}|�|�t	�
d
�|��|�|d	d�|j
��|j��|j��|��}|d=|d	=dt|��tf}|�||�tj��}t�dtj�}|�||�x,dD]$}t�d�|�tj�}|�||�q�WdS)NzA test messagezfoo@bar.com�Fromr��TozSally, Fred�CCz?John Root <root@localhost>, "Dinsdale" <warped@silly.walks.com>�Bccrsrt)r0rg{�G�z�?zX-Peerz%s%s
%sz^sender: foo@bar.com$)r�r�ZFredzroot@localhostzwarped@silly.walks.comz^recips: .*'{}'.*$)r�r�r�r�r"r*rr#r�rMrNrur&rPrrOrjr_r�rrr�r�r�rbrcrBr>r?r@rA�format)	rr�r+rqr�r�r�r�to_addrrrr
�testSendMessageWithAddresses�s2






z1DebuggingServerTests.testSendMessageWithAddressesc	Cs�tjj�d�}d|d<d|d<tjt|jddd�}|�|�t	�
d	�|��|j�
�|j��|j��|��}|d
=dt|��tf}|�||�tj��}t�dtj�}|�||�x,d
D]$}t�d�|�tj�}|�||�q�WdS)NzA test messagezfoo@bar.comr�zJohn, Dinsdaler�rsrt)r0rg{�G�z�?zX-Peerz%s%s
%sz^sender: foo@bar.com$)r��Dinsdalez^recips: .*'{}'.*$)r�r�r�r�r"r*rr#r�rMrNrurPrrOrjr_r�rrr�r�r�r&rbrcrBr>r?r@rAr�)	rr�r+rqr�r�r�rr�rrr
� testSendMessageWithSomeAddresses�s*






z5DebuggingServerTests.testSendMessageWithSomeAddressesc
Cstjj�d�}d|d<d|d<tjt|jddd�}|j|d	d
d�t	�
d�|��|j�
�|j��|j��|��}|d
=dt|��tf}|�||�tj��}t�dtj�}|�||�x,dD]$}t�d�|�tj�}|�||�q�Wt�dtj�}	|�||	�dS)NzA test messagezfoo@bar.comr�zJohn, Dinsdaler�rsrt)r0rzjoe@example.comzfoo@example.net)r�r�g{�G�z�?zX-Peerz%s%s
%sz^sender: joe@example.com$)r�r�z^recips: .*'{}'.*$z^recips: .*'foo@example.net'.*$) r�r�r�r�r"r*rr#r�rMrNrurPrrOrjr_r�rrr�r�r�r&rbrcrBr>r?r@rAr�ZassertNotRegex)
rr�r+rqr�r�r�rr�Zreciprrr
�%testSendMessageWithSpecifiedAddresses�s.





z:DebuggingServerTests.testSendMessageWithSpecifiedAddressesc	Cs�tjj�d�}d|d<d|d<d|d<tjt|jdd	d
�}|�|�t	�
d�|��|j�
�|j��|j��|��}|d=d
t|��tf}|�||�tj��}t�dtj�}|�||�x,dD]$}t�d�|�tj�}|�||�q�WdS)NzA test messagezBernard, Biancar�z#the_rescuers@Rescue-Aid-Society.comZSenderzJohn, Dinsdaler�rsrt)r0rg{�G�z�?zX-Peerz%s%s
%sz-^sender: the_rescuers@Rescue-Aid-Society.com$)r�r�z^recips: .*'{}'.*$)r�r�r�r�r"r*rr#r�rMrNrurPrrOrjr_r�rrr�r�r�r&rbrcrBr>r?r@rAr�)	rr�r+rqr�r�r�rr�rrr
�testSendMessageWithMultipleFroms,






z4DebuggingServerTests.testSendMessageWithMultipleFromc	Cs*tjj�d�}d|d<d|d<d|d<d|d	<d
|d<d|d
<d|d<d|d<tjt|jddd�}|�|�t	�
d�|��|j�
�|j��|j��|d	=|d=|��}|d=dt|��tf}|�||�tj��}t�dtj�}|�||�x,dD]$}t�d�|�tj�}|�||�q�WdS)NzA test messagezfoo@bar.comr�r�r�zSally, Fredr�z?John Root <root@localhost>, "Dinsdale" <warped@silly.walks.com>r�zThu, 1 Jan 1970 17:42:00 +0000zResent-Datezholy@grail.netzResent-Fromz&Martha <my_mom@great.cooker.com>, Jeffz	Resent-Tozdoe@losthope.netz
Resent-Bccrsrt)r0rg{�G�z�?zX-Peerz%s%s
%sz^sender: holy@grail.net$)zmy_mom@great.cooker.comZJeffzdoe@losthope.netz^recips: .*'{}'.*$)r�r�r�r�r"r*rr#r�rMrNrurPrrOrjr_r�rrr�r�r�r&rbrcrBr>r?r@rAr�)	rr�r+rqr�r�r�rr�rrr
�testSendMessageResent4s:






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�}|�t	��|�
|�WdQRX|��dS)NzA test messagezfoo@bar.comr�r�r�zSally, Fredr�z?John Root <root@localhost>, "Dinsdale" <warped@silly.walks.com>r�zThu, 1 Jan 1970 17:42:00 +0000zResent-Datezholy@grail.netzResent-Fromz&Martha <my_mom@great.cooker.com>, Jeffz	Resent-Tozdoe@losthope.netz
Resent-BcczThu, 2 Jan 1970 17:42:00 +0000rsrt)r0r)r�r�r�r�r"r*rr#r�r�r�r)rr�r+rrr
�#testSendMessageMultipleResentRaisesWs z8DebuggingServerTests.testSendMessageMultipleResentRaises)rGrHrI�maxDiffr$r%rrrvr.r{r|r~r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrr
rR�s6

	"#rRc@seZdZdd�Zdd�ZdS)�NonConnectingTestscCs.t��}|�tj|j�|�tj|jd�dS)Nztest msg)r"r*r��SMTPServerDisconnectedr}r)rr+rrr
�testNotConnectedksz#NonConnectingTests.testNotConnectedcCs&|�ttjdd�|�ttjd�dS)NrsZboguszlocalhost:bogus)r�rwr"r*)rrrr
�testNonnumericPortus

z%NonConnectingTests.testNonnumericPortN)rGrHrIr�r�rrrr
r�is
r�c@s$eZdZdd�Zdd�Zdd�ZdS)�DefaultArgumentsTestscCsDt�|_d|jd<t��|_tdd�|j_t�t�|j_|j_dS)NuPáolo <főo@bar.com>r�)��ZOK)Zreturn_value)	rr�r"r*r+r	r}�has_extnr�)rrrr
r$s


zDefaultArgumentsTests.setUpcCs`d}|j�|j�|j�|j�|�|jjjddd|�|�|jjjddd|�dS)N)�SMTPUTF8z
BODY=8BITMIMErrtr)r+r�r�r&r��call_args_list)r�expected_mail_optionsrrr
r��sz%DefaultArgumentsTests.testSendMessagecCsNdg}d}|j�|jdd|�|�|dg�|�|jjjddd|�dS)N�STARTTLS)r�r�z
BODY=8BITMIMErrt)r+r�r�r&r�r�)r�mail_optionsr�rrr
�testSendMessageWithMailOptions�sz4DefaultArgumentsTests.testSendMessageWithMailOptionsN)rGrHrIr$r�r�rrrr
r�}s	r�c@s$eZdZdd�Zdd�Zdd�ZdS)�BadHELOServerTestscCs4tt_t�d�tj|_t��|_	|j	t_d|_
dS)Ns199 no hello for you!r!)rr"rr)rZr[r\r]r^r_r#)rrrr
r$�s

zBadHELOServerTests.setUpcCstt_|jt_dS)N)rr"r\rZr[)rrrr
r%�szBadHELOServerTests.tearDowncCs|�tjtjt|jdd�dS)Nrsrt)r�r"ZSMTPConnectErrorr*rr#)rrrr
�testFailingHELO�sz"BadHELOServerTests.testFailingHELON)rGrHrIr$r%r�rrrr
r��sr�c@s:eZdZddejddZdd�Zdd�Zd	d
�ZdS)�TooLongLineTestss250 OK�.rE�
cCs�tj|_t��|_|jt_t��|_t	�	t	j
t	j�|_|j�
d�t�|j�|_|j|j|jf}tjt|d�}|��|�|j�|j��|j��dS)N�)rVrW)rZr[r\r]r^r_r`rarrZAF_INETZSOCK_STREAMr6Z
settimeoutrZ	bind_portr#�respdatargrrir�rmrjrk)rZservargsrhrrr
r$�s


zTooLongLineTests.setUpcCs|j��|jt_dS)N)rrjr\rZr[)rrrr
r%�s
zTooLongLineTests.tearDowncCs|�tjtjt|jdd�dS)Nrsrt)r�r"�SMTPResponseExceptionr*rr#)rrrr
�testLineTooLong�sz TooLongLineTests.testLineTooLongN)	rGrHrIr"Z_MAXLINEr�r$r%r�rrrr
r��sr�zJohn AzSally BzRuth C)zMr.A@somewhere.comzMs.B@xn--fo-fka.comzMrs.C@somewhereesle.com)zMr.A@somewhere.comZsomepasswordz<PENCeUxFREJoU0NnbmhNWitOMjNGNndAZWx3b29kLmlubm9zb2Z0LmNvbT4=zMr.A@somewhere.comzMrs.C@somewhereesle.comzMs.B@xn--fo-fka.com)zlist-1zlist-2c@seZdZdS)�ResponseExceptionN)rGrHrIrrrr
r��sr�cs�eZdZdZdZdZdZdZdZdZ	dZ
dZ�fdd�Z�fdd�Z
dd	�Zd
d�Zdd
�Zd&dd�Zd'dd�Zd(dd�Zdd�Zdd�Zdd�Z�fdd�Z�fdd�Z�fdd�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>)rm�_extrafeatures�superr��__init__)rZextra_featuresrW�kw)�	__class__rr
r��szSimSMTPChannel.__init__c
s�|j|jkr�|j�|j�}tdt|�tjd�g|_y|�	|�Wn@t
k
r�}z"|j|_|�d|j
|jf�dSd}~XYnXt���dS)NzData:)�filez%s %s)�
smtp_state�AUTHZ_emptystringrmZreceived_lines�print�reprrbrc�auth_objectr��COMMAND�push�	smtp_code�
smtp_errorr��found_terminator)r�liner)r�rr
r��szSimSMTPChannel.found_terminatorcCs�|js|�d�dS|jr$d|jkr2|�d�dS|jdk	rJ|�d�dS|��}t|�dkrl|�d�dSd|d���d	d
�}yt	||�|_
Wn$tk
r�|�d�|��dSX|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)rrEz/501 Syntax: AUTH <mechanism> [initial-response]z_auth_%sr�-�_zQ504 Command parameter not implemented: unsupported  authentication mechanism {!r}rEr)�
seen_greetingr��
extended_smtpr��authenticated_user�split�len�lower�replace�getattrr��AttributeErrorr�r�r�)r�argrWZauth_object_namerrr
�	smtp_AUTH�s.



zSimSMTPChannel.smtp_AUTHcCs,|r||_|�d�n
|�d�|j|_dS)Nz235 Authentication Succeededz&535 Authentication credentials invalid)r�r�r�r�)r�userZvalidrrr
�_authenticateds

zSimSMTPChannel._authenticatedcCst�|�d���d�S)Nr�zutf-8)�base64Zdecodebytes�encoder�)r�stringrrr
�_decode_base64szSimSMTPChannel._decode_base64c
Cs�|dkr|�d�nj|�|�}y|�d��^}}}Wn4tk
rh}z|�d�||��dSd}~XYnX|�||tdk�dS)Nz334 �z=535 Splitting response {!r} into user and password failed: {}r)r�r�r�r�r�r��sim_auth)rr��logpassr�r��passwordrrrr
�_auth_plains

zSimSMTPChannel._auth_plaincCs^|dkr|�d�nFt|d�s6|�|�|_|�d�n$|�|�}|�|j|tdk�|`dS)Nz334 VXNlcm5hbWU6�_auth_login_userz334 UGFzc3dvcmQ6r)r�rKr�rr�r�)rr�rrrr
�_auth_login's

zSimSMTPChannel._auth_loginc
Cs�|dkr|�d�t��n�|�|�}y|��\}}Wn4tk
rh}z|�d�||��dSd}~XYnXt�td�	d�|�t��	d�d��
�}|�|||k�dS)Nz334 {}z=535 Splitting response {!r} into user and password failed: {}Frr�Zmd5)r�r��sim_cram_md5_challenger�r�r��hmacZHMACr�r�Z	hexdigestr�)rr�r�r�Zhashed_passrZvalid_hashed_passrrr
�_auth_cram_md54s


zSimSMTPChannel._auth_cram_md5cCs,d}||jd}|�|�||_d|_dS)NzH250-testhost
250-EXPN
250-SIZE 20000000
250-STARTTLS
250-DELIVERBY
z250 HELPT)r�r�r�r�)rr��resprrr
�	smtp_EHLOFs

zSimSMTPChannel.smtp_EHLOcCs8|tkr&|�dt|t�|�f�n|�d|�dS)Nz	250 %s %sz550 No such user: %s)�	sim_usersr�r"�	quoteaddr)rr�rrr
�	smtp_VRFYQszSimSMTPChannel.smtp_VRFYcCs�|��}|tkrxt|}xht|�D]P\}}t�|�}|t|�dkr\|�dt||f�q"|�dt||f�q"Wn
|�d�dS)Nrz	250-%s %sz	250 %s %sz550 No access for you!)r��	sim_lists�	enumerater"r
r�r�r	)rr�Z	list_nameZ	user_listrZ
user_emailZquoted_addrrrr
�	smtp_EXPNXs
zSimSMTPChannel.smtp_EXPNcs4|jdkrtt|��|�n|�|j�|��dS)N)�
quit_responser�r��	smtp_QUITr��close_when_done)rr�)r�rr
res
zSimSMTPChannel.smtp_QUITcs6|jdkrt��|�n|�|j�|jr2|��dS)N)�
mail_responser��	smtp_MAILr��
disconnectr)rr�)r�rr
rls

zSimSMTPChannel.smtp_MAILcsB|jdkrt��|�dS|jd7_|�|j|jd�dS)Nr)�
rcpt_responser��	smtp_RCPT�
rcpt_countr�)rr�)r�rr
rts

zSimSMTPChannel.smtp_RCPTcs|jd7_t��|�dS)Nr)�
rset_countr��	smtp_RSET)rr�)r�rr
r{szSimSMTPChannel.smtp_RSETcs(|jdkrt��|�n|�|j�dS)N)�
data_responser��	smtp_DATAr�)rr�)r�rr
rs
zSimSMTPChannel.smtp_DATAcCs�dS)Nr)rrrr
�handle_error�szSimSMTPChannel.handle_error)N)N)N)rGrHrIrrrrrrrr�r�r�r�r�r�r�rrrrrrrrrrrr�
__classcell__rr)r�r
r��s4



r�c@s8eZdZeZdd�Zdd�Zdd�Zdd�Zd	d
�Z	dS)�
SimSMTPServercOs$g|_i|_tjj|f|�|�dS)N)�_extra_features�
_addressesrb�
SMTPServerr�)rrWr�rrr
r��szSimSMTPServer.__init__cCs|j|j||||jd�|_dS)N)rU)�
channel_classr�_decode_data�_SMTPchannel)rrrrrr
�handle_accepted�s
zSimSMTPServer.handle_acceptedcCs||jd<||jd<dS)N�from�tos)r )r�peer�mailfrom�rcpttos�datarrr
�process_message�s
zSimSMTPServer.process_messagecCs|j�|�dS)N)r�append)rZfeaturerrr
�add_feature�szSimSMTPServer.add_featurecCs�dS)Nr)rrrr
r�szSimSMTPServer.handle_errorN)
rGrHrIr�r"r�r%r,r.rrrrr
r�src@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�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-S).�SMTPSimTestscCs�tj|_tjt_t��|_t��|_tt	dfddd�|_
|j
j��d|_|j
|j|jf}tj
t|d�|_|j��|j��|j��dS)Nr)rSrTT)rUr)rVrW)rrXrYrr`rarOrPrrrrer#rgrQrhrirjrk)rrlrrr
r$�s



zSMTPSimTests.setUpcCs*|jt_|j��|j��|j��dS)N)	rYrrXrPrrOrjrhrm)rrrr
r%�s

zSMTPSimTests.tearDowncCs tjt|jddd�}|��dS)Nrsr�)r0r)r"r*rr#ru)rr+rrr
rv�szSMTPSimTests.testBasiccCs�tjt|jddd�}|�|ji�dddddd�}|��|�|j|�x|D]}|�|�|��qNW|�	|�d��|�
�dS)Nrsr�)r0rr�Z20000000)�expn�sizeZstarttlsZ	deliverbyr�zunsupported-feature)r"r*rr#r&�esmtp_featuresr}�
assertTruer��assertFalseru)rr+Zexpected_features�krrr
�testEHLO�s
zSMTPSimTests.testEHLOcCs�tjt|jddd�}xBt��D]6\}}dtd|t�|�fd�f}|�|�	|�|�qWd}dd	|�
d�f}|�|�	|�|�|��dS)
Nrsr�)r0rryz%s %sr�znobody@nowhere.comi&zNo such user: %s)r"r*rr#r	�items�bytesr
r&r�r�ru)rr+Z	addr_spec�name�expected_known�u�expected_unknownrrr
r��szSMTPSimTests.testVRFYc		Cs�tjt|jddd�}xht��D]\\}}g}x(|D] }|�dt|t�|�f�q0Wdt	d�
|�d�f}|�|�|�|�qWd}d	}|�|�|�|�|�
�dS)
Nrsr�)r0rz%s %sry�
r�zPSU-Members-List)i&sNo access for you!)r"r*rr#rr7r-r	r
r8rmr&r0ru)	rr+Zlistname�membersZusersr�r:r;r<rrr
�testEXPN�s
 zSMTPSimTests.testEXPNcCsL|j�d�tjt|jddd�}|�tdtd�}|�|d�|�	�dS)Nz
AUTH PLAINrsr�)r0rrr)��sAuthentication Succeeded)
rr.r"r*rr#�loginr�r&r)rr+rrrr
�testAUTH_PLAIN�s
zSMTPSimTests.testAUTH_PLAINcCsL|j�d�tjt|jddd�}|�tdtd�}|�|d�|�	�dS)Nz
AUTH LOGINrsr�)r0rrr)r@sAuthentication Succeeded)
rr.r"r*rr#rAr�r&r)rr+rrrr
�testAUTH_LOGIN�s
zSMTPSimTests.testAUTH_LOGINcCsL|j�d�tjt|jddd�}|�tdtd�}|�|d�|�	�dS)Nz
AUTH CRAM-MD5rsr�)r0rrr)r@sAuthentication Succeeded)
rr.r"r*rr#rAr�r&r)rr+rrrr
�testAUTH_CRAM_MD5s
zSMTPSimTests.testAUTH_CRAM_MD5cCsL|j�d�tjt|jddd�}|�tdtd�}|�|d�|�	�dS)NzAUTH BOGUS PLAIN LOGIN CRAM-MD5rsr�)r0rrr)r@sAuthentication Succeeded)
rr.r"r*rr#rAr�r&r)rr+rrrr
�testAUTH_multiples
zSMTPSimTests.testAUTH_multiplec
Cs�dddh}x|D]}|j�d�|��qWx�|D]�}|j|d��ttjt|jddd�}|�d	�t	d
t	d|_
|_d|���
d
d�}|�|t||��}|�|d�|��WdQRXq0WdS)NzCRAM-MD5ZPLAINZLOGINzAUTH {})�	mechanismrsr�)r0rZfoorrZauth_r�r�)r@sAuthentication Succeeded)rr.r�ZsubTestr"r*rr#r}r�r�rr�r��authr�r&r)rZ	supportedrFr+�methodrrrr
�test_auth_functions





zSMTPSimTests.test_auth_functioncCs�tjt|jddd�}|��\}}|�|d�|�d|j�|��|�	d|j�|�
t|j�|�	d|j�|��|�d|j�|��dS)Nrsr�)r0rryr1)r"r*rr#r}r&r�r2rur�r=Zehlo_or_helo_if_needed)rr+�code�messagerrr
�test_quit_resets_greeting"s
z&SMTPSimTests.test_quit_resets_greetingc	Cs|t�t|j��}|��\}}|�|d�WdQRX|�tj|jd�t�t|j��}|�	�WdQRX|�tj|jd�dS)Nrysfoo)
r"r*rr#rzr&r�r�rr)rr+rJrKrrr
�test_with_statement1sz SMTPSimTests.test_with_statementc
Csh|�tj��2}t�t|j��}|��d|jj_	WdQRXWdQRX|�
|jjd�|�
|jj
d�dS)Nz421 QUIT FAILEDi�sQUIT FAILED)r�r"r�r*rr#rzrr$rr&r�r�r�)r�errorr+rrr
� test_with_statement_QUIT_failure:sz-SMTPSimTests.test_with_statement_QUIT_failurec	Csftjt|jddd�}|��d|jj_d|jj_|�	tj
��|�ddd�WdQRX|�|j
�dS)	Nrsr�)r0rz451 Requested action abortedTr�r�ztest message)r"r*rr#rzrr$rrr��SMTPSenderRefusedr�r3r6)rr+rrr
�test__rest_from_mail_cmdFs

z%SMTPSimTests.test__rest_from_mail_cmdc	Csntjt|jddd�}|��d|jj_|�tj	��|�
ddd�WdQRX|�|j�|�
|jjjd�dS)	Nrsr�)r0rz421 closing connectionr�r�ztest messager)r"r*rr#rzrr$rr�rPr�r3r6r&r)rr+rrr
�test_421_from_mail_cmdPs
z#SMTPSimTests.test_421_from_mail_cmdc	Cs�tjt|jddd�}|��ddg|jj_|�tj	��}|�
dddd	gd
�WdQRX|�|j�|�
|jjjd�|�|jjdddi�dS)
Nrsr�)r0rz250 acceptedz421 closingr�r�ZFrankZGeorgeztest messager)i�sclosing)r"r*rr#rzrr$rr�ZSMTPRecipientsRefusedr�r3r6r&r�assertDictEqualr�rW)rr+rrrr
�test_421_from_rcpt_cmdYsz#SMTPSimTests.test_421_from_rcpt_cmdc	Cs~Gdd�dt�}||j_tjt|jddd�}|��|�tj	��|�
ddgd�WdQRX|�|j�|�
|jjjd	�dS)
NcseZdZ�fdd�Z�ZS)z=SMTPSimTests.test_421_from_data_cmd.<locals>.MySimSMTPChannelcs&|j|jkr|�d�n
t���dS)Nz421 closing)r�ZDATAr�r�r�)r)r�rr
r�eszNSMTPSimTests.test_421_from_data_cmd.<locals>.MySimSMTPChannel.found_terminator)rGrHrIr�rrr)r�r
�MySimSMTPChanneldsrUrsr�)r0rzJohn@foo.orgz
Sally@foo.orgztest messager)r�rr"r"r*rr#rzr�Z
SMTPDataErrorr�r3r6r&r$r)rrUr+rrr
�test_421_from_data_cmdcsz#SMTPSimTests.test_421_from_data_cmdcCs�tjt|jddd�}|�|j�|��|�|j�|�	|�
d��|jtj|j
ddddd	gd
�|jtj|jddd	gd�dS)Nrsrt)r0r�smtputf8r�r�r�z
BODY=8BITMIMEr�)r�)�options)r"r*rr#r�rr}r3�
does_esmtpr4r�r��SMTPNotSupportedErrorr�r�)rr+rrr
�4test_smtputf8_NotSupportedError_if_no_server_supportrszASMTPSimTests.test_smtputf8_NotSupportedError_if_no_server_supportcCsHtjt|jddd�}|�|j�|�t|jddd�|�t|j	d�dS)Nrsrt)r0rZAliceuBöbr�uÄlice)
r"r*rr#r�rr��UnicodeEncodeErrorr�r�)rr+rrr
�"test_send_unicode_without_SMTPUTF8�s
z/SMTPSimTests.test_send_unicode_without_SMTPUTF8c	Csdt�}d|d<d|d<d|d<tjt|jddd	�}|�|j�|�tj��|�	|�WdQRXdS)
NuPáolo <főo@bar.com>r�r�r�uNudge nudge, wink, wink ὠ9�Subjectrsrt)r0r)
rr"r*rr#r�rr�rZr�)rr�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|jddd�}|�|j�t�}tj�	d�|d<tj�	d�|d<|�
|�|�i�|�|j
jdd	�|�|j
jd
dg�dS)Nrsrt)r0r)uMichaëlzmichael@example.comr�)uRenézrene@example.comr�r&zmichael@example.comr'zrene@example.com)r"r*rr#r�rrr�ZutilsZ
formataddrrSr�r&rr )rr+rKrrr
�1test_name_field_not_included_in_envelop_addresses�sz>SMTPSimTests.test_name_field_not_included_in_envelop_addressesN)rGrHrIr$r%rvr6r�r?rBrCrDrErIrLrMrOrQrRrTrVr[r]r_r`rrrr
r/�s,	
	

r/c@s&eZdZdd�Zdd�Zddd�ZdS)	�SimSMTPUTF8ServercOs"ddg|_tjj|f|�|�dS)Nr�Z8BITMIME)rrbr!r�)rrWr�rrr
r��s
zSimSMTPUTF8Server.__init__cCs"|j|j||||j|jd�|_dS)N)rU�enable_SMTPUTF8)r"rr#rbr$)rrrrrr
r%�s
z!SimSMTPUTF8Server.handle_acceptedNcCs(||_||_||_||_||_||_dS)N)Z	last_peer�
last_mailfrom�last_rcpttos�last_message�last_mail_options�last_rcpt_options)rr(r)r*r+r�Zrcpt_optionsrrr
r,�sz!SimSMTPUTF8Server.process_message)NN)rGrHrIr�r%r,rrrr
ra�srac@s@eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dS)�SMTPUTF8SimTestsNcCs�tj|_tjt_t��|_t��|_tt	dfdddd�|_
|j
j��d|_|j
|j|jf}tj
t|d�|_|j��|j��|j��dS)Nr)rSrTFT)rUrbr)rVrW)rrXrYrr`rarOrPrarrrer#rgrQrhrirjrk)rrlrrr
r$�s





zSMTPUTF8SimTests.setUpcCs*|jt_|j��|j��|j��dS)N)	rYrrXrPrrOrjrhrm)rrrr
r%�s

zSMTPUTF8SimTests.tearDowncCsHtjt|jddd�}|�|j�|��|�|j�|�|�	d��dS)Nrsrt)r0rrW)
r"r*rr#r�rr}r3rYr�)rr+rrr
�$test_test_server_supports_extensions�s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)Nu$¡a test message containing unicode!zutf-8rsrt)r0ruJőhnuSállyz
BODY=8BITMIMEr�)r�)r�r"r*rr#r�rr�r&rrcrdrer�rfrg)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)Nu$¡a test message containing unicode!zutf-8rsrt)r0ruJőz
BODY=8BITMIMEr�)rX)rysOKuJános)r�r"r*rr#r�rr}r&r�Zrcptr+rrcrdrer�rfrg)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	d
d�}|�|j	�|�
|�|�i�|�
|jj
d�|�
|jjdg�|�
|jj��|�|�d
|jj�|�d|jj�|�
|jjg�dS)NuPáolo <főo@bar.com>r�r�r�uNudge nudge, wink, wink ὠ9r^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?
            rsrt)r0rufőo@bar.comz
BODY=8BITMIMEr�)rZset_content�textwrap�dedentr"r*rr#r�rr&r�rrcrdrer�r�rfrg)rr�r'r+rrr
�2test_send_message_uses_smtputf8_if_addrs_non_asciis"
	zCSMTPUTF8SimTests.test_send_message_uses_smtputf8_if_addrs_non_ascii)
rGrHrIr�r$r%rirjrkrnrrrr
rh�srhspsudoesnotexistr�)Zeolc@seZdZdd�ZdS)�!SimSMTPAUTHInitialResponseChannelcCsL|��}|d��dkr>t|�dkr>|dtkr>|�d�dS|�d�dS)Nr�plainrErz235 Okz571 Bad authentication)r�r�r��EXPECTED_RESPONSEr�)rr�rWrrr
r�)s
z+SimSMTPAUTHInitialResponseChannel.smtp_AUTHN)rGrHrIr�rrrr
ro(sroc@seZdZeZdS)� SimSMTPAUTHInitialResponseServerN)rGrHrIror"rrrr
rr7srrc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�SMTPAUTHInitialResponseSimTestscCs�tj|_tjt_t��|_t��|_tt	dfddd�|_
|j
j��d|_|j
|j|jf}tj
t|d�|_|j��|j��|j��dS)Nr)rSrTT)rUr)rVrW)rrXrYrr`rarOrPrrrrrer#rgrQrhrirjrk)rrlrrr
r$<s



z%SMTPAUTHInitialResponseSimTests.setUpcCs*|jt_|j��|j��|j��dS)N)	rYrrXrPrrOrjrhrm)rrrr
r%Ns

z(SMTPAUTHInitialResponseSimTests.tearDowncCs8|j�d�tjt|jddd�}|�dd�|��dS)Nz
AUTH PLAINrsr�)r0r�psu�doesnotexist)rr.r"r*rr#rAr)rr+rrr
�%testAUTH_PLAIN_initial_response_loginVs


zESMTPAUTHInitialResponseSimTests.testAUTH_PLAIN_initial_response_logincCsV|j�d�tjt|jddd�}d|_d|_|�d|j	�\}}|�
�|�|d�dS)	Nz
AUTH PLAINrsr�)r0rrtrurpr@)rr.r"r*rr#r�rrGZ
auth_plainrr&)rr+rJZresponserrr
�$testAUTH_PLAIN_initial_response_auth]s

zDSMTPAUTHInitialResponseSimTests.testAUTH_PLAIN_initial_response_authN)rGrHrIr$r%rvrwrrrr
rs;srs�__main__)@rLr�Zemail.mime.textr�Z
email.messagerZemail.base64mimerZ
encode_base64Zemail.utilsrrrbr"r]r>rZrMrrxrlr`ZunittestZtestrrZtest.supportrrrZ
unittest.mockr	�platformrZSMTPChannelrZTestCaser rQr�r�rRr�r�r�r�r	r�rr�	Exceptionr�r�r!rr/rarhrqrorrrsrG�mainrrrr
�<module>sv
_-
4g-