Your IP : 216.73.216.213


Current Path : /opt/alt/python35/lib64/python3.5/test/__pycache__/
Upload File :
Current File : //opt/alt/python35/lib64/python3.5/test/__pycache__/test_smtplib.cpython-35.opt-1.pyc



��Yf	��@s�ddlZddlZddlZddlmZddlmZddl	Zddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlmZmZyddlZWnek
r dZYnXejZejdkrQdd�Zeej_dd	�ZGd
d�dej �Z!dd
�Z"dZ#dZ$ej%ed�Gdd�dej ��Z&Gdd�dej �Z'ej%ed�Gdd�dej ��Z(ej%ed�Gdd�dej ��Z)ddddddiZ*ddfZ+d Z,d!ddgd"dgiZ-Gd#d$�d$e.�Z/Gd%d&�d&ej�Z0Gd'd(�d(ej1�Z2ej%ed�Gd)d*�d*ej ��Z3Gd+d,�d,e2�Z4ej%ed�Gd-d.�d.ej ��Z5ed/d0d1�Z6Gd2d3�d3e0�Z7Gd4d5�d5e2�Z8ej%ed�Gd6d7�d7ej ��Z9ej:dd8d9��Z;e<d:kr�e;�dS);�N)�EmailMessage)�body_encode)�support�mock_socket�darwincCsdS)N�)�selfrr�6/opt/alt/python35/lib64/python3.5/test/test_smtplib.py�handle_expt sr
c
Cs�|j�|j�z�y|j�\}}Wntjk
rDYnzXd}xf|r�|dkr�tjg|gg�\}}}|r�|j|�}	||	d�}|d8}qNW|j�Wd|j�|j�XdS)Ni�r�)Zlisten�setZaccept�socket�timeout�select�send�close)
�evtZbuf�serv�conn�addr�n�r�w�eZsentrrr	�server%s 

!
rc@s�eZdZdd�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)rrrr	�setUp=s	zGeneralTests.setUpcCs
tt_dS)N)r
r)rrrr	�tearDownAszGeneralTests.tearDowncCs)d}d}|j|tj|��dS)Nzabc
.jkl
foo
..bluezabc
..jkl
foo
...blue)�assertEqualrZ	quotedata)rZteststr�expectedrrr	�
testQuoteDataFszGeneralTests.testQuoteDatacCs0tjd�tjt|j�}|j�dS)Ns220 Hola mundo)r�
reply_withr�SMTP�HOSTrr)r�smtprrr	�
testBasic1Ks
zGeneralTests.testBasic1cCsItjd�tjt|jdd�}|j|jd�|j�dS)Ns220 Hola mundo�source_address�	127.0.0.1�M)r*r+)r*r+)	rr$rr%r&rr!r)r)rr'rrr	�testSourceAddressQs

	zGeneralTests.testSourceAddresscCs7tjd�tjdt|jf�}|j�dS)Ns220 Hola mundoz%s:%s)rr$rr%r&rr)rr'rrr	�
testBasic2Ys
zGeneralTests.testBasic2cCsItjd�tjt|jdd�}|j|jd�|j�dS)Ns220 Hola mundo�local_hostnameZtesthost)	rr$rr%r&rr!r.r)rr'rrr	�testLocalHostName_s
zGeneralTests.testLocalHostNamecCs�tjd�|jtj��tjd�|jtj�d�ztjt|j	�}Wdtjd�X|j|j
j�d�|j�dS)Ns220 Hola mundo�)
rr$�assertIsNone�getdefaulttimeout�setdefaulttimeoutr!rr%r&r�sock�
gettimeoutr)rr'rrr	�testTimeoutDefaultfs

zGeneralTests.testTimeoutDefaultcCs�tjd�|jtj��tjd�ztjt|j	dd�}Wdtjd�X|j|j
j��|j�dS)Ns220 Hola mundor0r)
rr$r1r
r2r3rr%r&rr4r5r)rr'rrr	�testTimeoutNoners

zGeneralTests.testTimeoutNonecCsOtjd�tjt|jdd�}|j|jj�d�|j	�dS)Ns220 Hola mundorr0)
rr$rr%r&rr!r4r5r)rr'rrr	�testTimeoutValue}s
zGeneralTests.testTimeoutValuec
Cs�tjd�tj�}|jd�tj��}|jt|j	�WdQRX|j
�tjdtj
�}|j|j�|�dS)Ns220 Hello worldrz	^connect:)rr$rr%�set_debuglevelr�captured_stderr�connectr&rr�re�compile�	MULTILINE�assertRegex�getvalue)rr'�stderrr"rrr	�test_debuglevel�s


zGeneralTests.test_debuglevelc
Cs�tjd�tj�}|jd�tj��}|jt|j	�WdQRX|j
�tjdtj
�}|j|j�|�dS)Ns220 Hello world�z#^\d{2}:\d{2}:\d{2}\.\d{6} connect: )rr$rr%r9rr:r;r&rrr<r=r>r?r@)rr'rAr"rrr	�test_debuglevel_2�s


	zGeneralTests.test_debuglevel_2N)�__name__�
__module__�__qualname__rr r#r(r,r-r/r6r7r8rBrDrrrr	r;s
rcCs�|j�z�y{ttd�r+tj}n	tj}d}xJtjr�|dkr�|dtj�|j�ry|j�P|d8}q=WWnt	j
k
r�YnXWd|j�s�tjd�|j�tj
�|j�XdS)N�polli�rg{�G�z�?rg�?)r�hasattrr�asyncoreZpoll2rHZ
socket_mapZis_setrr
r�time�sleepZ	close_all)r�serv_evt�
client_evtZpoll_funrrrr	�debugging_server�s&
	
	


rOz&---------- MESSAGE FOLLOWS ----------
z&------------ END MESSAGE ------------
z!Threading required for this test.c@seZdZdZdd�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-�ZdS).�DebuggingServerTestsNcCstj|_tjt_tj|_tj�|_	|j	t_t
j�|_t
j�|_
tj|_tj�t_tjtdfd	dd�|_|jjj�d|_|j|j|j
f}t
jdtd|�|_|jj�|jj�|jj�dS)
Nr�nowherer�decode_dataT�target�args���)rQrU)r
�getfqdn�real_getfqdnr�sys�stdout�
old_stdout�io�StringIO�output�	threading�EventrMrN�smtpd�DEBUGSTREAM�old_DEBUGSTREAMZDebuggingServerr&r�getsocknamer�ThreadrO�thread�start�wait�clear)r�	serv_argsrrr	r�s"

zDebuggingServerTests.setUpcCs\|jt_|jj�|jj�|jj�|j	t
_tj
j�|jt_
dS)N)rWr
rVrNrrMrgre�joinrZrXrYr`rarrb)rrrr	r �s



zDebuggingServerTests.tearDowncCs/tjt|jdddd�}|j�dS)Nr.�	localhostr�)rr%r&r�quit)rr'rrr	�	testBasic�s!zDebuggingServerTests.testBasiccCs�tj�}ygtjt|jdddddd|f�}|j|jd|f�|j|jd�|j	�WnKt
k
r�}z+|jtjkr�|j
d|��WYdd}~XnXdS)Nr.rkrrlr)z	127.0.0.1zcouldn't bind to port %d)rZfind_unused_portrr%r&rr!r)r.rm�OSError�errnoZ
EADDRINUSEZskipTest)rrr'rrrr	r,�sz&DebuggingServerTests.testSourceAddresscCsKtjt|jdddd�}d}|j|j�|�|j�dS)Nr.rkrrl��OK)rqrr)rr%r&rr!�nooprm)rr'r"rrr	�testNOOPs!zDebuggingServerTests.testNOOPcCsKtjt|jdddd�}d}|j|j�|�|j�dS)Nr.rkrrlrq�OK)rqru)rr%r&rr!Zrsetrm)rr'r"rrr	�testRSETs!zDebuggingServerTests.testRSETcCsKtjt|jdddd�}d}|j|j�|�|j�dS)Nr.rkrrlrq�
SIZE 33554432
HELP)rqrw)rr%r&rr!�ehlorm)rr'r"rrr	�testELHO
s!zDebuggingServerTests.testELHOcCsXtjt|jdddd�}d}|jd�|j|j�|�|j�dS)	Nr.rkrrl��EXPN not implementedZEXPN)rzr{)rr%r&rZputcmdr!Zgetreplyrm)rr'r"rrr	�testEXPNNotImplementeds
!
z+DebuggingServerTests.testEXPNNotImplementedcCsqtjt|jdddd�}dddf}|j|jd�|�|j|jd�|�|j�dS)	Nr.rkrrl�s*Cannot VRFY user, but will accept message sand attempt deliveryznobody@nowhere.com)rr%r&rr!�vrfyZverifyrm)rr'r"rrr	�testVRFYs!
zDebuggingServerTests.testVRFYcCsUtjt|jdddd�}|j�d}|j|j�|�|j�dS)Nr.rkrrl��Duplicate HELO/EHLO)r�r�)rr%r&rZhelor!rm)rr'r"rrr	�testSecondHELO$s
!
z#DebuggingServerTests.testSecondHELOcCsItjt|jdddd�}|j|j�dd�|j�dS)Nr.rkrrls#Supported commands: EHLO HELO MAIL sRCPT DATA RSET NOOP QUIT VRFY)rr%r&rr!�helprm)rr'rrr	�testHELP-s!zDebuggingServerTests.testHELPcCs�d}tjt|jdddd�}|jdd|�tjd�|j�|jj	�|j
j�|jj
�d	t|tf}|j|jj�|�dS)
NzA test messager.rkrrl�John�Sallyg{�G�z�?z%s%s
%s)rr%r&r�sendmailrKrLrmrNrrMrgr]�flush�	MSG_BEGIN�MSG_ENDr!r@)r�mr'�mexpectrrr	�testSend3s!




zDebuggingServerTests.testSendcCs�d}tjt|jdddd�}|jdd|�tjd�|j�|jj	�|j
j�|jj
�d	t|jd
�tf}|j|jj�|�dS)NsA test messager.rkrrlr�r�g{�G�z�?z%s%s
%s�ascii)rr%r&rr�rKrLrmrNrrMrgr]r�r��decoder�r!r@)rr�r'r�rrr	�testSendBinaryDs!




z#DebuggingServerTests.testSendBinarycCs�d}tjt|jdddd�}|jdd|�tjd�|j�|jj	�|j
j�|jj
�d	t|tf}|j|jj�|�dS)
Nz.A test
.mes.sage.r.rkrrlr�r�g{�G�z�?z%s%s
%s)rr%r&rr�rKrLrmrNrrMrgr]r�r�r�r!r@)rr�r'r�rrr	�testSendNeedingDotQuoteRs!




z,DebuggingServerTests.testSendNeedingDotQuotecCs�d}tjt|jdddd�}|jdd|�tjd�|j�|jj	�|j
j�|jj
�d	t|tf}|j|jj�|�tjj�}tjd
tj�}|j||�dS)NzA test messager.rkrrlz<>r�g{�G�z�?z%s%s
%sz^sender: <>$)rr%r&rr�rKrLrmrNrrMrgr]r�r�r�r!r@r`rar<r=r>r?)rr�r'r��debugout�senderrrr	�testSendNullSenderas!




z'DebuggingServerTests.testSendNullSendercCs�tjjjd�}tjt|jdddd�}|j|dddd	�t	j
d
�|j�|jj
�|jj�|jj�tjd�|d<dt|j�tf}|j|jj�|�dS)
NzA test messager.rkrrl�	from_addrr��to_addrsr�g{�G�z�?zX-Peerz%s%s
%s)�email�mime�text�MIMETextrr%r&r�send_messagerKrLrmrNrrMrgr]r�r
�
gethostbynamer��	as_stringr�r!r@)rr�r'r�rrr	�testSendMessagers!




z$DebuggingServerTests.testSendMessagecCs�tjjjd�}d|d<d|d<d|d<d|d	<tjt|jd
ddd
�}|j|�t	j
d�|j�|j|d	d�|j
j�|jj�|jj�tjd�|d<|d	=dt|j�tf}|j|jj�|�tjj�}tjdtj�}|j||�x<dD]4}tjdj|�tj�}|j||�qDWdS)NzA test messagezfoo@bar.com�Fromr��TozSally, Fred�CCz?John Root <root@localhost>, "Dinsdale" <warped@silly.walks.com>�Bccr.rkrrlg{�G�z�?zX-Peerz%s%s
%sz^sender: foo@bar.com$r��Fred�root@localhost�warped@silly.walks.comz^recips: .*'{}'.*$)r�r�r�r�r�) r�r�r�r�rr%r&rr�rKrLrmr!rNrrMrgr]r�r
r�r�r�r�r@r`rar<r=r>r?�format)rr�r'r�r�r�r�to_addrrrr	�testSendMessageWithAddresses�s2



!






z1DebuggingServerTests.testSendMessageWithAddressescCsQtjjjd�}d|d<d|d<tjt|jdddd	�}|j|�t	j
d
�|j�|jj
�|jj�|jj�tjd�|d<dt|j�tf}|j|jj�|�tjj�}tjd
tj�}|j||�x<dD]4}tjdj|�tj�}|j||�qWdS)NzA test messagezfoo@bar.comr�zJohn, Dinsdaler�r.rkrrlg{�G�z�?zX-Peerz%s%s
%sz^sender: foo@bar.com$r��Dinsdalez^recips: .*'{}'.*$)r�r�) r�r�r�r�rr%r&rr�rKrLrmrNrrMrgr]r�r
r�r�r�r�r!r@r`rar<r=r>r?r�)rr�r'r�r�r�rr�rrr	� testSendMessageWithSomeAddresses�s(

!






z5DebuggingServerTests.testSendMessageWithSomeAddressesc	Cs�tjjjd�}d|d<d|d<tjt|jdddd	�}|j|d
ddd
�t	j
d�|j�|jj
�|jj�|jj�tjd�|d<dt|j�tf}|j|jj�|�tjj�}tjdtj�}|j||�x<dD]4}tjdj|�tj�}|j ||�q!Wtjdtj�}|j||�dS)NzA test messagezfoo@bar.comr�zJohn, Dinsdaler�r.rkrrlr�zjoe@example.comr�zfoo@example.netg{�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&rr�rKrLrmrNrrMrgr]r�r
r�r�r�r�r!r@r`rar<r=r>r?r�ZassertNotRegex)	rr�r'r�r�r�rr�Zreciprrr	�%testSendMessageWithSpecifiedAddresses�s,

!





z:DebuggingServerTests.testSendMessageWithSpecifiedAddressescCs[tjjjd�}d|d<d|d<d|d<tjt|jdd	d
d�}|j|�t	j
d�|j�|jj
�|jj�|jj�tjd	�|d
<dt|j�tf}|j|jj�|�tjj�}tjdtj�}|j||�x<dD]4}tjdj|�tj�}|j||�qWdS)NzA test messagezBernard, Biancar�z#the_rescuers@Rescue-Aid-Society.comZSenderzJohn, Dinsdaler�r.rkrrlg{�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&rr�rKrLrmrNrrMrgr]r�r
r�r�r�r�r!r@r`rar<r=r>r?r�)rr�r'r�r�r�rr�rrr	�testSendMessageWithMultipleFrom�s*


!






z4DebuggingServerTests.testSendMessageWithMultipleFromcCs�tjjjd�}d|d<d|d<d|d<d|d	<d
|d<d|d
<d|d<d|d<tjt|jdddd�}|j|�t	j
d�|j�|jj
�|jj�|jj�|d	=|d=tjd�|d<dt|j�tf}|j|jj�|�tjj�}tjdtj�}|j||�x<dD]4}tjdj|�tj�}|j||�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-To�doe@losthope.netz
Resent-Bccr.rkrrlg{�G�z�?zX-Peerz%s%s
%sz^sender: holy@grail.net$�my_mom@great.cooker.com�Jeffz^recips: .*'{}'.*$)r�r�r�) r�r�r�r�rr%r&rr�rKrLrmrNrrMrgr]r�r
r�r�r�r�r!r@r`rar<r=r>r?r�)rr�r'r�r�r�rr�rrr	�testSendMessageResent�s8







!






z*DebuggingServerTests.testSendMessageResentc	Cs�tjjjd�}d|d<d|d<d|d<d|d	<d
|d<d|d
<d|d<d|d<d|d<d|d<d|d
<tjt|jdddd�}|jt	��|j
|�WdQRX|j�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 +0000r.rkrrl)r�r�r�r�rr%r&r�assertRaises�
ValueErrorr�r)rr�r'rrr	�#testSendMessageMultipleResentRaisess 










!z8DebuggingServerTests.testSendMessageMultipleResentRaises)rErFrG�maxDiffrr rnr,rtrvryr|rr�r�r�r�r�r�r�r�r�r�r�r�r�rrrr	rP�s.
	!"rPc@s(eZdZdd�Zdd�ZdS)�NonConnectingTestscCs?tj�}|jtj|j�|jtj|jd�dS)Nztest msg)rr%r��SMTPServerDisconnectedrxr)rr'rrr	�testNotConnected*sz#NonConnectingTests.testNotConnectedcCs3|jttjdd�|jttjd�dS)NrkZboguszlocalhost:bogus)r�rorr%)rrrr	�testNonnumericPort4s
z%NonConnectingTests.testNonnumericPortN)rErFrGr�r�rrrr	r�(s
r�c@s4eZdZdd�Zdd�Zdd�ZdS)�BadHELOServerTestscCsJtt_tjd�tj|_tj�|_	|j	t_d|_
dS)Ns199 no hello for you!r)rrr
r$rXrYrZr[r\r]r)rrrr	r@s	
zBadHELOServerTests.setUpcCstt_|jt_dS)N)r
rrZrXrY)rrrr	r Hs	zBadHELOServerTests.tearDowncCs)|jtjtjt|jdd�dS)Nrkrl)r�rZSMTPConnectErrorr%r&r)rrrr	�testFailingHELOLsz"BadHELOServerTests.testFailingHELON)rErFrGrr r�rrrr	r�=sr�c@sMeZdZddejddZdd�Zdd�Zd	d
�ZdS)�TooLongLineTestss250 OK�.rCs
cCs�tj|_tj�|_|jt_tj�|_t	j	t	j
t	j�|_|jj
d�tj|j�|_|j|j|jf}tjdtd|�j�|jj�|jj�dS)N�rSrT)rXrYrZr[r\r]r^r_rr
ZAF_INETZSOCK_STREAMr4Z
settimeoutrZ	bind_portr�respdatardrrfrgrh)rZservargsrrr	rUs
zTooLongLineTests.setUpcCs|jj�|jt_dS)N)rrgrZrXrY)rrrr	r cs
zTooLongLineTests.tearDowncCs)|jtjtjt|jdd�dS)Nrkrl)r�r�SMTPResponseExceptionr%r&r)rrrr	�testLineTooLonggsz TooLongLineTests.testLineTooLongN)	rErFrGrZ_MAXLINEr�rr r�rrrr	r�Qsr�zMr.A@somewhere.comzJohn AzMs.B@xn--fo-fka.comzSally BzMrs.C@somewhereesle.comzRuth CZsomepasswordz<PENCeUxFREJoU0NnbmhNWitOMjNGNndAZWx3b29kLmlubm9zb2Z0LmNvbT4=zlist-1zlist-2c@seZdZdS)�ResponseExceptionN)rErFrGrrrr	r�ysr�csEeZdZdZdZdZdZdZdZdZ	dZ
dZ�fdd�Z�fdd�Z
dd	�Zd
d�Zdd
�Zddd�Zddd�Zddd�Zdd�Zdd�Zdd�Z�fdd�Z�fdd�Z�fdd�Z�fd d!�Z�fd"d#�Zd$d%�Z�S)&�SimSMTPChannelNr�ccs<djdd�|D��|_tt|�j||�dS)N�cSsg|]}dj|��qS)z	250-{0}
)r�)�.0�xrrr	�
<listcomp>�s	z+SimSMTPChannel.__init__.<locals>.<listcomp>)rj�_extrafeatures�superr��__init__)rZextra_featuresrT�kw)�	__class__rr	r��szSimSMTPChannel.__init__cs�|j|jkr�|jj|j�}tdt|�dtj�g|_y|j	|�WnRt
k
r�}z2|j|_|jd|j
|jf�dSWYdd}~XnXt�j�dS)NzData:�filez%s %s)�
smtp_state�AUTHZ_emptystringrjZreceived_lines�print�reprr`ra�auth_objectr��COMMAND�push�	smtp_code�
smtp_errorr��found_terminator)r�liner)r�rr	r��s	zSimSMTPChannel.found_terminatorcCs1|js|jd�dS|js3d|jkrD|jd�dS|jdk	rd|jd�dS|j�}t|�d
kr�|jd�dSd|d	j�jd
d�}yt	||�|_
Wn,tk
r�|jdj|��dSYnX|j
|_|j
t|�dkr&|dnd�dS)Nz503 Error: send EHLO firstr�z(500 Error: command "AUTH" not recognizedz3503 Bad sequence of commands: already authenticatedrrCz/501 Syntax: AUTH <mechanism> [initial-response]z_auth_%sr�-�_zQ504 Command parameter not implemented: unsupported  authentication mechanism {!r})rrC)�
seen_greetingr��
extended_smtpr��authenticated_user�split�len�lower�replace�getattrr��AttributeErrorr�r�r�)r�argrTZauth_object_namerrr	�	smtp_AUTH�s.	


 

	zSimSMTPChannel.smtp_AUTHcCs<|r||_|jd�n
|jd�|j|_dS)Nz235 Authentication Succeededz&535 Authentication credentials invalid)r�r�r�r�)r�userZvalidrrr	�_authenticated�s
	
zSimSMTPChannel._authenticatedcCstj|jd��jd�S)Nr�zutf-8)�base64Zdecodebytes�encoder�)r�stringrrr	�_decode_base64�szSimSMTPChannel._decode_base64cCs�|dkr|jd�n�|j|�}y|jd�^}}}WnBtk
r�}z"|jdj||��dSWYdd}~XnX|j||tdk�dS)Nz334 �z=535 Splitting response {!r} into user and password failed: {}r)r�r�r�r�r�r��sim_auth)rr��logpassr�r��passwordrrrr	�_auth_plain�s
zSimSMTPChannel._auth_plaincCs�|dkr|jd�nct|d�sM|j|�|_|jd�n2|j|�}|j|j|tdk�|`dS)Nz334 VXNlcm5hbWU6�_auth_login_userz334 UGFzc3dvcmQ6r)r�rIr�r�r�r�)rr�r�rrr	�_auth_login�szSimSMTPChannel._auth_logincCs�|dkr%|jdjt��n�|j|�}y|j�\}}WnBtk
r�}z"|jdj||��dSWYdd}~XnXtjtdj	d�|jt�j	d�d�j
�}|j|||k�dS)Nz334 {}z<535 Splitting response {!r} into user and passwordfailed: {}Frr�Zmd5)r�r��sim_cram_md5_challenger�r�r��hmacZHMACr�r�Z	hexdigestr�)rr�r�r�Zhashed_passrZvalid_hashed_passrrr	�_auth_cram_md5�s
zSimSMTPChannel._auth_cram_md5cCs:d}||jd}|j|�||_d|_dS)NzH250-testhost
250-EXPN
250-SIZE 20000000
250-STARTTLS
250-DELIVERBY
z250 HELPT)r�r�r�r�)rr��resprrr	�	smtp_EHLO�s

	zSimSMTPChannel.smtp_EHLOcCsH|tkr3|jdt|tj|�f�n|jd|�dS)Nz	250 %s %sz550 No such user: %s)�	sim_usersr�r�	quoteaddr)rr�rrr	�	smtp_VRFY�s'zSimSMTPChannel.smtp_VRFYcCs�|j�}|tkr�t|}x�t|�D]j\}}tj|�}|t|�dkr~|jdt||f�q/|jdt||f�q/Wn
|jd�dS)Nrz	250-%s %sz	250 %s %sz550 No access for you!)r��	sim_lists�	enumeraterr�r�r�r�)rr�Z	list_nameZ	user_listrZ
user_emailZquoted_addrrrr	�	smtp_EXPN�s
"zSimSMTPChannel.smtp_EXPNcsF|jdkr(tt|�j|�n|j|j�|j�dS)N)�
quit_responser�r��	smtp_QUITr��close_when_done)rr�)r�rr	r�	szSimSMTPChannel.smtp_QUITcsI|jdkr"t�j|�n#|j|j�|jrE|j�dS)N)�
mail_responser��	smtp_MAILr��
disconnectr)rr�)r�rr	rs
	zSimSMTPChannel.smtp_MAILcsQ|jdkr#t�j|�dS|jd7_|j|j|jd�dS)Nr)�
rcpt_responser��	smtp_RCPT�
rcpt_countr�)rr�)r�rr	rs
zSimSMTPChannel.smtp_RCPTcs#|jd7_t�j|�dS)Nr)�
rset_countr��	smtp_RSET)rr�)r�rr	rszSimSMTPChannel.smtp_RSETcs6|jdkr"t�j|�n|j|j�dS)N)�
data_responser��	smtp_DATAr�)rr�)r�rr	r
#szSimSMTPChannel.smtp_DATAcCs�dS)Nr)rrrr	�handle_error)szSimSMTPChannel.handle_error)rErFrGr�rrr	rrrr�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrr
rrr)r�r	r�zs4


r�c@sReZdZeZdd�Zdd�Zdd�Zdd�Zd	d
�Z	dS)�
SimSMTPServercOs#g|_tjj|||�dS)N)�_extra_featuresr`�
SMTPServerr�)rrTr�rrr	r�1s	zSimSMTPServer.__init__cCs+|j|j|||d|j�|_dS)NrR)�
channel_classr
�_decode_data�_SMTPchannel)rrrrrr	�handle_accepted5szSimSMTPServer.handle_acceptedcCsdS)Nr)r�peer�mailfrom�rcpttos�datarrr	�process_message:szSimSMTPServer.process_messagecCs|jj|�dS)N)r
�append)rZfeaturerrr	�add_feature=szSimSMTPServer.add_featurecCs�dS)Nr)rrrr	r@szSimSMTPServer.handle_errorN)
rErFrGr�rr�rrrrrrrr	r-src@seZdZdd�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)S)*�SMTPSimTestscCs�tj|_tjt_tj�|_tj�|_tt	dfd	dd�|_
|j
jj�d|_|j
|j|jf}tj
dtd|�|_|jj�|jj�|jj�dS)
NrrQrrRTrSrTrU)rQrU)r
rVrWrr^r_rMrNrr&rrcrrdrOrerfrgrh)rrirrr	rIs

zSMTPSimTests.setUpcCs7|jt_|jj�|jj�|jj�dS)N)	rWr
rVrNrrMrgrerj)rrrr	r Zs

zSMTPSimTests.tearDowncCs/tjt|jdddd�}|j�dS)Nr.rkrr�)rr%r&rrm)rr'rrr	rnbs!zSMTPSimTests.testBasicc
Cs�tjt|jdddd�}|j|ji�ddddd	dd
dddi}|j�|j|j|�x$|D]}|j|j|��q|W|j	|jd��|j
�dS)
Nr.rkrr��expnr��sizeZ20000000ZstarttlsZ	deliverbyr�zunsupported-feature)rr%r&rr!�esmtp_featuresrx�
assertTrue�has_extn�assertFalserm)rr'Zexpected_features�krrr	�testEHLOgs!

zSMTPSimTests.testEHLOcCs�tjt|jdddd�}x[tj�D]M\}}dtd|tj|�fd�f}|j|j	|�|�q.Wd}d	d
|j
d�f}|j|j	|�|�|j�dS)Nr.rkrr�rqz%s %sr�znobody@nowhere.comi&zNo such user: %s)rr%r&rr��items�bytesr�r!r~r�rm)rr'Z	addr_spec�name�expected_known�u�expected_unknownrrr	r|s!	zSMTPSimTests.testVRFYc	Cs�tjt|jdddd�}x�tj�D]~\}}g}x2|D]*}|jdt|tj|�f�qGWdt	dj
|�d�f}|j|j|�|�q.Wd	}d}|j|j|�|�|j
�dS)
Nr.rkrr�z%s %srq�
r�zPSU-Members-List�&�No access for you!)r*r+)rr%r&rr�r#rr�r�r$rjr!rrm)	rr'ZlistnameZmembersZusersr�r&r'r(rrr	�testEXPN�s!
(zSMTPSimTests.testEXPNcCsi|jjd�tjt|jdddd�}|jtdtd�}|j|d
�|j	�dS)Nz
AUTH PLAINr.rkrr�rr���Authentication Succeeded)r-r.)
rrrr%r&r�loginr�r!r)rr'r�rrr	�testAUTH_PLAIN�s
!zSMTPSimTests.testAUTH_PLAINcCsi|jjd�tjt|jdddd�}|jtdtd�}|j|d
�|j	�dS)Nz
AUTH LOGINr.rkrr�rrr-�Authentication Succeeded)r-r1)
rrrr%r&rr/r�r!r)rr'r�rrr	�testAUTH_LOGIN�s
!zSMTPSimTests.testAUTH_LOGINcCsi|jjd�tjt|jdddd�}|jtdtd�}|j|d
�|j	�dS)Nz
AUTH CRAM-MD5r.rkrr�rrr-�Authentication Succeeded)r-r3)
rrrr%r&rr/r�r!r)rr'r�rrr	�testAUTH_CRAM_MD5�s
!zSMTPSimTests.testAUTH_CRAM_MD5cCsi|jjd�tjt|jdddd�}|jtdtd�}|j|d
�|j	�dS)NzAUTH BOGUS PLAIN LOGIN CRAM-MD5r.rkrr�rrr-�Authentication Succeeded)r-r5)
rrrr%r&rr/r�r!r)rr'r�rrr	�testAUTH_multiple�s
!zSMTPSimTests.testAUTH_multiplecCsdddh}x'|D]}|jjdj|��qWx�|D]�}|jd|���tjt|jdddd	�}|jd
�t	dt	d|_
|_d
|j�j
dd�}|j|t||��}|j|d�|j�WdQRXq@WdS)NzCRAM-MD5ZPLAINZLOGINzAUTH {}�	mechanismr.rkrr�ZfoorrZauth_r�r�r-�Authentication Succeeded)r-r8)rrr�ZsubTestrr%r&rrxr�r�r�r�r��authr�r!r)rZ	supportedr7r'�methodr�rrr	�test_auth_function�s


zSMTPSimTests.test_auth_functioncCs�tjt|jdddd�}|j�\}}|j|d�|jd|j�|j�|j	d|j�|j
t|j�|j	d|j�|j�|jd|j�|j�dS)Nr.rkrr�rqr)rr%r&rrxr!�assertInrrmZassertNotInr;Zehlo_or_helo_if_needed)rr'�code�messagerrr	�test_quit_resets_greeting�s	

z&SMTPSimTests.test_quit_resets_greetingcCs�tjt|j��)}|j�\}}|j|d�WdQRX|jtj|jd�tjt|j��}|j	�WdQRX|jtj|jd�dS)Nrqsfoo)
rr%r&rrsr!r�r�rr)rr'r=r>rrr	�test_with_statement�sz SMTPSimTests.test_with_statementcCs�|jtj��?}tjt|j�� }|j�d|jj_	WdQRXWdQRX|j
|jjd�|j
|jj
d�dS)Nz421 QUIT FAILEDi�sQUIT FAILED)r�rr�r%r&rrsrrr�r!�	exceptionr�r�)r�errorr'rrr	� test_with_statement_QUIT_failure�s
z-SMTPSimTests.test_with_statement_QUIT_failurecCs�tjt|jdddd�}|j�d|jj_d|jj_|j	tj
��|jddd	�WdQRX|j|j
�dS)
Nr.rkrr�z451 Requested action abortedTr�r�ztest message)rr%r&rrsrrrrr��SMTPSenderRefusedr�r1r4)rr'rrr	�test__rest_from_mail_cmd�s!
z%SMTPSimTests.test__rest_from_mail_cmdcCs�tjt|jdddd�}|j�d|jj_|jtj	��|j
ddd�WdQRX|j|j�|j
|jjjd	�dS)
Nr.rkrr�z421 closing connectionr�r�ztest messager)rr%r&rrsrrrr�rDr�r1r4r!r)rr'rrr	�test_421_from_mail_cmd�s!
z#SMTPSimTests.test_421_from_mail_cmdcCs�tjt|jdddd�}|j�ddg|jj_|jtj	��#}|j
ddd	d
gd�WdQRX|j|j�|j
|jjjd�|j|jjdd	di�dS)Nr.rkrr�z250 acceptedz421 closingr�r�ZFrankZGeorgeztest messager��closing)rGrH)rr%r&rrsrrrr�ZSMTPRecipientsRefusedr�r1r4r!rZassertDictEqualrArT)rr'rrrr	�test_421_from_rcpt_cmd�s!
#z#SMTPSimTests.test_421_from_rcpt_cmdcCs�Gdd�dt�}||j_tjt|jdddd�}|j�|jtj	��|j
ddgd	�WdQRX|j|j�|j
|jjjd
�dS)Ncs"eZdZ�fdd�Z�S)z=SMTPSimTests.test_421_from_data_cmd.<locals>.MySimSMTPChannelcs3|j|jkr"|jd�n
t�j�dS)Nz421 closing)r�ZDATAr�r�r�)r)r�rr	r�szNSMTPSimTests.test_421_from_data_cmd.<locals>.MySimSMTPChannel.found_terminator)rErFrGr�rr)r�r	�MySimSMTPChannelsrJr.rkrr�zJohn@foo.orgz
Sally@foo.orgztest messager)r�rrrr%r&rrsr�Z
SMTPDataErrorr�r1r4r!rr)rrJr'rrr	�test_421_from_data_cmds!
z#SMTPSimTests.test_421_from_data_cmdc	Cs�tjt|jdddd�}|j|j�|j�|j|j�|j	|j
d��|jtj|j
dddd	d
dg�|jtj|jddd
dg�dS)
Nr.rkrrl�smtputf8r�r�r��mail_optionsz
BODY=8BITMIME�SMTPUTF8�options)rr%r&r�
addCleanuprrxr�
does_esmtpr rr��SMTPNotSupportedErrorr��mail)rr'rrr	�4test_smtputf8_NotSupportedError_if_no_server_supports
zASMTPSimTests.test_smtputf8_NotSupportedError_if_no_server_supportcCsgtjt|jdddd�}|j|j�|jt|jddd�|jt|j	d�dS)	Nr.rkrrlZAliceuBöbr�uÄlice)
rr%r&rrPrr��UnicodeEncodeErrorr�rS)rr'rrr	�"test_send_unicode_without_SMTPUTF8$s
z/SMTPSimTests.test_send_unicode_without_SMTPUTF8N)rErFrGrr rnr"rr,r0r2r4r6r;r?r@rCrErFrIrKrTrVrrrr	rFs(	
	
rc@s:eZdZdd�Zdd�Zdddd�ZdS)�SimSMTPUTF8ServercOs)ddg|_tjj|||�dS)NrNZ8BITMIME)r
r`rr�)rrTr�rrr	r�.szSimSMTPUTF8Server.__init__c	Cs4|j|j|||d|jd|j�|_dS)NrR�enable_SMTPUTF8)rr
rrXr)rrrrrr	r5s	z!SimSMTPUTF8Server.handle_acceptedNcCs:||_||_||_||_||_||_dS)N)Z	last_peer�
last_mailfrom�last_rcpttos�last_message�last_mail_options�last_rcpt_options)rrrrrrMZrcpt_optionsrrr	r<s					z!SimSMTPUTF8Server.process_message)rErFrGr�rrrrrr	rW,srWc@sjeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dS)�SMTPUTF8SimTestsNcCs�tj|_tjt_tj�|_tj�|_tt	dfddddd�|_
|j
jj�d|_|j
|j|jf}tj
dtd	|�|_|jj�|jj�|jj�dS)NrrQrrRFrXTrSrTrU)rQrU)r
rVrWrr^r_rMrNrWr&rrcrrdrOrerfrgrh)rrirrr	rKs

zSMTPUTF8SimTests.setUpcCs7|jt_|jj�|jj�|jj�dS)N)	rWr
rVrNrrMrgrerj)rrrr	r ^s

zSMTPUTF8SimTests.tearDowncCsetjt|jdddd�}|j|j�|j�|j|j�|j|j	d��dS)Nr.rkrrlrL)
rr%r&rrPrrxrrQr)rr'rrr	�$test_test_server_supports_extensionsfs
z5SMTPUTF8SimTests.test_test_server_supports_extensionscCs�djd�}tjt|jdddd�}|j|j�|jdd|d	d
dg�|j|j	j
d�|j|j	jdg�|j|j	j|�|j
d
|j	j�|j
d|j	j�|j|j	jg�dS)Nu$¡a test message containing unicode!zutf-8r.rkrrluJőhnuSállyrMz
BODY=8BITMIMErN)r�rr%r&rrPrr�r!rrYrZr[r<r\r])rr�r'rrr	�,test_send_unicode_with_SMTPUTF8_via_sendmailns
z=SMTPUTF8SimTests.test_send_unicode_with_SMTPUTF8_via_sendmailcCs,djd�}tjt|jdddd�}|j|j�|j�|j|j	ddd	d
g�d�|j|j
d
�d�|j|j|�d�|j|jj
d�|j|jjd
g�|j|jj|�|jd	|jj�|jd
|jj�|j|jjg�dS)Nu$¡a test message containing unicode!zutf-8r.rkrrluJőrOz
BODY=8BITMIMErNrq�OKuJános)rqra)rqra)rqra)r�rr%r&rrPrrxr!rSZrcptrrrYrZr[r<r\r])rr�r'rrr	�1test_send_unicode_with_SMTPUTF8_via_low_level_API|s 
zBSMTPUTF8SimTests.test_send_unicode_with_SMTPUTF8_via_low_level_APIcCst�}d|d<d|d<d|d<|jd�tjd�}tjt|jd	d
dd�}|j|j	�|j
|j|�i�|j
|jj
d
�|j
|jjdg�|j
|jjj�|�|jd|jj�|jd|jj�|j
|jjg�dS)NuPáolo <főo@bar.com>r�r�r�uNudge nudge, wink, wink ὠ9�Subjectu1oh 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.rkrrlufőo@bar.comz
BODY=8BITMIMErN)rZset_content�textwrap�dedentrr%r&rrPrr!r�rrYrZr[r�r<r\r])r�msgr"r'rrr	�2test_send_message_uses_smtputf8_if_addrs_non_ascii�s"	



		zCSMTPUTF8SimTests.test_send_message_uses_smtputf8_if_addrs_non_asciicCsxt�}d|d<d|d<d|d<tjt|jddd	d
�}|j|j�|jtj|j	|��dS)NuPáolo <főo@bar.com>r�r�r�uNudge nudge, wink, wink ὠ9rcr.rkrrl)
rrr%r&rrPrr�rRr�)rrfr'rrr	�9test_send_message_error_on_non_ascii_addrs_if_no_smtputf8�s	


zJSMTPUTF8SimTests.test_send_message_error_on_non_ascii_addrs_if_no_smtputf8)rErFrGr�rr r_r`rbrgrhrrrr	r^Fsr^spsudoesnotexistZeolr�c@seZdZdd�ZdS)�!SimSMTPAUTHInitialResponseChannelcCsf|j�}|dj�dkrUt|�dkrU|dtkrU|jd�dS|jd�dS)Nr�plainrCrz235 Okz571 Bad authentication)r�r�r��EXPECTED_RESPONSEr�)rr�rTrrr	r��s
z+SimSMTPAUTHInitialResponseChannel.smtp_AUTHN)rErFrGr�rrrr	ri�sric@seZdZeZdS)� SimSMTPAUTHInitialResponseServerN)rErFrGrirrrrr	rl�srlc@s@eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�SMTPAUTHInitialResponseSimTestscCs�tj|_tjt_tj�|_tj�|_tt	dfd	dd�|_
|j
jj�d|_|j
|j|jf}tj
dtd|�|_|jj�|jj�|jj�dS)
NrrQrrRTrSrTrU)rQrU)r
rVrWrr^r_rMrNrlr&rrcrrdrOrerfrgrh)rrirrr	r�s

z%SMTPAUTHInitialResponseSimTests.setUpcCs7|jt_|jj�|jj�|jj�dS)N)	rWr
rVrNrrMrgrerj)rrrr	r �s

z(SMTPAUTHInitialResponseSimTests.tearDowncCsO|jjd�tjt|jdddd�}|jdd�|j�dS)Nz
AUTH PLAINr.rkrr��psu�doesnotexist)rrrr%r&rr/r)rr'rrr	�%testAUTH_PLAIN_initial_response_login�s
zESMTPAUTHInitialResponseSimTests.testAUTH_PLAIN_initial_response_logincCs||jjd�tjt|jdddd�}d|_d|_|jd|j	�\}}|j
�|j|d	�dS)
Nz
AUTH PLAINr.rkrr�rnrorjr-)rrrr%r&rr�r�r9Z
auth_plainrr!)rr'r=Zresponserrr	�$testAUTH_PLAIN_initial_response_auth�s		
zDSMTPAUTHInitialResponseSimTests.testAUTH_PLAIN_initial_response_authN)rErFrGrr rprqrrrr	rm�srmcCs#tjttttttt�dS)N)	rZrun_unittestr�rPrr�rmrr�)�verboserrr	�	test_main�srs�__main__)=rJr�Zemail.mime.textr�Z
email.messagerZemail.base64mimerZ
encode_base64Zemail.utilsr�r
r`rr[r<rXrKrrprdZunittestZtestrrr^�ImportErrorr&�platformr
ZSMTPChannelrZTestCaserrOr�r�Z
skipUnlessrPr�r�r�r�r�r�r��	Exceptionr�r�rrrrWr^rkrirlrmZreap_threadsrsrErrrr	�<module>s~
	_�f��r-