Current File : //usr/local/apps/python3/lib/python3.11/test/__pycache__/test_smtplib.cpython-311.opt-1.pyc
�

�Kej���d�ddlZddlZddlmZddlmZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlmZmZddlmZddlmZddlmZddlmZdd	lmZej d
��Z!ej d��Z"ej#d�
��ej$Z$ej%dkrd�Z&e&e"j'_&d�Z(Gd�d��Z)Gd�de)ej*��Z+Gd�de)ej*��Z,d�Z-dZ.dZ/Gd�dej*��Z0Gd�dej*��Z1Gd�dej*��Z2Gd �d!ej*��Z3Gd"�d#ej*��Z4d$d%d&d'�Z5d(Z6d)Z7d*d+gd,gd-�Z8Gd.�d/e9��Z:Gd0�d1e"j'��Z;Gd2�d3e"j<��Z=Gd4�d5ej*��Z>Gd6�d7e=��Z?Gd8�d9ej*��Z@ed:d;�<��ZAGd=�d>e;��ZBGd?�d@e=��ZCGdA�dBej*��ZDeEdCkrejF��dSdS)D�N)�EmailMessage)�body_encode)�support�mock_socket)�hashlib_helper)�
socket_helper)�threading_helper)�warnings_helper)�Mock�asyncore�smtpdT)�module�darwinc��dS�N���selfs �;/usr/local/apps/python3/lib/python3.11/test/test_smtplib.py�handle_exptr's����c� �|���|���	|���\}}d}|rO|dkrItjg|gg��\}}}|r|�|��}	||	d�}|dz}|r|dk�I|���n#t$rYnwxYw|���|���dS#|���|���wxYw)Ni�r�)�listen�set�accept�select�send�close�TimeoutError)
�evt�buf�serv�conn�addr�n�r�w�e�sents
          r�serverr+,s���K�K�M�M�M��G�G�I�I�I���[�[�]�]�
��d�
���	�a�!�e�e��m�B����3�3�G�A�q�!��
!��y�y��~�~���$�%�%�j��
��F�A�
�	�a�!�e�e�	
�
�
�������
�
�
���
����	
�
�
�������	�	�	�	�	��	
�
�
�������	�	�	�	���s*�B)�A(C#�)
B6�3C#�5B6�6C#�#*D
c�\�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�ZdS)�GeneralTestsc�6�tt_d|_dS)N�)r�smtplib�socket�portrs r�setUpzGeneralTests.setUpDs��$�����	�	�	rc�(�tt_dSr)r1r0rs r�tearDownzGeneralTests.tearDownHs
������rc�^�d}d}|�|tj|����dS)Nzabc
.jkl
foo
..bluezabc
..jkl
foo
...blue)�assertEqualr0�	quotedata)r�teststr�expecteds   r�
testQuoteDatazGeneralTests.testQuoteDataMs3��-��3������7�#4�W�#=�#=�>�>�>�>�>rc��tjd��|�t|j��}|���dS)N�220 Hola mundo�r�
reply_with�client�HOSTr2r�rr@s  r�
testBasic1zGeneralTests.testBasic1Rs:����0�1�1�1����T�4�9�-�-���������rc���tjd��|�t|jd���}|�|jd��|���dS)Nr=)z	127.0.0.1i�M)�source_address)rr?r@rAr2r7rErrBs  r�testSourceAddresszGeneralTests.testSourceAddressXsb����0�1�1�1����T�4�9�,?��A�A������.�0D�E�E�E��������rc��tjd��|�t�d|j����}|���dS)Nr=�:r>rBs  r�
testBasic2zGeneralTests.testBasic2`sC����0�1�1�1�������d�i�i�8�9�9���������rc���tjd��|�t|jd���}|�|jd��|���dS)Nr=�testhost)�local_hostname)rr?r@rAr2r7rLrrBs  r�testLocalHostNamezGeneralTests.testLocalHostNamefsW����0�1�1�1����T�4�9�Z��H�H������.�
�;�;�;��������rc��tjd��|�tj����tjd��|�tj��d��	|�t|j��}tjd��n#tjd��wxYw|�|j	�
��d��|���dS)Nr=�)rr?�assertIsNone�getdefaulttimeout�setdefaulttimeoutr7r@rAr2�sock�
gettimeoutrrBs  r�testTimeoutDefaultzGeneralTests.testTimeoutDefaultms�����0�1�1�1����+�7�9�9�:�:�:��%�b�)�)�)�����6�8�8�"�=�=�=�	0��[�[��t�y�1�1�F��)�$�/�/�/�/��K�)�$�/�/�/�/���������/�/�1�1�2�6�6�6��������s�7 B,�,Cc���tjd��|�tj����tjd��	|�t|jd���}tjd��n#tjd��wxYw|�|j	�
����|���dS�Nr=rO��timeout)rr?rPr1rQrRr@rAr2rSrTrrBs  r�testTimeoutNonezGeneralTests.testTimeoutNoneys�����0�1�1�1����&�2�4�4�5�5�5�� ��$�$�$�	+��[�[��t�y�$�[�?�?�F��$�T�*�*�*�*��F�$�T�*�*�*�*�������&�+�0�0�2�2�3�3�3��������s�"B�Bc���tjd��|�t��5|�t
|jd���ddd��dS#1swxYwYdS)Nr=rrX)rr?�assertRaises�
ValueErrorr@rAr2rs r�testTimeoutZerozGeneralTests.testTimeoutZero�s�����0�1�1�1�
�
�
�z�
*�
*�	4�	4��K�K��d�i��K�3�3�3�	4�	4�	4�	4�	4�	4�	4�	4�	4�	4�	4�	4����	4�	4�	4�	4�	4�	4s�#A�A#�&A#c���tjd��|�t|jd���}|�|j���d��|���dSrW)	rr?r@rAr2r7rSrTrrBs  r�testTimeoutValuezGeneralTests.testTimeoutValue�sb����0�1�1�1����T�4�9�b��9�9�������/�/�1�1�2�6�6�6��������rc���tjd��|���}|�d��t	j��5}|�t|j��ddd��n#1swxYwY|�	��tjdtj��}|�
|���|��dS)N�220 Hello worldrz	^connect:�rr?r@�set_debuglevelr�captured_stderr�connectrAr2r�re�compile�	MULTILINE�assertRegex�getvalue�rr@�stderrr:s    r�test_debuglevelzGeneralTests.test_debuglevel�s�����1�2�2�2����������a� � � �
�
$�
&�
&�	,�&��N�N�4���+�+�+�	,�	,�	,�	,�	,�	,�	,�	,�	,�	,�	,����	,�	,�	,�	,��������:�l�B�L�9�9��������*�*�H�5�5�5�5�5��!A>�>B�Bc���tjd��|���}|�d��t	j��5}|�t|j��ddd��n#1swxYwY|�	��tjdtj��}|�
|���|��dS)Nrb�z#^\d{2}:\d{2}:\d{2}\.\d{6} connect: rcrls    r�test_debuglevel_2zGeneralTests.test_debuglevel_2�s�����1�2�2�2����������a� � � �
�
$�
&�
&�	,�&��N�N�4���+�+�+�	,�	,�	,�	,�	,�	,�	,�	,�	,�	,�	,����	,�	,�	,�	,��������:�D� �l�,�,��������*�*�H�5�5�5�5�5roN)�__name__�
__module__�__qualname__r3r5r;rCrFrIrMrUrZr^r`rnrrrrrr-r-Bs���������� � � �
?�?�?�
������������
�
�
�	�	�	�4�4�4�
���6�6�6�	6�	6�	6�	6�	6rr-c��eZdZejZdS)�SMTPGeneralTestsN)rsrtrur0�SMTPr@rrrrwrw�s������
�\�F�F�Frrwc�t��eZdZejZejee	d��d��d���Z
�fd�Z�xZS)�LMTPGeneralTests�AF_UNIXz test requires Unix domain socketc�F�d}tjd��	|�||j��}tjd��n#tjd��wxYw|�|j�����|���dS)N�!/some/local/lmtp/delivery/programrb)	rr?r@r2rRrPrSrTr)r�
local_hostr@s   r�"testUnixDomainSocketTimeoutDefaultz3LMTPGeneralTests.testUnixDomainSocketTimeoutDefault�s���8�
���1�2�2�2�	0��[�[��T�Y�7�7�F��)�$�/�/�/�/��K�)�$�/�/�/�/�������&�+�0�0�2�2�3�3�3��������s�A�Ac����t�����d}|�t��5|�|d���ddd��dS#1swxYwYdS)Nr}rrX)�superr^r\r]r@)rr~�	__class__s  �rr^z LMTPGeneralTests.testTimeoutZero�s����
�����!�!�!�8�
�
�
�
�z�
*�
*�	/�	/��K�K�
�A�K�.�.�.�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/����	/�	/�	/�	/�	/�	/s�A#�#A'�*A')
rsrtrur0�LMTPr@�unittest�
skipUnless�hasattrr1rr^�
__classcell__�r�s@rrzrz�sv�������
�\�F��X������3�3�5W�X�X���Y�X��/�/�/�/�/�/�/�/�/rrzc�0�|���	ttd��r
tj}ntj}d}tjr\|dkrV|dtj��|���r|���n|dz}tjr|dk�Vn#t$rYnwxYw|���s(tjd��|���t���|���dS#|���s(tjd��|���t���|���wxYw)N�polli�r�{�G�z�?rg�?)
rr�rr�poll2r��
socket_map�is_setrr �time�sleep�	close_all)r#�serv_evt�
client_evt�poll_funr&s     r�debugging_serverr��sr���L�L�N�N�N���6�6�"�"�	%��~�H�H��}�H����!�		�a�!�e�e��H�T�8�.�/�/�/�� � �"�"�
��
�
�����
��F�A��!�		�a�!�e�e����
�
�
���
����� � �"�"�	��J�s�O�O�O��J�J�L�L�L����������������� � �"�"�	��J�s�O�O�O��J�J�L�L�L����������������s+�BB/�.D*�/
B<�9D*�;B<�<D*�*A+Fz&---------- MESSAGE FOLLOWS ----------
z&------------ END MESSAGE ------------
c��eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�ZdS)�DebuggingServerTestsNc�j�tj��|_tj|_tjt_tj|_	tj��|_|jt_tj��|_tj��|_t"j|_tj��t"_t"�t*dfdd���|_|jj���dd�\|_|_|j|j|jf}tjt6|���|_|j���|j���|j���dS)Nr��nowhere���T��decode_datarq��target�args) r	�threading_setup�
thread_keyr1�getfqdn�real_getfqdnr�sys�stdout�
old_stdout�io�StringIO�output�	threading�Eventr�r�r
�DEBUGSTREAM�old_DEBUGSTREAM�DebuggingServerrAr#�getsockname�hostr2�Threadr��thread�start�wait�clear�r�	serv_argss  rr3zDebuggingServerTests.setUp�s;��*�:�<�<���"�N���$�,����*����k�m�m����[��
�!��)�)��
�#�/�+�+���$�0����K�M�M����)�)�4��)�_�6:�*�<�<��	� $�y�/�;�;�=�=�b�q�b�A���	�4�9��Y��
�t��?�	��&�.>�Y�O�O�O����������	
�
�������
�������rc��|jt_|j���|j���tj|j	��|j
t_tj���|jt_|`	|���tj|j�dSr)r�r1r�r�rr�r�r	�join_threadr�r�r�r�r
r�rr��
doCleanups�threading_cleanupr�rs rr5zDebuggingServerTests.tearDowns����*�����������
�������$�T�[�1�1�1��_��
�
����!�!�!� �0����K��������*�D�O�<�<�<�<rc��|j���}tjdd|tjtjz���S)Nz(.*?)^X-Peer:\s*\S+\n(.*)z\1\2)�flags)r�rkrg�subri�DOTALL)r�test_outputs  r�get_output_without_xpeerz-DebuggingServerTests.get_output_without_xpeersE���k�*�*�,�,���v�2�G�!���b�i�)?�A�A�A�	Arc��tjt|jdtj���}|���dS�N�	localhost�rLrY�r0rxrAr2r�LOOPBACK_TIMEOUT�quit�r�smtps  r�	testBasiczDebuggingServerTests.testBasic�7���|�D�$�)�K�$+�$<�>�>�>���	�	�����rc���tj��}	tj|j|jdtj|j|f���}|�|j	��|�
|j|j|f��|�
|jd��|�
��dS#t$r3}|jtjkr|�d|z���d}~wwxYw)Nr�)rLrYrEzcouldn't bind to source port %d)r�find_unused_portr0rxr�r2rr��
addCleanuprr7rErLr��OSError�errno�
EADDRINUSE�skipTest)r�src_portr�r)s    rrFz&DebuggingServerTests.testSourceAddress"s��� �1�3�3��	��<��	�4�9�[�(/�(@�04�	�8�/D�F�F�F�D�
�O�O�D�J�'�'�'����T�0�4�9�h�2G�H�H�H����T�0�+�>�>�>��I�I�K�K�K�K�K���	�	�	��w�%�*�*�*��
�
�?�(�J�K�K�K������	���s�BB6�6
C3�.C.�.C3c��tjt|jdtj���}|�|j��d}|�|�	��|��|�
��dS�Nr�r���sOK)r0rxrAr2rr�r�rr7�noopr��rr�r:s   r�testNOOPzDebuggingServerTests.testNOOP2�n���|�D�$�)�K�$+�$<�>�>�>������
�#�#�#�����������h�/�/�/��	�	�����rc��tjt|jdtj���}|�|j��d}|�|�	��|��|�
��dSr�)r0rxrAr2rr�r�rr7�rsetr�r�s   r�testRSETzDebuggingServerTests.testRSET:r�rc��tjt|jdtj���}|�|j��d}|�|�	��|��|�
��dS)Nr�r�)r�s
SIZE 33554432
HELP)r0rxrAr2rr�r�rr7�ehlor�r�s   r�testELHOzDebuggingServerTests.testELHOBsn���|�D�$�)�K�$+�$<�>�>�>������
�#�#�#�2����������h�/�/�/��	�	�����rc�8�tjt|jdtj���}|�|j��d}|�d��|�	|�
��|��|���dS)Nr�r�)i�sEXPN not implemented�EXPN)r0rxrAr2rr�r�r�putcmdr7�getreplyr�r�s   r�testEXPNNotImplementedz+DebuggingServerTests.testEXPNNotImplementedKs����|�D�$�)�K�$+�$<�>�>�>������
�#�#�#�1�����F������������(�3�3�3��	�	�����rc��tjt|jdtj���}|�|j��|�t��5}|�
d��ddd��n#1swxYwY|�dt|j
����|���dS)Nr�r�zhelo
X-INJECTED�prohibited newline characters)r0rxrAr2rr�r�rr\r]r��assertIn�str�	exceptionr�)rr��excs   r�&test_issue43124_putcmd_escapes_newlinez;DebuggingServerTests.test_issue43124_putcmd_escapes_newlineUs����|�D�$�)�K�$+�$<�>�>�>������
�#�#�#�
�
�
�z�
*�
*�	,�c��K�K�*�+�+�+�	,�	,�	,�	,�	,�	,�	,�	,�	,�	,�	,����	,�	,�	,�	,��
�
�5�s�3�=�7I�7I�J�J�J��	�	�����s�!B�B�
Bc�b�tjt|jdtj���}|�|j��d}|�|�	d��|��|�|�
d��|��|���dS)Nr�r�)�s>Cannot VRFY user, but will accept message and attempt delivery�nobody@nowhere.com)r0rxrAr2rr�r�rr7�vrfy�verifyr�r�s   r�testVRFYzDebuggingServerTests.testVRFY_s����|�D�$�)�K�$+�$<�>�>�>������
�#�#�#�2��������#7�8�8�(�C�C�C�������%9�:�:�H�E�E�E��	�	�����rc�6�tjt|jdtj���}|�|j��|���d}|�	|���|��|�
��dS)Nr�r�)i�sDuplicate HELO/EHLO)r0rxrAr2rr�r�r�helor7r�r�s   r�testSecondHELOz#DebuggingServerTests.testSecondHELOis}���|�D�$�)�K�$+�$<�>�>�>������
�#�#�#��	�	����0����������h�/�/�/��	�	�����rc�
�tjt|jdtj���}|�|j��|�|�	��d��|�
��dS)Nr�r�s@Supported commands: EHLO HELO MAIL RCPT DATA RSET NOOP QUIT VRFY)r0rxrAr2rr�r�rr7�helpr�r�s  r�testHELPzDebuggingServerTests.testHELPtsv���|�D�$�)�K�$+�$<�>�>�>������
�#�#�#���������'G�	H�	H�	H��	�	�����rc�*�d}tjt|jdtj���}|�|j��|�dd|��tj
d��|���|j�
��|j���|j���t$�|�dt&��}|�|j���|��dS)N�A test messager�r��John�Sallyr��
�r0rxrAr2rr�r�r�sendmailr�r�r�r�rr�r�r��flush�	MSG_BEGIN�MSG_ENDr7rk�r�mr��mexpects    r�testSendzDebuggingServerTests.testSend|s������|�D�$�)�K�$+�$<�>�>�>������
�#�#�#��
�
�f�g�q�)�)�)�	
�
�4�����	�	������������
������������� )�	�1�1�1�g�g�6�������-�-�/�/��9�9�9�9�9rc�P�d}tjt|jdtj���}|�|j��|�dd|��tj
d��|���|j�
��|j���|j���t$�|�d���dt(��}|�|j���|��dS)	NsA test messager�r�r�r�r��asciir)r0rxrAr2rr�r�rrr�r�r�r�rr�r�r�rr�decoderr7rkrs    r�testSendBinaryz#DebuggingServerTests.testSendBinary�s������|�D�$�)�K�$+�$<�>�>�>������
�#�#�#��
�
�f�g�q�)�)�)��
�4�����	�	������������
������������� )�	�1�8�8�G�+<�+<�+<�+<�g�g�F�������-�-�/�/��9�9�9�9�9rc�*�d}tjt|jdtj���}|�|j��|�dd|��tj
d��|���|j�
��|j���|j���t$�|�dt&��}|�|j���|��dS)Nz.A test
.mes.sage.r�r�r�r�r�rrrs    r�testSendNeedingDotQuotez,DebuggingServerTests.testSendNeedingDotQuote�s���!���|�D�$�)�K�$+�$<�>�>�>������
�#�#�#��
�
�f�g�q�)�)�)��
�4�����	�	������������
������������� )�	�1�1�1�g�g�6�������-�-�/�/��9�9�9�9�9rc�0�d}tjt|jdtj���}|�|j��|�t��5}|�
dd|��ddd��n#1swxYwY|�dt|j
����tjd��|���t"j���}|�d|��dS)	N�wazzuuup
linetwoz
hi
X-INJECTEDr��	hi@me.com�
you@me.comz2prohibited newline characters: ehlo hi\nX-INJECTEDr�z
X-INJECTED)r0rxrAr2rr�r�rr\r]rr�r�r�r�r�r�r
r�rk�assertNotIn)rrr�r��debugouts     r�$test_issue43124_escape_localhostnamez9DebuggingServerTests.test_issue43124_escape_localhostname�s3��
 ���|�D�$�)�<L�$+�$<�>�>�>������
�#�#�#�
�
�
�z�
*�
*�	8�c��M�M�+�|�Q�7�7�7�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8����	8�	8�	8�	8��
�
�A���
���	
�	
�	
�
	
�
�4�����	�	�����$�-�-�/�/������x�0�0�0�0�0s�#B�B�Bc��d}tjt|jdtj���}|�|j��|�dd|��|�	t��5}|�dddg��ddd��n#1swxYwYt|j
��}|�d|��|�d	|��tjd
��|���t$j���}|�d|��|�d|��|�d
|��|�d|��dS)Nrr�r�rrzX-OPTION
X-INJECTED-1zX-OPTION2
X-INJECTED-2r�z.X-OPTION\nX-INJECTED-1 X-OPTION2\nX-INJECTED-2r�zX-OPTIONz	X-OPTION2zX-INJECTED-1zX-INJECTED-2)r0rxrAr2rr�r�rrr\r]�mailr�r�r�r�r�r�r
r�rkr)rrr�r��msgrs      r�test_issue43124_escape_optionsz3DebuggingServerTests.test_issue43124_escape_options�s���
 ���|��$�)�K��,�.�.�.��	
����
�#�#�#��
�
�k�<��3�3�3�
�
�
�z�
*�
*�	Z�c��I�I�k�$<�>W�#X�Y�Y�Y�	Z�	Z�	Z�	Z�	Z�	Z�	Z�	Z�	Z�	Z�	Z����	Z�	Z�	Z�	Z��#�-� � ���
�
�5�s�;�;�;��
�
�H�#�N�N�N��
�4�����	�	�����$�-�-�/�/������X�.�.�.�����h�/�/�/������2�2�2������2�2�2�2�2s�:B�B#�&B#c���d}tjt|jdtj���}|�|j��|�dd|��tj
d��|���|j�
��|j���|j���t$�|�dt&��}|�|j���|��t,j���}t1jdt0j��}|�||��dS)	Nr�r�r�z<>r�r�rz^sender: <>$)r0rxrAr2rr�r�rrr�r�r�r�rr�r�r�rrrr7rkr
r�rgrhrirj)rrr�rr�senders      r�testSendNullSenderz'DebuggingServerTests.testSendNullSender�s)�����|�D�$�)�K�$+�$<�>�>�>������
�#�#�#��
�
�d�G�Q�'�'�'��
�4�����	�	������������
������������� )�	�1�1�1�g�g�6�������-�-�/�/��9�9�9��$�-�-�/�/����N�B�L�9�9������6�*�*�*�*�*rc��tjj�d��}t	jt|jdtj	���}|�
|j��|�|dd���tjd��|���|j���|j���|j���|���}|d=t.�|����d	t2��}|�||��dS)
Nr�r�r�r�r���	from_addr�to_addrsr��X-Peerr)�email�mime�text�MIMETextr0rxrAr2rr�r�r�send_messager�r�r�r�rr�r�r�rr�r�	as_stringrr7)rrr�r�rs     r�testSendMessagez$DebuggingServerTests.testSendMessage�s���J�O�$�$�%5�6�6���|�D�$�)�K�$+�$<�>�>�>������
�#�#�#����!�v���@�@�@��
�4�����	�	������������
�������������
�3�3�5�5��
�h�K� )�	�1�;�;�=�=�=�=�'�'�B������g�.�.�.�.�.rc�4�tjj�d��}d|d<d|d<d|d<d|d	<t	jt|jd
tj	���}|�
|j��|�|��tjd��|���|�|d	d��|j���|j���|j���|���}|d
=|d	=t0�|����dt4��}|�||��t6j���}t=jdt<j ��}|�!||��dD]J}t=jd�"|��t<j ��}|�!||���KdS)Nr��foo@bar.com�Fromr��To�Sally, Fred�CC�?John Root <root@localhost>, "Dinsdale" <warped@silly.walks.com>�Bccr�r�r�r"r�^sender: foo@bar.com$)r�r��Fredzroot@localhostzwarped@silly.walks.com�^recips: .*'{}'.*$)#r#r$r%r&r0rxrAr2rr�r�rr'r�r�r�r7r�rr�r�r�rr�rr(rr
r�rkrgrhrirj�format�	rrr�r�rrrr%�to_addrs	         r�testSendMessageWithAddressesz1DebuggingServerTests.testSendMessageWithAddressess����J�O�$�$�%5�6�6��!��&�	���$����$��T��%���|�D�$�)�K�$+�$<�>�>�>������
�#�#�#����!�����
�4�����	�	��������5��$?�	@�	@�	@�	
��������
��������������3�3�5�5��
�h�K�
�e�H� )�	�1�;�;�=�=�=�=�'�'�B������g�.�.�.��$�-�-�/�/����3�R�\�B�B������6�*�*�*�/�	0�	0�D��j�!6�!=�!=�d�!C�!C�!#��/�/�G����X�w�/�/�/�/�		0�	0rc���tjj�d��}d|d<d|d<t	jt|jdtj	���}|�
|j��|�|��tjd��|���|j���|j���|j���|���}|d	=t.�|����d
t2��}|�||��t6j���}t=jdt<j ��}|�!||��dD]J}t=jd
�"|��t<j ��}|�!||���KdS)Nr�r+r,�John, Dinsdaler-r�r�r�r"rr2�r��Dinsdaler4�#r#r$r%r&r0rxrAr2rr�r�rr'r�r�r�r�rr�r�r�rr�rr(rr7r
r�rkrgrhrirjr5r6s	         r� testSendMessageWithSomeAddressesz5DebuggingServerTests.testSendMessageWithSomeAddresses*s����J�O�$�$�%5�6�6��!��&�	�"��$���|�D�$�)�K�$+�$<�>�>�>������
�#�#�#����!�����
�4�����	�	������������
��������������3�3�5�5��
�h�K� )�	�1�;�;�=�=�=�=�'�'�B������g�.�.�.��$�-�-�/�/����3�R�\�B�B������6�*�*�*�(�	0�	0�D��j�!6�!=�!=�d�!C�!C�!#��/�/�G����X�w�/�/�/�/�	0�	0rc�R�tjj�d��}d|d<d|d<t	jt|jdtj	���}|�
|j��|�|dd	�
��tjd��|���|j���|j���|j���|���}|d=t.�|����d
t2��}|�||��t6j���}t=jdt<j ��}|�!||��dD]J}t=jd�"|��t<j ��}|�#||���Kt=jdt<j ��}	|�!||	��dS)Nr�r+r,r:r-r�r�zjoe@example.comzfoo@example.netrr�r"rz^sender: joe@example.com$r;r4z^recips: .*'foo@example.net'.*$)$r#r$r%r&r0rxrAr2rr�r�rr'r�r�r�r�rr�r�r�rr�rr(rr7r
r�rkrgrhrirjr5�assertNotRegex)
rrr�r�rrrr%r7�recips
          r�%testSendMessageWithSpecifiedAddressesz:DebuggingServerTests.testSendMessageWithSpecifiedAddressesGs����J�O�$�$�%5�6�6��!��&�	�"��$���|�D�$�)�K�$+�$<�>�>�>������
�#�#�#����!�'8�CT��U�U�U��
�4�����	�	������������
��������������3�3�5�5��
�h�K� )�	�1�;�;�=�=�=�=�'�'�B������g�.�.�.��$�-�-�/�/����7���F�F������6�*�*�*�(�	3�	3�D��j�!6�!=�!=�d�!C�!C�!#��/�/�G�����'�2�2�2�2��
�=�r�|�L�L������5�)�)�)�)�)rc���tjj�d��}d|d<d|d<d|d<t	jt|jdtj	�	��}|�
|j��|�|��tjd
��|���|j���|j���|j���|���}|d=t.�|����dt2��}|�||��t6j���}t=jd
t<j ��}|�!||��dD]J}t=jd�"|��t<j ��}|�!||���KdS)Nr�zBernard, Biancar,z#the_rescuers@Rescue-Aid-Society.com�Senderr:r-r�r�r�r"rz-^sender: the_rescuers@Rescue-Aid-Society.com$r;r4r=r6s	         r�testSendMessageWithMultipleFromz4DebuggingServerTests.testSendMessageWithMultipleFromfs����J�O�$�$�%5�6�6��%��&�	�;��(��"��$���|�D�$�)�K�$+�$<�>�>�>������
�#�#�#����!�����
�4�����	�	������������
��������������3�3�5�5��
�h�K� )�	�1�;�;�=�=�=�=�'�'�B������g�.�.�.��$�-�-�/�/����K�R�\�Z�Z������6�*�*�*�(�	0�	0�D��j�!6�!=�!=�d�!C�!C�!#��/�/�G����X�w�/�/�/�/�	0�	0rc�*�tjj�d��}d|d<d|d<d|d<d|d	<d
|d<d|d
<d|d<d|d<t	jt|jdtj	���}|�
|j��|�|��tjd��|���|j���|j���|j���|d	=|d=|���}|d=t.�|����dt2��}|�||��t6j���}t=jdt<j ��}|�!||��dD]J}t=jd�"|��t<j ��}|�!||���KdS)Nr�r+r,r�r-r.r/r0r1�Thu, 1 Jan 1970 17:42:00 +0000�Resent-Date�holy@grail.net�Resent-From�&Martha <my_mom@great.cooker.com>, Jeff�	Resent-To�doe@losthope.net�
Resent-Bccr�r�r�r"rz^sender: holy@grail.net$)zmy_mom@great.cooker.com�JeffrMr4r=r6s	         r�testSendMessageResentz*DebuggingServerTests.testSendMessageResent�s����J�O�$�$�%5�6�6��!��&�	���$����$��T��%��;��-��+��-��A��+��,��,���|�D�$�)�K�$+�$<�>�>�>������
�#�#�#����!�����
�4�����	�	������������
�������������
�e�H�
�l�O��3�3�5�5��
�h�K� )�	�1�;�;�=�=�=�=�'�'�B������g�.�.�.��$�-�-�/�/����6���E�E������6�*�*�*�K�	0�	0�D��j�!6�!=�!=�d�!C�!C�!#��/�/�G����X�w�/�/�/�/�	0�	0rc��tjj�d��}d|d<d|d<d|d<d|d	<d
|d<d|d
<d|d<d|d<d|d<d|d<d|d
<t	jt|jdtj	���}|�
|j��|�t��5|�|��ddd��n#1swxYwY|���dS)Nr�r+r,r�r-r.r/r0r1rGrHrIrJrKrLrMrNzThu, 2 Jan 1970 17:42:00 +0000r�r�)r#r$r%r&r0rxrAr2rr�r�rr\r]r'�rrr�s   r�#testSendMessageMultipleResentRaisesz8DebuggingServerTests.testSendMessageMultipleResentRaises�sG���J�O�$�$�%5�6�6��!��&�	���$����$��T��%��;��-��+��-��A��+��,��,��;��-��)��+��C��-���|�D�$�)�K�$+�$<�>�>�>������
�#�#�#�
�
�
�z�
*�
*�	!�	!����a� � � �	!�	!�	!�	!�	!�	!�	!�	!�	!�	!�	!����	!�	!�	!�	!��
�
�����s�<C�C"�%C")rsrtru�maxDiffr3r5r�r�rFr�r�r�r�r�r�r�r�r	r
rrrrr)r8r>rBrErPrSrrrr�r��s��������G����6=�=�=� A�A�A�
������ ������������������	�	�	����:�:�:�&:�:�:� :�:�:�"1�1�1�(3�3�3�2+�+�+�&/�/�/�,"0�"0�"0�H0�0�0�:*�*�*�>0�0�0�<#0�#0�#0�J����rr�c� �eZdZd�Zd�Zd�ZdS)�NonConnectingTestsc���tj��}|�tj|j��|�tj|jd��dS)Nztest msg)r0rxr\�SMTPServerDisconnectedr�rr�s  r�testNotConnectedz#NonConnectingTests.testNotConnected�sX��
�|�~�~�����'�8�$�)�D�D�D����'�8��)�Z�	1�	1�	1�	1�	1rc��|�ttjdd��|�ttjd��dS)Nr��boguszlocalhost:bogus)r\r�r0rxrs r�testNonnumericPortz%NonConnectingTests.testNonnumericPort�sP�����'�7�<�%�w�	0�	0�	0����'�7�<�+�	-�	-�	-�	-�	-rc��tj��5}|�|j��ddd��dS#1swxYwYdSr)r0rxrPrSr�s  r�testSockAttributeExistsz*NonConnectingTests.testSockAttributeExists�s����\�^�^�	)�t����d�i�(�(�(�	)�	)�	)�	)�	)�	)�	)�	)�	)�	)�	)�	)����	)�	)�	)�	)�	)�	)s�<�A�AN)rsrtrurYr\r^rrrrVrV�sA������1�1�1�-�-�-�)�)�)�)�)rrVc� �eZdZd�Zd�Zd�ZdS)�DefaultArgumentsTestsc��t��|_d|jd<tj��|_td���|j_t��t��c|j_|j_dS)N�Páolo <főo@bar.com>r,)���OK)�return_value)	rrr0rxr�rr��has_extnrrs rr3zDefaultArgumentsTests.setUp�s^���>�>���2������L�N�N��	��;�7�7�7��	��15������.��	��D�I�.�.�.rc�b�d}|j�|j��|j�|j��|�|jjjddd|��|�|jjjddd|��dS)N)�SMTPUTF8�
BODY=8BITMIMEr�r�r�r'rr7r�call_args_list)r�expected_mail_optionss  rr)z%DefaultArgumentsTests.testSendMessage�s��� =���	���t�x�(�(�(��	���t�x�(�(�(������+�:�1�=�a�@��C�.�	0�	0�	0������+�:�1�=�a�@��C�.�	0�	0�	0�	0�	0rc���dg}d}|j�|jdd|��|�|dg��|�|jjjddd|��dS)N�STARTTLS)rorhrirrjrk)r�mail_optionsrms   r�testSendMessageWithMailOptionsz4DefaultArgumentsTests.testSendMessageWithMailOptions�s���"�|�� I���	���t�x��t�\�B�B�B�����
�|�4�4�4������+�:�1�=�a�@��C�.�	0�	0�	0�	0�	0rN)rsrtrur3r)rqrrrr`r`�sD������@�@�@�0�0�0�0�0�0�0�0rr`c� �eZdZd�Zd�Zd�ZdS)�BadHELOServerTestsc���tt_tjd��tj|_tj��|_	|j	t_d|_
dS)Ns199 no hello for you!r/)rr0r1r?r�r�r�r�r�r�r2rs rr3zBadHELOServerTests.setUp�sE��$�����7�8�8�8��*����k�m�m����[��
���	�	�	rc�J�tt_|jt_dSr)r1r0r�r�r�rs rr5zBadHELOServerTests.tearDown�s������_��
�
�
rc�v�|�tjtjt|jdd��dS�Nr�rj)r\r0�SMTPConnectErrorrxrAr2rs r�testFailingHELOz"BadHELOServerTests.testFailingHELOs8�����'�2�G�L� �$�)�[�!�	=�	=�	=�	=�	=rN)rsrtrur3r5ryrrrrsrs�sA���������%�%�%�=�=�=�=�=rrsc�F�eZdZddejzdzzdzZd�Zd�Zd�ZdS)	�TooLongLineTestss250 OK�.rq�
c��tj��|_tj|_t
j��|_|jt_tj
��|_tjtj
tj��|_|j�d��t#j|j��|_|j|j|jf}tjt,|���|_|j���|j���|j���dS)N�r�)r	r�r�r�r�r�r�r�r�r�r�r!r1�AF_INET�SOCK_STREAMrS�
settimeoutr�	bind_portr2�respdatar�r+r�r�r�r�)r�servargss  rr3zTooLongLineTests.setUp
s���*�:�<�<����*����k�m�m����[��
��?�$�$����M�&�.�&�2D�E�E��	��	���R� � � �!�+�D�I�6�6��	��H�d�m�T�Y�7���&�f�8�D�D�D������������
�
������������rc���|j���|jt_tj|j��|`|���tj	|j
�dSr)r!r�r�r�r�r	r�r�r�r�r�rs rr5zTooLongLineTests.tearDownsX����
�
�����_��
��$�T�[�1�1�1��K��������*�D�O�<�<�<�<rc�v�|�tjtjt|jdd��dSrw)r\r0�SMTPResponseExceptionrxrAr2rs r�testLineTooLongz TooLongLineTests.testLineTooLong"s8�����'�7�����	�;��	;�	;�	;�	;�	;rN)	rsrtrur0�_MAXLINEr�r3r5r�rrrr{r{s]�������D�7�#3�3�a�7�8�5�@�H���� =�=�=�;�;�;�;�;rr{zJohn AzSally BzRuth C)�Mr.A@somewhere.com�Ms.B@xn--fo-fka.com�Mrs.C@somewhereesle.com)r��somepasswordz<PENCeUxFREJoU0NnbmhNWitOMjNGNndAZWx3b29kLmlubm9zb2Z0LmNvbT4=r�r�r�)zlist-1zlist-2c��eZdZdS)�ResponseExceptionN)rsrtrurrrr�r�4s�������rr�c����eZdZdZdZdZdZdZdZdZ	dZ
dZ�fd�Z�fd�Z
d�Zd�Zd�Zdd	�Zdd
�Zdd�Zdd�Zd
�Zd�Zd�Z�fd�Z�fd�Z�fd�Z�fd�Z�fd�Zd�Z�xZS)�SimSMTPChannelNr�cc���d�d�|D����|_tt|��j|i|��dS)N�c�8�g|]}d�|����S)z	250-{0}
)r5)�.0�xs  r�
<listcomp>z+SimSMTPChannel.__init__.<locals>.<listcomp>Cs&��?�?�?�!�m�"�"�1�%�%�?�?�?r)�join�_extrafeaturesr�r��__init__)r�extra_featuresr��kwr�s    �rr�zSimSMTPChannel.__init__AsT��� �g�g�?�?�~�?�?�?�A�A���,��n�d�#�#�,�d�9�b�9�9�9�9�9rc����|j|jkr�|j�|j��}tdt
|��tj���g|_	|�	|��nG#t$r:}|j|_|�|j
�d|j����Yd}~nd}~wwxYwdSt�����dS)NzData:)�file� )�
smtp_state�AUTH�_emptystringr��received_lines�print�reprr
r��auth_objectr��COMMAND�push�	smtp_code�
smtp_errorr��found_terminator)r�liner)r�s   �rr�zSimSMTPChannel.found_terminatorGs�����?�d�i�'�'��$�)�)�$�*=�>�>�D��'�4��:�:�E�,=�>�>�>�>�"$�D��
A�� � ��&�&�&�&��$�
A�
A�
A�"&�,����	�	�Q�[�[�[�!�,�,�?�@�@�@�@�@�@�@�@�����
A����
�F�
��� � �"�"�"�"�"s�"A8�8
B<�0B7�7B<c��|js|�d��dS|jr	d|jvr|�d��dS|j�|�d��dS|���}t
|��dvr|�d��dSd|d����d	d
��z}	t||��|_
n9#t$r,|�d�|����YdSwxYw|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)rrqz/501 Syntax: AUTH <mechanism> [initial-response]z_auth_%sr�-�_zQ504 Command parameter not implemented: unsupported  authentication mechanism {!r}rqr)�
seen_greetingr��
extended_smtpr��authenticated_user�split�len�lower�replace�getattrr��AttributeErrorr5r�r�)r�argr��auth_object_names    r�	smtp_AUTHzSimSMTPChannel.smtp_AUTHUs����!�	��I�I�2�3�3�3��F��!�	�V�4�3F�%F�%F��I�I�@�A�A�A��F��"�.��I�I�E�
G�
G�
G��F��y�y�{�{���t�9�9�F�"�"��I�I�G�H�H�H��F�%��Q��
�
���(?�(?��S�(I�(I�I��	�&�t�-=�>�>�D�����	�	�	��I�I�7�7=�v�>N�7O�7O�
Q�
Q�
Q��F�F�	�����)������C��I�I��N�N��a����=�=�=�=�=s�C(�(2D�Dc��|r||_|�d��n|�d��|j|_dS)Nz235 Authentication Succeededz&535 Authentication credentials invalid)r�r�r�r�)r�user�valids   r�_authenticatedzSimSMTPChannel._authenticatednsI���	@�&*�D�#��I�I�4�5�5�5�5��I�I�>�?�?�?��,����rc�v�tj|�d�����d��S)Nr�utf-8)�base64�decodebytes�encoder)r�strings  r�_decode_base64zSimSMTPChannel._decode_base64vs-���!�&�-�-��"8�"8�9�9�@�@��I�I�Irc�d�|�|�d��dS|�|��}	|�d���^}}}nA#t$r4}|�d�||����Yd}~dSd}~wwxYw|�||tdk��dS)Nz334 ��=535 Splitting response {!r} into user and password failed: {}r)r�r�r�r]r5r��sim_auth)rr��logpassr�r��passwordr)s       r�_auth_plainzSimSMTPChannel._auth_plainys����;��I�I�f�������)�)�#�.�.�G�
�%,�]�]�4�%8�%8�"��D�(�(���
�
�
��	�	�(�(.��w��(:�(:�<�<�<�����������
����
����h�(�1�+�&=�>�>�>�>�>s�A
�

B�)B�Bc�<�|�|�d��dSt|d��s1|�|��|_|�d��dS|�|��}|�|j|t
dk��|`dS)Nz334 VXNlcm5hbWU6�_auth_login_userz334 UGFzc3dvcmQ6r)r�r�r�r�r�r�)rr�r�s   r�_auth_loginzSimSMTPChannel._auth_login�s����;��I�I�(�)�)�)�)�)���1�2�2�	&�$(�$7�$7��$<�$<�D�!��I�I�(�)�)�)�)�)��*�*�3�/�/�H����� 5�x�8�A�;�7N�O�O�O��%�%�%rc�0�|�d��dS)Nz334 QnVHZ1liVWdHeQ==)r��rr�s  r�_auth_buggyzSimSMTPChannel._auth_buggy�s��	
�	�	�(�)�)�)�)�)rc�\�|�/|�d�t����dS|�|��}	|���\}}nA#t
$r4}|�d�||����Yd}~dSd}~wwxYwt
jtd�	d��|�t���	d��d���
��}|�|||k��dS)Nz334 {}r�Frr�md5)r�r5�sim_cram_md5_challenger�r�r]�hmac�HMACr�r��	hexdigestr�)rr�r�r��hashed_passr)�valid_hashed_passs       r�_auth_cram_md5zSimSMTPChannel._auth_cram_md5�s+���;��I�I�h�o�o�&<�=�=�>�>�>�>�>��)�)�#�.�.�G�
�$+�M�M�O�O�!��k�k���
�
�
��	�	�'�'-�v�g�q�'9�'9�;�;�;��u�u�u�u�u�����
����!%�	����"�"�7�+�+��#�#�$:�;�;�B�B�7�K�K��!�!�!�y�{�{�
�
����k�5F�&F�G�G�G�G�Gs�A � 
B�*)B�Bc�j�d}||jzdz}|�|��||_d|_dS)NzH250-testhost
250-EXPN
250-SIZE 20000000
250-STARTTLS
250-DELIVERBY
z250 HELPT)r�r�r�r�)rr��resps   r�	smtp_EHLOzSimSMTPChannel.smtp_EHLO�sB��$��
�d�)�)�J�6���	�	�$���� ���!����rc��|tvr:|�dt|�dtj|������dS|�d|z��dS)N�250 r�z550 No such user: %s)�	sim_usersr�r0�	quoteaddrr�s  r�	smtp_VRFYzSimSMTPChannel.smtp_VRFY�s`���)����I�I�I�Y�s�^�^�^�W�5F�s�5K�5K�5K�L�M�M�M�M�M��I�I�,�s�2�3�3�3�3�3rc��|���}|tvr�t|}t|��D]|\}}tj|��}|t|��dz
kr'|�dt|�d|�����V|�dt|�d|�����}dS|�d��dS)Nrz250-r�r�z550 No access for you!)r��	sim_lists�	enumerater0r�r�r�r�)rr��	list_name�	user_listr&�
user_email�quoted_addrs       r�	smtp_EXPNzSimSMTPChannel.smtp_EXPN�s����I�I�K�K�	��	�!�!�!�)�,�I�!*�9�!5�!5�
R�
R�
��:�%�/�
�;�;���s�9�~�~��)�)�)��I�I�I�Y�z�-B�-B�-B�K�K�P�Q�Q�Q�Q��I�I�I�Y�z�-B�-B�-B�K�K�P�Q�Q�Q�Q�
R�
R�
�I�I�.�/�/�/�/�/rc����|j�*tt|���|��dS|�|j��|���dSr)�
quit_responser�r��	smtp_QUITr��close_when_done�rr�r�s  �rr�zSimSMTPChannel.smtp_QUIT�s]�����%��.�$�'�'�1�1�#�6�6�6�6�6��I�I�d�(�)�)�)�� � �"�"�"�"�"rc����|j�#t���|��dS|�|j��|jr|���dSdSr)�
mail_responser��	smtp_MAILr��
disconnectr�r�s  �rr�zSimSMTPChannel.smtp_MAIL�sk�����%��G�G���c�"�"�"�"�"��I�I�d�(�)�)�)���
'��$�$�&�&�&�&�&�
'�
'rc����|j�#t���|��dS|xjdz
c_|�|j|jdz
��dS�Nr)�
rcpt_responser��	smtp_RCPT�
rcpt_countr�r�s  �rr�zSimSMTPChannel.smtp_RCPT�s`�����%��G�G���c�"�"�"��F����1�����	�	�$�$�T�_�Q�%6�7�8�8�8�8�8rc�j��|xjdz
c_t���|��dSr�)�
rset_countr��	smtp_RSETr�s  �rr�zSimSMTPChannel.smtp_RSET�s1������1����
�����#�����rc���|j�#t���|��dS|�|j��dSr)�
data_responser��	smtp_DATAr�r�s  �rrzSimSMTPChannel.smtp_DATA�sE�����%��G�G���c�"�"�"�"�"��I�I�d�(�)�)�)�)�)rc���rrrs r�handle_errorzSimSMTPChannel.handle_error����
rr)rsrtrur�r�r�rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrr�r�s@rr�r�5s���������M��M��M��M��J��J��J�
�D���:�:�:�:�:�#�#�#�#�#�>�>�>�2'�'�'�J�J�J�?�?�?�?�&�&�&�&�*�*�*�*�
H�H�H�H�$	"�	"�	"�4�4�4�0�0�0�#�#�#�#�#�'�'�'�'�'�9�9�9�9�9������*�*�*�*�*�������rr�c�0�eZdZeZd�Zd�Zd�Zd�Zd�Z	dS)�
SimSMTPServerc�V�g|_i|_tjj|g|�Ri|��dSr)�_extra_features�
_addressesr
�
SMTPServerr��rr�r�s   rr�zSimSMTPServer.__init__�s;��!������
��!�$�4��4�4�4��4�4�4�4�4rc�X�|�|j||||j���|_dS)Nr�)�
channel_classr	�_decode_data�_SMTPchannel�rr$r%s   r�handle_acceptedzSimSMTPServer.handle_accepted�s7�� �.�.�� �$��d��)�/�+�+����rc�.�||jd<||jd<dS)N�from�tos)r
)r�peer�mailfrom�rcpttos�datas     r�process_messagezSimSMTPServer.process_message�s ��"*�����!(������rc�:�|j�|��dSr)r	�append)r�features  r�add_featurezSimSMTPServer.add_feature�s����#�#�G�,�,�,�,�,rc���rrrs rrzSimSMTPServer.handle_errorrrN)
rsrtrur�rr�rrrrrrrrr�sd������"�M�5�5�5�
+�+�+�
)�)�)�-�-�-�����rrc��eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
ejdd
���d���Zejdd
���d���Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�ZdS)�SMTPSimTestsc�p�tj��|_tj|_tjt_tj��|_	tj��|_
ttdfdd���|_
|j
j���d|_|j
|j	|j
f}tjt"|���|_|j���|j	���|j	���dS�Nrr�Tr�rr�)r	r�r�r1r�r�rr�r�r�r�rrAr#r�r2r�r�r�r�r�r�r�s  rr3zSMTPSimTests.setUp
s���*�:�<�<���"�N���$�,���!��)�)��
�#�/�+�+���!�4��)�_�$�O�O�O��	��I�$�0�0�2�2�1�5��	��Y��
�t��?�	��&�.>�Y�O�O�O����������	
�
�������
�������rc��|jt_|j���|j���tj|j	��|`	|�
��tj|j�dSr�
r�r1r�r�rr�r�r	r�r�r�r�r�rs rr5zSMTPSimTests.tearDown�r���*�����������
�������$�T�[�1�1�1��K��������*�D�O�<�<�<�<rc��tjt|jdtj���}|���dSr�r�r�s  rr�zSMTPSimTests.testBasic'r�rc���tjt|jdtj���}|�|ji��dddddd�}|���|�|j|��|D]*}|�	|�
|�����+|�|�
d����|���dS)Nr�r�r��20000000)�expn�size�starttls�	deliverbyr�zunsupported-feature)
r0rxrAr2rr�r7�esmtp_featuresr��
assertTruerf�assertFalser�)rr��expected_features�ks    r�testEHLOzSMTPSimTests.testEHLO-s����|�D�$�)�K�$+�$<�>�>�>��	
����,�b�1�1�1�%'�%/�)+�*,�%'�	���	
�	�	��������,�.?�@�@�@�"�	.�	.�A��O�O�D�M�M�!�,�,�-�-�-�-�������'<�=�=�>�>�>��	�	�����rc	���tjt|jdtj���}t���D]W\}}dt|�dtj	|����d��f}|�
|�|��|���Xd}dd|z�d��f}|�
|�|��|��|�
��dS)	Nr�r�r�r�rr��&zNo such user: %s)r0rxrAr2rr�r��items�bytesr�r7r�r�r�)rr��	addr_spec�name�expected_known�u�expected_unknowns       rr�zSMTPSimTests.testVRFYCs����|�D�$�)�K�$+�$<�>�>�>�� )���0�0�	C�	C�O�I�t�!�5�*.�$�$��0A�)�0L�0L�0L�*N�)0�$2�$2�3�N�
���T�Y�Y�y�1�1�>�B�B�B�B� ���"4�q�"8�!@�!@��!I�!I�J��������1���'7�8�8�8��	�	�����rc	�6�tjt|jdtj���}t���D]�\}}g}|D]9}|�t|�dtj
|�������:dtd�|��d��f}|�
|�|��|����d}d}|�
|�|��|��|���dS)	Nr�r�r�r�rrzPSU-Members-List)r5sNo access for you!)r0rxrAr2rr�r�r6rr�r�r7r�r7r*r�)	rr��listname�members�usersrr:r;r<s	         r�testEXPNzSMTPSimTests.testEXPNRs���|�D�$�)�K�$+�$<�>�>�>��"+���!2�!2�	B�	B��H�g��E��
M�
M�����	�!����g�6G��6J�6J�6J�K�L�L�L�L�!�5����5�)9�)9�7�#C�#C�D�N����T�Y�Y�x�0�0�.�A�A�A�A���7��������1���'7�8�8�8��	�	�����rc�>�|j�d��tjt|jdtj���}|�tdtd��}|�
|d��|���dS)N�
AUTH PLAINr�r�rr���sAuthentication Succeeded�r#rr0rxrAr2rr��loginr�r7r�rr�r�s   r�testAUTH_PLAINzSMTPSimTests.testAUTH_PLAINb����	���l�+�+�+��|�D�$�)�K�$+�$<�>�>�>���z�z�(�1�+�x��{�3�3������A�B�B�B��
�
�����rc�>�|j�d��tjt|jdtj���}|�tdtd��}|�
|d��|���dS)N�
AUTH LOGINr�r�rrrDrFrHs   r�testAUTH_LOGINzSMTPSimTests.testAUTH_LOGINjrJrc�|�|j�d��tjt|jdtj���5}t\|_	|_
|�d��|�d|j
d���}|�|d��ddd��dS#1swxYwYdS)	NrLr�r��test_auth_login�LOGINT��initial_response_okrD�r#rr0rxrAr2rr�r�r�r�r��auth�
auth_loginr7rHs   r�"testAUTH_LOGIN_initial_response_okz/SMTPSimTests.testAUTH_LOGIN_initial_response_okrs���	���l�+�+�+�
�\�$��	�+�")�":�<�<�<�	G�?C�'/�$�D�I�t�}��I�I�'�(�(�(��9�9�W�d�o�4�9�P�P�D����T�#E�F�F�F�	G�	G�	G�	G�	G�	G�	G�	G�	G�	G�	G�	G����	G�	G�	G�	G�	G�	G��AB1�1B5�8B5c�|�|j�d��tjt|jdtj���5}t\|_	|_
|�d��|�d|j
d���}|�|d��ddd��dS#1swxYwYdS)	NrLr�r�rOrPFrQrDrSrHs   r�%testAUTH_LOGIN_initial_response_notokz2SMTPSimTests.testAUTH_LOGIN_initial_response_notok{s���	���l�+�+�+�
�\�$��	�+�")�":�<�<�<�	G�?C�'/�$�D�I�t�}��I�I�'�(�(�(��9�9�W�d�o�5�9�Q�Q�D����T�#E�F�F�F�	G�	G�	G�	G�	G�	G�	G�	G�	G�	G�	G�	G����	G�	G�	G�	G�	G�	GrWc�����j�d��d
�fd�	}tjt�jdtj���}	t\|_	|_
|�d��d}��tj
|��5}|�d|d�	��ddd��n#1swxYwY|���dS#|���wxYw)Nz
AUTH BUGGYc�4����d|��dS)Ns
BuGgYbUgGyr�)r7)�	challengers �r�
auth_buggyz/SMTPSimTests.testAUTH_BUGGY.<locals>.auth_buggy�s������]�I�6�6�6��4rr�r��test_auth_buggyz&^Server AUTH mechanism infinite loop.*�BUGGYFrQr)r#rr0rxrAr2rr�r�r�r�r��assertRaisesRegex�
SMTPExceptionrTr)rr]r��expect�cms`    r�testAUTH_BUGGYzSMTPSimTests.testAUTH_BUGGY�sA����	���l�+�+�+�	�	�	�	�	�	��|��$�)�K��,�
�
�
��	�'/�$�D�I�t�}��I�I�'�(�(�(�>�F��'�'��(=�v�F�F�
J�"��	�	�'�:�5�	�I�I�I�
J�
J�
J�
J�
J�
J�
J�
J�
J�
J�
J����
J�
J�
J�
J�
�J�J�L�L�L�L�L��D�J�J�L�L�L�L���s1�AC �B?�3C �?C�C �C�C � C6r�T)�opensslc�>�|j�d��tjt|jdtj���}|�tdtd��}|�
|d��|���dS)Nz
AUTH CRAM-MD5r�r�rrrDrFrHs   r�testAUTH_CRAM_MD5zSMTPSimTests.testAUTH_CRAM_MD5�s���	���o�.�.�.��|�D�$�)�K�$+�$<�>�>�>���z�z�(�1�+�x��{�3�3������A�B�B�B��
�
�����rc�>�|j�d��tjt|jdtj���}|�tdtd��}|�
|d��|���dS)NzAUTH BOGUS PLAIN LOGIN CRAM-MD5r�r�rrrDrFrHs   r�testAUTH_multiplezSMTPSimTests.testAUTH_multiple�s���	
�	���?�@�@�@��|�D�$�)�K�$+�$<�>�>�>���z�z�(�1�+�x��{�3�3������A�B�B�B��
�
�����rc	��ddh}	tj��|�d��n#t$rYnwxYw|D]/}|j�d�|�����0|D�]}|�|���5tj	t|jdtj
���}|�d��td	td
c|_|_d|����dd
��z}|�|t+||����}|�|d��|���ddd��n#1swxYwY��dS)N�PLAINrPzCRAM-MD5zAUTH {})�	mechanismr�r��foorr�auth_r�r�rD)�hashlibr��addr]r#rr5�subTestr0rxrAr2rr�r�r�r�r�r�r�rTr�r7r)r�	supportedrlr��methodr�s      r�test_auth_functionzSMTPSimTests.test_auth_function�s����g�&�	�	&��K�M�M�M�
�M�M�*�%�%�%�%���	�	�	��D�	����#�	?�	?�I��I�!�!�)�"2�"2�9�"=�"=�>�>�>�>�"�
	�
	�I����	��2�2�	
�	
��|�D�$�)�3>�,3�,D�F�F�F���	�	�%� � � �+3�A�;����(��	�4�=� �9�?�?�#4�#4�#<�#<�S�#�#F�#F�F���y�y��G�D�&�,A�,A�B�B��� � ��'I�J�J�J��
�
����	
�	
�	
�	
�	
�	
�	
�	
�	
�	
�	
����	
�	
�	
�	
��
	�
	s�/�
<�<�C E8�8E<	�?E<	c�H�tjt|jdtj���}|���\}}|�|d��|�d|j	��|�
��|�d|j	��|�t|j��|�d|j	��|�
��|�d|j	��|�
��dS)Nr�r�r�r+)r0rxrAr2rr�r�r7r�r.r�rrf�ehlo_or_helo_if_needed�rr��code�messages    r�test_quit_resets_greetingz&SMTPSimTests.test_quit_resets_greeting�s����|�D�$�)�+6�$+�$<�>�>�>���	�	���
��g�����s�#�#�#��
�
�f�d�1�2�2�2��	�	���������!4�5�5�5����T�4�9�%�%�%������!4�5�5�5��#�#�%�%�%��
�
�f�d�1�2�2�2��	�	�����rc��tjt|j��5}|���\}}|�|d��ddd��n#1swxYwY|�tj|jd��tjt|j��5}|�	��ddd��n#1swxYwY|�tj|jd��dS)Nr�sfoo)
r0rxrAr2r�r7r\rXrrrws    r�test_with_statementz SMTPSimTests.test_with_statement�sD��
�\�$��	�
*�
*�	(�d� �I�I�K�K�M�D�'����T�3�'�'�'�	(�	(�	(�	(�	(�	(�	(�	(�	(�	(�	(����	(�	(�	(�	(�	
���'�8�$�)�V�L�L�L�
�\�$��	�
*�
*�	�d��J�J�L�L�L�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	����'�8�$�)�V�L�L�L�L�Ls#�.A�A�!A�*C�C�Cc��|�tj��5}tjt|j��5}|���d|jj_	ddd��n#1swxYwYddd��n#1swxYwY|�
|jjd��|�
|jj
d��dS)Nz421 QUIT FAILED�sQUIT FAILED)r\r0r�rxrAr2r�r#rr�r7r�r�r�)r�errorr�s   r� test_with_statement_QUIT_failurez-SMTPSimTests.test_with_statement_QUIT_failure�sI��
�
�
�w�<�
=�
=�	I����d�D�I�.�.�
I�$��	�	����7H��	�&�4�
I�
I�
I�
I�
I�
I�
I�
I�
I�
I�
I����
I�
I�
I�
I�	I�	I�	I�	I�	I�	I�	I�	I�	I�	I�	I����	I�	I�	I�	I�	
�����2�C�8�8�8������3�^�D�D�D�D�Ds5� B	�&A2�&B	�2A6	�6B	�9A6	�:B	�	B
�B
c��tjt|jdtj���}|���d|jj_	d|jj_
|�tj��5|�
ddd��ddd��n#1swxYwY|�|j��dS)Nr�r�z451 Requested action abortedTr�r��test message)r0rxrAr2rr�r�r#rr�r�r\�SMTPSenderRefusedrrPrSr�s  r�test__rest_from_mail_cmdz%SMTPSimTests.test__rest_from_mail_cmd�s����|�D�$�)�K�$+�$<�>�>�>���	�	����/M��	��,�,0��	��)�
�
�
�w�8�
9�
9�	;�	;��M�M�&�'�>�:�:�:�	;�	;�	;�	;�	;�	;�	;�	;�	;�	;�	;����	;�	;�	;�	;����$�)�$�$�$�$�$s�B&�&B*�-B*c���tjt|jdtj���}|���d|jj_	|�
tj��5|�ddd��ddd��n#1swxYwY|�
|j��|�|jjjd��dS)Nr�r�z421 closing connectionr�r�r�r)r0rxrAr2rr�r�r#rr�r\r�rrPrSr7r�r�s  r�test_421_from_mail_cmdz#SMTPSimTests.test_421_from_mail_cmd�s����|�D�$�)�K�$+�$<�>�>�>���	�	����/G��	��,�
�
�
�w�8�
9�
9�	;�	;��M�M�&�'�>�:�:�:�	;�	;�	;�	;�	;�	;�	;�	;�	;�	;�	;����	;�	;�	;�	;����$�)�$�$�$������/�:�A�>�>�>�>�>s�1B�B�Bc��tjt|jdtj���}|���ddg|jj_	|�
tj��5}|�dgd�d��ddd��n#1swxYwY|�
|j��|�|jjjd��|�|jjdd	d
i��dS)Nr�r�z250 accepted�421 closingr�)r��Frank�Georger�rr�)r~sclosing)r0rxrAr2rr�r�r#rr�r\�SMTPRecipientsRefusedrrPrSr7r��assertDictEqualr�r�)rr�r's   r�test_421_from_rcpt_cmdz#SMTPSimTests.test_421_from_rcpt_cmd�s;���|�D�$�)�K�$+�$<�>�>�>���	�	����0>�
�/N��	��,�
�
�
�w�<�
=�
=�	P���M�M�&�">�">�">��O�O�O�	P�	P�	P�	P�	P�	P�	P�	P�	P�	P�	P����	P�	P�	P�	P����$�)�$�$�$������/�:�A�>�>�>����Q�[�-�a�0�7�<M�2N�O�O�O�O�Os�3B�B� Bc���Gd�dt��}||j_tjt
|jdtj���}|�	��|�
tj��5|�ddgd��ddd��n#1swxYwY|�
|j��|�|jjjd��dS)	Nc���eZdZ�fd�Z�xZS)�=SMTPSimTests.test_421_from_data_cmd.<locals>.MySimSMTPChannelc���|j|jkr|�d��dSt�����dS)Nr�)r��DATAr�r�r�)rr�s �rr�zNSMTPSimTests.test_421_from_data_cmd.<locals>.MySimSMTPChannel.found_terminatorsF����?�d�i�/�/��I�I�m�,�,�,�,�,��G�G�,�,�.�.�.�.�.r)rsrtrur�r�r�s@r�MySimSMTPChannelr�s8�������
/�
/�
/�
/�
/�
/�
/�
/�
/rr�r�r�zJohn@foo.orgz
Sally@foo.orgr�r)r�r#rr0rxrAr2rr�r�r\�
SMTPDataErrorrrPrSr7rr�)rr�r�s   r�test_421_from_data_cmdz#SMTPSimTests.test_421_from_data_cmds9��	/�	/�	/�	/�	/�~�	/�	/�	/�#3��	���|�D�$�)�K�$+�$<�>�>�>���	�	����
�
�
�w�4�
5�
5�	M�	M��M�M�.�?�*;�^�L�L�L�	M�	M�	M�	M�	M�	M�	M�	M�	M�	M�	M����	M�	M�	M�	M����$�)�$�$�$������/�:�A�>�>�>�>�>s�?B$�$B(�+B(c	���tjt|jdtj���}|�|j��|���|�	|j
��|�|�d����|�
tj|jdddddg�	��|�
tj|jdddg�
��dS)Nr�r��smtputf8r�r�r�rirh�rp��options)r0rxrAr2rr�r�rr�r/�
does_esmtpr0rfr\�SMTPNotSupportedErrorrrr�s  r�4test_smtputf8_NotSupportedError_if_no_server_supportzASMTPSimTests.test_smtputf8_NotSupportedError_if_no_server_supports����|��$�)�K��,�.�.�.��	
����
�#�#�#��	�	���������(�(�(�������z�2�2�3�3�3�����)��M��G�R��
�.K�	�	M�	M�	M�	
����)��I�v���'D�	�	F�	F�	F�	F�	Frc��tjt|jdtj���}|�|j��|�t|j
ddd��|�t|jd��dS)Nr�r��AliceuBöbr�uÄlice)r0rxrAr2rr�r�rr\�UnicodeEncodeErrorrrr�s  r�"test_send_unicode_without_SMTPUTF8z/SMTPSimTests.test_send_unicode_without_SMTPUTF8%s}���|��$�)�K��,�.�.�.��	
����
�#�#�#����,�d�m�W�f�b�Q�Q�Q����,�d�i��B�B�B�B�Brc�f�t��}d|d<d|d<d|d<tjt|jdt
j���}|�|j��|�	tj
��5|�|��ddd��dS#1swxYwYdS)	Nrbr,r<r-�Nudge nudge, wink, wink ὠ9�Subjectr�r�)rr0rxrAr2rr�r�rr\r�r')rrr�s   r�9test_send_message_error_on_non_ascii_addrs_if_no_smtputf8zFSMTPSimTests.test_send_message_error_on_non_ascii_addrs_if_no_smtputf8-s����n�n��-��F����D�	�:��I���|��$�)�K��,�.�.�.��	
����
�#�#�#�
�
�
�w�<�
=�
=�	#�	#����c�"�"�"�	#�	#�	#�	#�	#�	#�	#�	#�	#�	#�	#�	#����	#�	#�	#�	#�	#�	#s�B&�&B*�-B*c�"�tjt|jdtj���}|�|j��t��}tj
�d��|d<tj
�d��|d<|�|�
|��i��|�|jjdd��|�|jjd	d
g��dS)Nr�r�)uMichaël�michael@example.comr,)uRené�rene@example.comr-rr�rr�)r0rxrAr2rr�r�rrr#�utils�
formataddrr�r'r7r#r
)rr�rys   r�1test_name_field_not_included_in_envelop_addressesz>SMTPSimTests.test_name_field_not_included_in_envelop_addresses;s����|��$�)�K��,�.�.�.��	
����
�#�#�#��.�.���+�0�0�1T�U�U������.�.�/L�M�M���
����T�.�.�w�7�7��<�<�<������-�f�5�7L�M�M�M������-�e�4�7I�6J�K�K�K�K�KrN)rsrtrur3r5r�r3r�rArIrMrVrYrdr�requires_hashdigestrgrirtrzr|r�r�r�r�r�r�r�r�r�rrrr!r!s����������$	=�	=�	=�������,
�
�
���� ������G�G�G�G�G�G����((�^�'��t�<�<�<���=�<��(�^�'��t�<�<�<���=�<�����,
�
�
�M�M�M�E�E�E�%�%�%�?�?�?�	P�	P�	P�?�?�?� F�F�F� C�C�C�#�#�#�
L�
L�
L�
L�
Lrr!c�&�eZdZd�Zd�Z		dd�ZdS)�SimSMTPUTF8Serverc�L�ddg|_tjj|g|�Ri|��dS)Nrh�8BITMIME)r	r
rr�rs   rr�zSimSMTPUTF8Server.__init__Ms;��!+�J�7���
��!�$�4��4�4�4��4�4�4�4�4rc�d�|�|j||||j|j���|_dS)N�r��enable_SMTPUTF8)rr	rr�rrs   rrz!SimSMTPUTF8Server.handle_acceptedTs=�� �.�.�� �$��d��)� �0�/�
�
����rNc�Z�||_||_||_||_||_||_dSr)�	last_peer�
last_mailfrom�last_rcpttos�last_message�last_mail_options�last_rcpt_options)rrrrrrp�rcpt_optionss       rrz!SimSMTPUTF8Server.process_message[s7�����%���#��� ���!-���!-����r)NN)rsrtrur�rrrrrr�r�KsP������5�5�5�
�
�
�KO�JN�.�.�.�.�.�.rr�c�6�eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z	dS)�SMTPUTF8SimTestsNc�r�tj��|_tj|_tjt_tj��|_	tj��|_
ttdfddd���|_
|j
j���d|_|j
|j	|j
f}tjt"|���|_|j���|j	���|j	���dS)Nrr�FTr�rr�)r	r�r�r1r�r�rr�r�r�r�r�rAr#r�r2r�r�r�r�r�r�r�s  rr3zSMTPUTF8SimTests.setUpis���*�:�<�<���"�N���$�,���!��)�)��
�#�/�+�+���%�t�Q�i��27�6:�<�<�<��	��I�$�0�0�2�2�1�5��	��Y��
�t��?�	��&�.>�Y�O�O�O����������	
�
�������
�������rc��|jt_|j���|j���tj|j	��|`	|�
��tj|j�dSrr%rs rr5zSMTPUTF8SimTests.tearDown}r&rc�>�tjt|jdtj���}|�|j��|���|�	|j
��|�	|�d����dS)Nr�r�r�)r0rxrAr2rr�r�rr�r/r�rfr�s  r�$test_test_server_supports_extensionsz5SMTPUTF8SimTests.test_test_server_supports_extensions�s����|��$�)�K��,�.�.�.��	
����
�#�#�#��	�	���������(�(�(�����
�
�j�1�1�2�2�2�2�2rc�t�d�d��}tjt|jdt
j���}|�|j��|�	dd|ddg�	��|�
|jjd��|�
|jj
dg��|�
|jj|��|�d|jj��|�d|jj��|�
|jjg��dS)
N�$¡a test message containing unicode!r�r�r�uJőhnuSállyrirhr�)r�r0rxrAr2rr�r�rrr7r#r�r�r�r�r�r�rRs   r�,test_send_unicode_with_SMTPUTF8_via_sendmailz=SMTPUTF8SimTests.test_send_unicode_with_SMTPUTF8_via_sendmail�s"��2�9�9�'�B�B���|��$�)�K��,�.�.�.��	
����
�#�#�#��
�
�g�x��$3�Z�#@�	�	B�	B�	B������0�'�:�:�:������/�(��<�<�<������/��3�3�3��
�
�o�t�y�'B�C�C�C��
�
�j�$�)�"=�>�>�>������4�b�9�9�9�9�9rc�d�d�d��}tjt|jdt
j���}|�|j��|�	��|�
|�dddg���d	��|�
|�d
��d	��|�
|�
|��d	��|�
|jjd��|�
|jjd
g��|�
|jj|��|�d|jj��|�d|jj��|�
|jjg��dS)Nr�r�r�r�uJőrirhr�r�uJános)r�r0rxrAr2rr�r�rr�r7r�rcptrr#r�r�r�r�r�r�rRs   r�1test_send_unicode_with_SMTPUTF8_via_low_level_APIzBSMTPUTF8SimTests.test_send_unicode_with_SMTPUTF8_via_low_level_API�sz��2�9�9�'�B�B���|��$�)�K��,�.�.�.��	
����
�#�#�#��	�	��������I�I�e�o�z�%B�I�C�C��	�	�	�	
������8�,�,�l�;�;�;�������1���|�4�4�4������0�%�8�8�8������/�(��<�<�<������/��3�3�3��
�
�o�t�y�'B�C�C�C��
�
�j�$�)�"=�>�>�>������4�b�9�9�9�9�9rc��t��}d|d<d|d<d|d<|�d��tjd��}t	jt|jd	tj	�
��}|�
|j��|�|�
|��i��|�|jjd��|�|jjdg��|�|jj���|��|�d|jj��|�d
|jj��|�|jjg��dS)Nrbr,r<r-r�r�u1oh là là, know what I mean, know what I mean?

u<            From: Páolo <főo@bar.com>
            To: Dinsdale
            Subject: Nudge nudge, wink, wink ὠ9
            Content-Type: text/plain; charset="utf-8"
            Content-Transfer-Encoding: 8bit
            MIME-Version: 1.0

            oh là là, know what I mean, know what I mean?
            r�r�ufőo@bar.comrirh)r�set_content�textwrap�dedentr0rxrAr2rr�r�rr7r'r#r�r�r�rr�r�r�)rrr:r�s    r�2test_send_message_uses_smtputf8_if_addrs_non_asciizCSMTPUTF8SimTests.test_send_message_uses_smtputf8_if_addrs_non_ascii�sf���n�n��-��F����D�	�:��I��	���M�N�N�N��?�	$�	�	���|��$�)�K��,�.�.�.��	
����
�#�#�#�����*�*�3�/�/��4�4�4������0�.�A�A�A������/�*��>�>�>������/�6�6�8�8�(�C�C�C��
�
�o�t�y�'B�C�C�C��
�
�j�$�)�"=�>�>�>������4�b�9�9�9�9�9r)
rsrtrurTr3r5r�r�r�r�rrrr�r�ess�������G����(	=�	=�	=�3�3�3�
:�
:�
:�:�:�:�&:�:�:�:�:rr�spsudoesnotexistr�)�eolc��eZdZd�ZdS)�!SimSMTPAUTHInitialResponseChannelc�
�|���}|d���dkr;t|��dkr(|dtkr|�d��dS|�d��dS)Nr�plainrqrz235 Okz571 Bad authentication)r�r�r��EXPECTED_RESPONSEr�)rr�r�s   rr�z+SimSMTPAUTHInitialResponseChannel.smtp_AUTH�sy���y�y�{�{����7�=�=�?�?�g�%�%��4�y�y�A�~�~���7�/�/�/��I�I�h�'�'�'��F��	�	�*�+�+�+�+�+rN)rsrtrur�rrrr�r��s#������,�,�,�,�,rr�c��eZdZeZdS)� SimSMTPAUTHInitialResponseServerN)rsrtrur�rrrrr�r��s������5�M�M�Mrr�c�&�eZdZd�Zd�Zd�Zd�ZdS)�SMTPAUTHInitialResponseSimTestsc�p�tj��|_tj|_tjt_tj��|_	tj��|_
ttdfdd���|_
|j
j���d|_|j
|j	|j
f}tjt"|���|_|j���|j	���|j	���dSr#)r	r�r�r1r�r�rr�r�r�r�r�rAr#r�r2r�r�r�r�r�r�r�s  rr3z%SMTPAUTHInitialResponseSimTests.setUp�s���*�:�<�<���"�N���$�,���!��)�)��
�#�/�+�+���4�
�1�I��D�:�:�:��	��I�$�0�0�2�2�1�5��	��Y��
�t��?�	��&�.>�Y�O�O�O����������	
�
�������
�������rc��|jt_|j���|j���tj|j	��|`	|�
��tj|j�dSrr%rs rr5z(SMTPAUTHInitialResponseSimTests.tearDown�r&rc���|j�d��tjt|jdtj���}|�dd��|�	��dS)NrCr�r��psu�doesnotexist)
r#rr0rxrAr2rr�rGrr�s  r�%testAUTH_PLAIN_initial_response_loginzESMTPAUTHInitialResponseSimTests.testAUTH_PLAIN_initial_response_loginsa���	���l�+�+�+��|�D�$�)�K�$+�$<�>�>�>���
�
�5�.�)�)�)��
�
�����rc�>�|j�d��tjt|jdtj���}d|_d|_	|�
d|j��\}}|���|�
|d��dS)NrCr�r�r�r�r�rE)r#rr0rxrAr2rr�r�r�rT�
auth_plainrr7)rr�rx�responses    r�$testAUTH_PLAIN_initial_response_authzDSMTPAUTHInitialResponseSimTests.testAUTH_PLAIN_initial_response_auths����	���l�+�+�+��|�D�$�)�K�$+�$<�>�>�>����	�&��
����7�D�O�<�<���h��
�
��������s�#�#�#�#�#rN)rsrtrur3r5r�r�rrrr�r��sP���������&	=�	=�	=����$�$�$�$�$rr��__main__)Gr��email.mime.textr#�
email.messager�email.base64mimer�
encode_base64�email.utilsror�r1r0r�rgr�r�rr�r�r�r��testrr�test.supportrrr	r
�
unittest.mockr�import_deprecatedrr
�requires_working_socketrA�platformr�SMTPChannelr+r-�TestCaserwrzr�rrr�rVr`rsr{r�r�r�r��	Exceptionr�r�rrr!r�r�r�r�r�r�rs�mainrrr�<module>r�sc��
�
�
�
�����&�&�&�&�&�&�9�9�9�9�9�9�������������
�
�
�
�����	�	�	�	�	�	�	�	�
�
�
�
�����
�
�
�
�����������������%�%�%�%�%�%�%�%�'�'�'�'�'�'�&�&�&�&�&�&�)�)�)�)�)�)�(�(�(�(�(�(�������-�?�,�Z�8�8��)��)�'�2�2�� ���t�,�,�,�,�����<�8���
�
�
�$/�E��!����,`6�`6�`6�`6�`6�`6�`6�`6�F�����|�X�%6����
/�/�/�/�/�|�X�%6�/�/�/�,���>
6�	�
3��S�S�S�S�S�8�,�S�S�S�j)�)�)�)�)��*�)�)�)�60�0�0�0�0�H�-�0�0�0�8=�=�=�=�=��*�=�=�=�&;�;�;�;�;�x�(�;�;�;�@#+�#,�'/�
�
�	�
2��;��+�,E�F�,�.�
�
�	�
)�(�(�(�(�	�(�(�(�u�u�u�u�u�U�&�u�u�u�p�����E�$����6@L�@L�@L�@L�@L�8�$�@L�@L�@L�F
.�.�.�.�.�
�.�.�.�4l:�l:�l:�l:�l:�x�(�l:�l:�l:�^"�M�"8�b�A�A�A��
,�
,�
,�
,�
,��
,�
,�
,�6�6�6�6�6�}�6�6�6�.$�.$�.$�.$�.$�h�&7�.$�.$�.$�b�z����H�M�O�O�O�O�O��r