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-2.pyc



���]	��@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�1/opt/alt/python35/lib64/python3.5/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�)�listen�set�accept�socket�timeout�select�send�close)
�evt�buf�serv�conn�addr�n�r�w�e�sentrrr	�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)rr!)rrrr	�tearDownAszGeneralTests.tearDowncCs)d}d}|j|tj|��dS)Nzabc
.jkl
foo
..bluezabc
..jkl
foo
...blue)�assertEqualr!Z	quotedata)rZteststr�expectedrrr	�
testQuoteDataFszGeneralTests.testQuoteDatacCs0tjd�tjt|j�}|j�dS)Ns220 Hola mundo)r�
reply_withr!�SMTP�HOSTr"r)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(r!r)r*r"r%r-r)rr+rrr	�testSourceAddressQs

	zGeneralTests.testSourceAddresscCs7tjd�tjdt|jf�}|j�dS)Ns220 Hola mundoz%s:%s)rr(r!r)r*r"r)rr+rrr	�
testBasic2Ys
zGeneralTests.testBasic2cCsItjd�tjt|jdd�}|j|jd�|j�dS)Ns220 Hola mundo�local_hostnameZtesthost)	rr(r!r)r*r"r%r2r)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%r!r)r*r"�sock�
gettimeoutr)rr+rrr	�testTimeoutDefaultfs

zGeneralTests.testTimeoutDefaultcCs�tjd�|jtj��tjd�ztjt|j	dd�}Wdtjd�X|j|j
j��|j�dS)Ns220 Hola mundor4r)
rr(r5rr6r7r!r)r*r"r8r9r)rr+rrr	�testTimeoutNoners

zGeneralTests.testTimeoutNonecCsOtjd�tjt|jdd�}|j|jj�d�|j	�dS)Ns220 Hola mundorr4)
rr(r!r)r*r"r%r8r9r)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(r!r)�set_debuglevelr�captured_stderr�connectr*r"r�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(r!r)r=rr>r?r*r"rr@rArBrCrD)rr+rEr&rrr	�test_debuglevel_2�s


	zGeneralTests.test_debuglevel_2N)�__name__�
__module__�__qualname__r#r$r'r,r0r1r3r:r;r<rFrHrrrr	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�asyncoreZpoll2rLZ
socket_map�is_setrrr�time�sleepZ	close_all)r�serv_evt�
client_evtZpoll_funrrrr	�debugging_server�s&
	
	


rTz&---------- 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���)rVrZ)r�getfqdn�real_getfqdnr�sys�stdout�
old_stdout�io�StringIO�output�	threading�EventrRrS�smtpd�DEBUGSTREAM�old_DEBUGSTREAMZDebuggingServerr*r�getsocknamer"�ThreadrT�thread�start�wait�clear)r�	serv_argsrrr	r#�s"

zDebuggingServerTests.setUpcCs\|jt_|jj�|jj�|jj�|j	t
_tj
j�|jt_
dS)N)r\rr[rSr
rRrlrj�joinr_r]r^rerfrrg)rrrr	r$�s



zDebuggingServerTests.tearDowncCs/tjt|jdddd�}|j�dS)Nr2�	localhostr�)r!r)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)Nr2rprrqr-z	127.0.0.1zcouldn't bind to port %d)rZfind_unused_portr!r)r*r"r%r-r2rr�OSError�errnoZ
EADDRINUSEZskipTest)rr"r+rrrr	r0�sz&DebuggingServerTests.testSourceAddresscCsKtjt|jdddd�}d}|j|j�|�|j�dS)Nr2rprrq��OK)rvrw)r!r)r*r"r%�nooprr)rr+r&rrr	�testNOOPs!zDebuggingServerTests.testNOOPcCsKtjt|jdddd�}d}|j|j�|�|j�dS)Nr2rprrqrv�OK)rvrz)r!r)r*r"r%Zrsetrr)rr+r&rrr	�testRSETs!zDebuggingServerTests.testRSETcCsKtjt|jdddd�}d}|j|j�|�|j�dS)Nr2rprrqrv�
SIZE 33554432
HELP)rvr|)r!r)r*r"r%�ehlorr)rr+r&rrr	�testELHO
s!zDebuggingServerTests.testELHOcCsXtjt|jdddd�}d}|jd�|j|j�|�|j�dS)	Nr2rprrq��EXPN not implementedZEXPN)rr�)r!r)r*r"Zputcmdr%Zgetreplyrr)rr+r&rrr	�testEXPNNotImplementeds
!
z+DebuggingServerTests.testEXPNNotImplementedcCsqtjt|jdddd�}dddf}|j|jd�|�|j|jd�|�|j�dS)	Nr2rprrq�s*Cannot VRFY user, but will accept message sand attempt deliveryznobody@nowhere.com)r!r)r*r"r%�vrfyZverifyrr)rr+r&rrr	�testVRFYs!
zDebuggingServerTests.testVRFYcCsUtjt|jdddd�}|j�d}|j|j�|�|j�dS)Nr2rprrq��Duplicate HELO/EHLO)r�r�)r!r)r*r"Zhelor%rr)rr+r&rrr	�testSecondHELO$s
!
z#DebuggingServerTests.testSecondHELOcCsItjt|jdddd�}|j|j�dd�|j�dS)Nr2rprrqs#Supported commands: EHLO HELO MAIL sRCPT DATA RSET NOOP QUIT VRFY)r!r)r*r"r%�helprr)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 messager2rprrq�John�Sallyg{�G�z�?z%s%s
%s)r!r)r*r"�sendmailrPrQrrrSr
rRrlrb�flush�	MSG_BEGIN�MSG_ENDr%rD)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 messager2rprrqr�r�g{�G�z�?z%s%s
%s�ascii)r!r)r*r"r�rPrQrrrSr
rRrlrbr�r��decoder�r%rD)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.r2rprrqr�r�g{�G�z�?z%s%s
%s)r!r)r*r"r�rPrQrrrSr
rRrlrbr�r�r�r%rD)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 messager2rprrqz<>r�g{�G�z�?z%s%s
%sz^sender: <>$)r!r)r*r"r�rPrQrrrSr
rRrlrbr�r�r�r%rDrerfr@rArBrC)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 messager2rprrq�	from_addrr��to_addrsr�g{�G�z�?zX-Peerz%s%s
%s)�email�mime�text�MIMETextr!r)r*r"�send_messagerPrQrrrSr
rRrlrbr�r�
gethostbynamer��	as_stringr�r%rD)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>�Bccr2rprrqg{�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�r!r)r*r"r�rPrQrrr%rSr
rRrlrbr�rr�r�r�r�rDrerfr@rArBrC�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�r2rprrqg{�G�z�?zX-Peerz%s%s
%sz^sender: foo@bar.com$r��Dinsdalez^recips: .*'{}'.*$)r�r�) r�r�r�r�r!r)r*r"r�rPrQrrrSr
rRrlrbr�rr�r�r�r�r%rDrerfr@rArBrCr�)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�r2rprrqr�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�r!r)r*r"r�rPrQrrrSr
rRrlrbr�rr�r�r�r�r%rDrerfr@rArBrCr�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�r2rprrqg{�G�z�?zX-Peerz%s%s
%sz-^sender: the_rescuers@Rescue-Aid-Society.com$r�r�z^recips: .*'{}'.*$)r�r�) r�r�r�r�r!r)r*r"r�rPrQrrrSr
rRrlrbr�rr�r�r�r�r%rDrerfr@rArBrCr�)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-Bccr2rprrqg{�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�r!r)r*r"r�rPrQrrrSr
rRrlrbr�rr�r�r�r�r%rDrerfr@rArBrCr�)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 +0000r2rprrq)r�r�r�r�r!r)r*r"�assertRaises�
ValueErrorr�r)rr�r+rrr	�#testSendMessageMultipleResentRaisess 










!z8DebuggingServerTests.testSendMessageMultipleResentRaises)rIrJrK�maxDiffr#r$rsr0ryr{r~r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrr	rU�s.
	!"rUc@s(eZdZdd�Zdd�ZdS)�NonConnectingTestscCs?tj�}|jtj|j�|jtj|jd�dS)Nztest msg)r!r)r��SMTPServerDisconnectedr}r)rr+rrr	�testNotConnected*sz#NonConnectingTests.testNotConnectedcCs3|jttjdd�|jttjd�dS)NrpZboguszlocalhost:bogus)r�rtr!r))rrrr	�testNonnumericPort4s
z%NonConnectingTests.testNonnumericPortN)rIrJrKr�r�rrrr	r�(s
r�c@s4eZdZdd�Zdd�Zdd�ZdS)�BadHELOServerTestscCsJtt_tjd�tj|_tj�|_	|j	t_d|_
dS)Ns199 no hello for you!r )rr!rr(r]r^r_r`rarbr")rrrr	r#@s	
zBadHELOServerTests.setUpcCstt_|jt_dS)N)rr!r_r]r^)rrrr	r$Hs	zBadHELOServerTests.tearDowncCs)|jtjtjt|jdd�dS)Nrprq)r�r!ZSMTPConnectErrorr)r*r")rrrr	�testFailingHELOLsz"BadHELOServerTests.testFailingHELON)rIrJrKr#r$r�rrrr	r�=sr�c@sMeZdZddejddZdd�Zdd�Zd	d
�ZdS)�TooLongLineTestss250 OK�.rGs
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�rXrY)r]r^r_r`rarbrcrdrr�AF_INET�SOCK_STREAMr8�
settimeoutrZ	bind_portr"�respdatarirrkrlrm)rZservargsrrr	r#Us
zTooLongLineTests.setUpcCs|jj�|jt_dS)N)rrlr_r]r^)rrrr	r$cs
zTooLongLineTests.tearDowncCs)|jtjtjt|jdd�dS)Nrprq)r�r!�SMTPResponseExceptionr)r*r")rrrr	�testLineTooLonggsz TooLongLineTests.testLineTooLongN)	rIrJrKr!Z_MAXLINEr�r#r$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)rIrJrKrrrr	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>)ro�_extrafeatures�superr��__init__)rZextra_featuresrY�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_emptystringroZreceived_lines�print�reprrerf�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 authenticatedrrGz/501 Syntax: AUTH <mechanism> [initial-response]z_auth_%sr�-�_zQ504 Command parameter not implemented: unsupported  authentication mechanism {!r})rrG)�
seen_greetingr��
extended_smtpr��authenticated_user�split�len�lower�replace�getattrr��AttributeErrorr�r�r�)r�argrYZauth_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�rMr�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��md5)r�r��sim_cram_md5_challenger�r�r��hmacZHMACr�r��	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�	enumerater!rr�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	rs
	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)rIrJrKrrrrrrr
r�r�r�r�r�r�r�r�r�r�rrrr	rrrrrrr)r�r	r�zs4


r�c@sReZdZeZdd�Zdd�Zdd�Zdd�Zd	d
�Z	dS)�
SimSMTPServercOs#g|_tjj|||�dS)N)�_extra_featuresre�
SMTPServerr�)rrYr�rrr	r�1s	zSimSMTPServer.__init__cCs+|j|j|||d|j�|_dS)NrW)�
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)
rIrJrKr�rr�rr!r#rrrrr	r-src@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)
NrrVrrWTrXrYrZ)rVrZ)rr[r\rrcrdrRrSrr*rrhr"rirTrjrkrlrm)rrnrrr	r#Is

zSMTPSimTests.setUpcCs7|jt_|jj�|jj�|jj�dS)N)	r\rr[rSr
rRrlrjro)rrrr	r$Zs

zSMTPSimTests.tearDowncCs/tjt|jdddd�}|j�dS)Nr2rprr�)r!r)r*r"rr)rr+rrr	rsbs!zSMTPSimTests.testBasicc
Cs�tjt|jdddd�}|j|ji�ddddd	dd
dddi}|j�|j|j|�x$|D]}|j|j|��q|W|j	|jd��|j
�dS)
Nr2rprr��expnr��sizeZ20000000ZstarttlsZ	deliverbyr�zunsupported-feature)r!r)r*r"r%�esmtp_featuresr}�
assertTrue�has_extn�assertFalserr)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)Nr2rprr�rvz%s %sr�znobody@nowhere.comi&zNo such user: %s)r!r)r*r"r�items�bytesrr%r�r�rr)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)
Nr2rprr�z%s %srv�
r�zPSU-Members-List�&�No access for you!)r4r5)r!r)r*r"rr-r"rrr.ror%r%rr)	rr+Zlistname�membersZusersr�r0r1r2rrr	�testEXPN�s!
(zSMTPSimTests.testEXPNcCsi|jjd�tjt|jdddd�}|jtdtd�}|j|d
�|j	�dS)Nz
AUTH PLAINr2rprr�rr���Authentication Succeeded)r8r9)
rr#r!r)r*r"�loginr�r%r)rr+rrrr	�testAUTH_PLAIN�s
!zSMTPSimTests.testAUTH_PLAINcCsi|jjd�tjt|jdddd�}|jtdtd�}|j|d
�|j	�dS)Nz
AUTH LOGINr2rprr�rrr8�Authentication Succeeded)r8r<)
rr#r!r)r*r"r:r�r%r)rr+rrrr	�testAUTH_LOGIN�s
!zSMTPSimTests.testAUTH_LOGINcCsi|jjd�tjt|jdddd�}|jtdtd�}|j|d
�|j	�dS)Nz
AUTH CRAM-MD5r2rprr�rrr8�Authentication Succeeded)r8r>)
rr#r!r)r*r"r:r�r%r)rr+rrrr	�testAUTH_CRAM_MD5�s
!zSMTPSimTests.testAUTH_CRAM_MD5cCsi|jjd�tjt|jdddd�}|jtdtd�}|j|d
�|j	�dS)NzAUTH BOGUS PLAIN LOGIN CRAM-MD5r2rprr�rrr8�Authentication Succeeded)r8r@)
rr#r!r)r*r"r:r�r%r)rr+rrrr	�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 {}�	mechanismr2rprr�ZfoorrZauth_r�r�r8�Authentication Succeeded)r8rC)rr#r�ZsubTestr!r)r*r"r}r�r�r�r�r��authr�r%r)rZ	supportedrBr+�methodrrrr	�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)Nr2rprr�rvr&)r!r)r*r"r}r%�assertInr'rrZassertNotInr?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)Nrvsfoo)
r!r)r*r"rxr%r�r�rr)rr+rHrIrrr	�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�r!r�r)r*r"rxrrrr%�	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)
Nr2rprr�z451 Requested action abortedTr�r�ztest message)r!r)r*r"rxrrrr
r��SMTPSenderRefusedr�r5r8)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)
Nr2rprr�z421 closing connectionr�r�ztest messager)r!r)r*r"rxrrrr�rOr�r5r8r%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)Nr2rprr�z250 acceptedz421 closingr�r�ZFrankZGeorgeztest messager��closing)rRrS)r!r)r*r"rxrrrr�ZSMTPRecipientsRefusedr�r5r8r%rZassertDictEqualrLrY)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)rIrJrKr�rr)r�r	�MySimSMTPChannelsrUr2rprr�zJohn@foo.orgz
Sally@foo.orgztest messager)r�rrr!r)r*r"rxr�Z
SMTPDataErrorr�r5r8r%rr)rrUr+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)
Nr2rprrq�smtputf8r�r�r��mail_optionsz
BODY=8BITMIME�SMTPUTF8�options)r!r)r*r"�
addCleanuprr}r(�
does_esmtpr*r)r��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)	Nr2rprrqZAliceuBöbr�uÄlice)
r!r)r*r"r[rr��UnicodeEncodeErrorr�r^)rr+rrr	�"test_send_unicode_without_SMTPUTF8$s
z/SMTPSimTests.test_send_unicode_without_SMTPUTF8N)rIrJrKr#r$rsr,r�r7r;r=r?rArFrJrKrNrPrQrTrVr_rarrrr	r$Fs(	
	
r$c@s:eZdZdd�Zdd�Zdddd�ZdS)�SimSMTPUTF8ServercOs)ddg|_tjj|||�dS)NrYZ8BITMIME)rrerr�)rrYr�rrr	r�.szSimSMTPUTF8Server.__init__c	Cs4|j|j|||d|jd|j�|_dS)NrW�enable_SMTPUTF8)rrrrcr)rrrrrr	r5s	z!SimSMTPUTF8Server.handle_acceptedNcCs:||_||_||_||_||_||_dS)N)Z	last_peer�
last_mailfrom�last_rcpttos�last_message�last_mail_options�last_rcpt_options)rrrrr rXZrcpt_optionsrrr	r!<s					z!SimSMTPUTF8Server.process_message)rIrJrKr�rr!rrrr	rb,srbc@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)NrrVrrWFrcTrXrYrZ)rVrZ)rr[r\rrcrdrRrSrbr*rrhr"rirTrjrkrlrm)rrnrrr	r#Ks

zSMTPUTF8SimTests.setUpcCs7|jt_|jj�|jj�|jj�dS)N)	r\rr[rSr
rRrlrjro)rrrr	r$^s

zSMTPUTF8SimTests.tearDowncCsetjt|jdddd�}|j|j�|j�|j|j�|j|j	d��dS)Nr2rprrqrW)
r!r)r*r"r[rr}r(r\r))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-8r2rprrquJőhnuSállyrXz
BODY=8BITMIMErY)r�r!r)r*r"r[rr�r%rrdrerfrGrgrh)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-8r2rprrquJőrZz
BODY=8BITMIMErYrv�OKuJános)rvrl)rvrl)rvrl)r�r!r)r*r"r[rr}r%r^Zrcptr rrdrerfrGrgrh)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?
            r2rprrqufőo@bar.comz
BODY=8BITMIMErY)rZset_content�textwrap�dedentr!r)r*r"r[rr%r�rrdrerfr�rGrgrh)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 ὠ9rnr2rprrq)
rr!r)r*r"r[rr�r]r�)rrqr+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)rIrJrKr�r#r$rjrkrmrrrsrrrr	riFsrispsudoesnotexistZeolr�c@seZdZdd�ZdS)�!SimSMTPAUTHInitialResponseChannelcCsf|j�}|dj�dkrUt|�dkrU|dtkrU|jd�dS|jd�dS)Nr�plainrGrz235 Okz571 Bad authentication)r�r�r��EXPECTED_RESPONSEr�)rr�rYrrr	r��s
z+SimSMTPAUTHInitialResponseChannel.smtp_AUTHN)rIrJrKr�rrrr	rt�srtc@seZdZeZdS)� SimSMTPAUTHInitialResponseServerN)rIrJrKrtrrrrr	rw�srwc@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)
NrrVrrWTrXrYrZ)rVrZ)rr[r\rrcrdrRrSrwr*rrhr"rirTrjrkrlrm)rrnrrr	r#�s

z%SMTPAUTHInitialResponseSimTests.setUpcCs7|jt_|jj�|jj�|jj�dS)N)	r\rr[rSr
rRrlrjro)rrrr	r$�s

z(SMTPAUTHInitialResponseSimTests.tearDowncCsO|jjd�tjt|jdddd�}|jdd�|j�dS)Nz
AUTH PLAINr2rprr��psu�doesnotexist)rr#r!r)r*r"r: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 PLAINr2rprr�ryrzrur8)rr#r!r)r*r"r�r�rDZ
auth_plainrr%)rr+rH�responserrr	�$testAUTH_PLAIN_initial_response_auth�s		
zDSMTPAUTHInitialResponseSimTests.testAUTH_PLAIN_initial_response_authN)rIrJrKr#r$r{r}rrrr	rx�srxcCs#tjttttttt�dS)N)	rZrun_unittestr�rUrr�rxr$r�)�verboserrr	�	test_main�sr�__main__)=rNr�Zemail.mime.textr�Z
email.messagerZemail.base64mimerZ
encode_base64Zemail.utilsr�rrer!r`r@r]rPrruroZunittestZtestrrrc�ImportErrorr*�platformr
ZSMTPChannelrZTestCaserrTr�r�Z
skipUnlessrUr�r�r�rr�r�r�	Exceptionr�r�rrr$rbrirvrtrwrxZreap_threadsrrIrrrr	�<module>s~
	_�f��r-