add-determinism 0.7.3

RPM buildroot helper to strip nondeterministic bits in files
Documentation
�

��Vci�cs(�	ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlm
Zgd�ZdZdZdZdZdZd	Zejd
ej��ZGd�de��ZGd
�de��ZGd�de��ZGd�de��ZGd�de��ZGd�de��ZGd�de��Z Gd�de��Z!Gd�de��Z"Gd�de��Z#d�Z$d �Z%d!�Z&d"�Z'd#�Z(	ddl)Z)d$Z*n
#e+$rd%Z*YnwxYwGd&�d'��Z,e*r#Gd(�d)e,��Z-e�.d)��d*Z/Gd+�d,e,��Z0e1d-kr�d.�Z2e2d/��Z3e2d0���4d1��Z5e6d2��d3Z7	ej8�9��Z:e:sne7e:zZ7�"e6d5e;e7��z��e,d6��Z<e<�=d4��e<�>e3e5e7��e<�?��dSdS)7�N)�body_encode)
�
SMTPException�SMTPNotSupportedError�SMTPServerDisconnected�SMTPResponseException�SMTPSenderRefused�SMTPRecipientsRefused�
SMTPDataError�SMTPConnectError�
SMTPHeloError�SMTPAuthenticationError�	quoteaddr�	quotedata�SMTPii��
s
i iz	auth=(.*)c��eZdZdS)rN��__name__�
__module__�__qualname__��� /usr/lib64/python3.11/smtplib.pyrrHs������>�>rrcr)rNrrrrrrK��������rrcr)rNrrrrrrRs�������rrc��eZdZ	d�ZdS)rcs4�||_||_||f|_dS�N)�	smtp_code�
smtp_error�args)�self�code�msg�   r�__init__zSMTPResponseException.__init__cs���������3�K��	�	�	rN�rrrr"rrrrrZs(������� � � � � rrcr)rcsD�||_||_||_|||f|_dSr)rr�senderr)rrr r$�    rr"zSMTPSenderRefused.__init__os)������������3��'��	�	�	rNr#rrrrrhs(�������(�(�(�(�(rrcr)rcs$�||_|f|_dSr)�
recipientsr)rr&�  rr"zSMTPRecipientsRefused.__init__}s��$����M��	�	�	rNr#rrrrrus(�������"�"�"�"�"rrcr)rNrrrrrr�s������1�1rrcr)r	Nrrrrr	r	�s������0�0rr	cr)r
Nrrrrr
r
�s������,�,rr
cr)rNrrrrrr�rrrcs��	tj�|��\}}||fdkr.|����d��r|Sd|zSd|zS)N��r)z<z<%s>)�email�utils�	parseaddr�stripZ
startswith�Z
addrstringZdisplayname�addrr!rrr�sr�����-�-�j�9�9��K���T��h�&�#������(�(��-�-�	����
�"�"��D�=�rcs^�tj�|��\}}||fdkr|S|S)Nr()r*r+r,r.r!r�
_addr_onlyr0�s9����-�-�j�9�9��K���T��h�&�����Krc	sb�	tjddtjdt|����S)Nz(?m)^\.z..�(?:\r\n|\n|\r(?!\n))��re�sub�CRLF��data� rr
r
�s3���
�6�*�d�
��&��d�3�3�5�5�5rcs.�tjdd|��S)Ns(?m)^\.s..)r3r4)Zbindatar8r�_quote_periodsr9�s��
�6�+�u�g�.�.�.rcs8�tjdt|��S)Nr1r2r6r8r�	_fix_eolsr:�s���F�*�D�$�7�7�7rTFcsF�eZdZ	dZdZdZdZdZdZdZ	e
Zdddej
dfd�Zd�Zd�Zd	�Zd
�Zd�Zd,d
�Zd�Zd-d�Zd�Zd-d�Zd-d�Zd-d�Zd�Zd-d�Zd�Zd�Zd�Zd.d�Z d.d�Z!d�Z"d�Z#e#Z$d�Z%d�Z&d d!�d"�Z'd/d#�Z(d/d$�Z)d/d%�Z*d d!�d&�Z+d0d'�Z,		d1d(�Z-		d2d)�Z.d*�Z/d+�Z0dS)3rrN�ehloFr)cs��	||_||_i|_d|_||_d|_|rC|�||��\}}|dkr$|���t||���|�	||_	dStj��}d|vr	||_	dSd}		tjtj
����}	n#tj$rYnwxYwd|	z|_	dS)N�asciir��z.z	127.0.0.1z[%s])�_host�timeout�esmtp_features�command_encoding�source_address�_auth_challenge_count�connect�closer	�local_hostname�socketZgetfqdnZ
gethostbynameZgethostnameZgaierror)
r�host�portrFr?rBrr Zfqdnr/�
          rr"z
SMTP.__init__�s��	���
���� ��� '���,���%&��"��	2��,�,�t�T�2�2�K�T�3��s�{�
2��
�
����&�t�S�1�1�1��	4�"0�D����
�>�#�#�D��d�{�	
4�&*��#�#�#�#���!�/��0B�0D�0D�E�E�D�D��������D�����&,�t�m��#�#�#s�%C�C�Ccs�|Srr�rr8r�	__enter__zSMTP.__enter__s���rcs��	|�d��\}}|dkrt||���n#t$rYnwxYw|���dS#|���wxYw)NZQUITi�)�docmdrrrE)rrrZmessager%r�__exit__z
SMTP.__exit__s���	� �J�J�v�.�.�M�D�'��s�{�
;�+�D�'�:�:�:�
;��%�	�	�	��D�	����
�J�J�L�L�L�L�L��D�J�J�L�L�L�L���s!�.1�A�
>�A�>�A�A-cs�	||_dSr)�
debuglevel)rrOr'r�set_debuglevelzSMTP.set_debuglevel"s��	�%����rcs��|jdkrJttj������g|�Rdt
ji�dSt|dt
ji�dS)N��file)rO�print�datetimeZnowZtime�sysZstderr�rrr'r�_print_debugzSMTP._print_debug+sm���?�Q��	*��(�#�'�'�)�)�.�.�0�0�I�4�I�I�I�c�j�I�I�I�I�I��4�)�c�j�)�)�)�)�)rcs��|�|std���|jdkr|�d||f|j��t	j||f||j��S)N�0Non-blocking socket (timeout=0) is not supportedrzconnect: to)�
ValueErrorrOrWrBrGZcreate_connection)rrHrIr?r%r�_get_socketzSMTP._get_socket1sv���	Q�w�	Q��O�P�P�P��?�Q��	P����m�d�D�\�4�;N�O�O�O��'��t��g�(,�(;�=�=�	=r�	localhostcsT�	|r||_|s�|�d��|�d��kr`|�d��}|dkrE|d|�||dzd�}}	t|��}n#t$rtd���wxYw|s|j}tjd|||��|�	|||j
��|_d|_|�
��\}}|jdkr#|�dt!|����||fS)Nz:rrQznonnumeric portzsmtplib.connect�connect:)rBZfindZrfind�intrY�OSError�default_portrU�auditrZr?�sockrR�getreplyrOrW�repr)rrHrIrBZirr �       rrDzSMTP.connect;sD��		��	1�"0�D���	5����3���4�:�:�c�?�?�:�	5��
�
�3���A��A�v�
5�!�"�1�"�X�t�A��E�F�F�|�d��5��t�9�9�D�D��!�5�5�5�!�"3�4�4�4�5�����	%��$�D��	�#�T�4��6�6�6��$�$�T�4���>�>��	���	��m�m�o�o���s��?�Q��	5����j�$�s�)�)�4�4�4��c�{�s�,A<�<Bcs��	|jdkr#|�dt|����|jr�t	|t
��r|�|j��}tj	d||��	|j�
|��dS#t$r$|���td���wxYwtd���)Nrzsend:zsmtplib.send�Server not connectedzplease run connect() first)rOrWrcra�
isinstance�str�encoderArUr`Zsendallr^rEr)r�sr'r�sendz	SMTP.send\s���%��?�Q��	0����g�t�A�w�w�/�/�/��9�
	G��!�S�!�!�
4��H�H�T�2�3�3���I�n�d�A�.�.�.�
E��	�!�!�!�$�$�$�$�$���
E�
E�
E��
�
����,�-C�D�D�D�
E����)�)E�F�F�Fs�=B�.Ccs��	|dkr|}n|�d|��}d|vsd|vr<|�dd���dd��}td|�����|�|�t����dS)Nr)� z
�
z\nz\rz=command and arguments contain prohibited newline characters: )�replacerYrjr5)r�cmdrrir%r�putcmdzSMTP.putcmdos���+��2�:�	 ��A�A�������A��1�9�	���	�	��	�	�$��&�&�.�.�t�U�;�;�A��S�PQ�S�S���
�	
�	�	�Q�,��,�,�����rcs��	g}|j�|j�d��|_		|j�tdz��}nE#t
$r8}|���tdt|��z���d}~wwxYw|s#|���td���|j	dkr#|�
dt|����t|��tkr$|���tdd���|�|d	d��d
����|dd�}	t!|��}n#t"$rd}YnwxYw|dd	�d
krn��fd�|��}|j	dkr|�
d|�d|����||fS)NZrbrQz Connection unexpectedly closed: zConnection unexpectedly closedrzreply:i�zLine too long.is 	
i�����s-s
zreply: retcode (z); Msg: )rRraZmakefile�readline�_MAXLINEr^rErrgrOrWrc�lenr�appendr-r]rY�join)r�resp�line�erZerrcodeZerrmsgrdrrbz
SMTP.getreply|s���	����9�	1��	�*�*�4�0�0�D�I�	�
7��y�)�)�(�Q�,�7�7�����
7�
7�
7��
�
����,�-O�/2�1�v�v�.6�7�7�7�����
7�����
O��
�
����,�-M�N�N�N����"�
8��!�!�(�D��J�J�7�7�7��4�y�y�8�#�
C��
�
����+�C�1A�B�B�B��K�K��Q�R�R����z�2�2�3�3�3�����8�D�
��d�)�)�����
�
�
�����
�����A�a�C�y�D� �
��5	�8���D�!�!���?�Q��	R����������P�Q�Q�Q����s)�"A�
B�3B�B�E.�.E=�<E=csX�	|�||��|���Sr�rorb)rrnrr!rrMz
SMTP.docmd�s'��;����C������}�}���rcs��	|�d|p|j��|���\}}||_||fS)N�helo)rorFrb�	helo_resp)r�namerr r%rrzz	SMTP.helo�sG��	�	
���F�D�7�D�$7�8�8�8��m�m�o�o���s�����c�{�rcs��	i|_|�|j|p|j��|���\}}|dkr6t|��dkr#|���td���||_|dkr||fSd|_	|j�
d���d��}|d=|D�]}t�
|��}|rC|j�dd	��d
z|�d��dz|jd<�bt!j
d|��}|r�|�d�����}|j|�d��d����}	|dkr+|j�|d	��d
z|	z|j|<��|	|j|<��||fS)
Nrprre��Tzlatin-1rl�authr)rkz((?P<feature>[A-Za-z0-9][A-Za-z0-9\-]*) ?�feature)r@ro�ehlo_msgrFrbrsrEr�	ehlo_resp�
does_esmtpZdecode�split�
OLDSTYLE_AUTHZmatchZgetZgroupsr3Zgroup�lowerZstringZendr-)
rr|rr rv�eachZ
auth_matchZmrZparamsrJrr;z	SMTP.ehlo�s���	�!������D�M�4�#>�4�+>�?�?�?��m�m�o�o���s��2�:�	A�#�c�(�(�a�-�	A��J�J�L�L�L�(�)?�@�@�@�����3�;�	��#�;������~�$�$�Y�/�/�5�5�d�;�;����G��	:�	:�D�'�,�,�T�2�2�J��
�.2�.A�.E�.E�f�b�.Q�.Q��/� *� 1� 1�!� 4� 4�Q� 7�/8��#�F�+����D�d�K�K�A��
:��'�'�)�,�,�2�2�4�4����!�%�%�	�"2�"2�"3�"3�4�:�:�<�<���f�$�:�37�3F�3J�3J�7�TV�3W�3W�!�4"�$*�4+�D�'��0�0�4:�D�'��0���c�{�rcs:�	|���|jvSr)r�r@)rZoptr'r�has_extnz
SMTP.has_extn�s��E��y�y�{�{�d�1�1�1rcsd�	|�d|��|���dS)N�helprQryrVr'rr�z	SMTP.help�s.��	*����F�D�!�!�!��}�}���q�!�!rcs<�	d|_|�d��S)Nr<�rset)rArMrKr8rr�z	SMTP.rset�s��4� '����z�z�&�!�!�!rcsT�		|���dS#t$rYdSwxYwr)r�rrKr8r�_rsetz
SMTP._rset�s?��	�	��I�I�K�K�K�K�K��%�	�	�	��D�D�	���s��
'�'cs.�	|�d��S)N�noop)rMrKr8rr�z	SMTP.noops��;��z�z�&�!�!�!rrcsL�	d}|rd|jr]td�|D����r,|�d��rd|_nt	d���dd�|��z}|�ddt|���|����|���S)	Nr)c3sFK�|]}|���dkV��dS)�smtputf8N)r�)�.0Zxr'rz	<genexpr>zSMTP.mail.<locals>.<genexpr>s/����:�:�Q�1�7�7�9�9�j�(�:�:�:�:�:�:rr�zutf-8z SMTPUTF8 not supported by serverrk�mailzFROM:)	r�Zanyr�rArrurorrb)rr$�options�
optionlistr%rr�z	SMTP.mails���	��
��	1�t��	1��:�:�'�:�:�:�:�:�
<��=�=��,�,�<�,3�D�)�)�/�:�<�<�<��s�x�x��0�0�0�J����F�F�9�V�+<�+<�+<�j�j�I�J�J�J��}�}���rcs��	d}|r|jrdd�|��z}|�ddt|���|����|���S)Nr)rk�rcptzTO:)r�rurorrb)rZrecipr�r�r%rr�z	SMTP.rcpt$sg��I��
��	1�t��	1��s�x�x��0�0�0�J����F�F��5�)9�)9�)9�:�:�F�G�G�G��}�}���rcsT�	|�d��|���\}}|jdkr|�d||f��|dkrt	||���t|t��r"t|���d��}t|��}|dd�tkr
|tz}|dztz}|�|��|���\}}|jdkr|�d||f��||fS)Nr7rzdata:ibr<i����s.)rorbrOrWrrfrgr:rhr9�bCRLFrj)rr rZreplZqs     rr7z	SMTP.data,s'��	�	
���F�����}�}�����t��?�Q��	5����g��d�|�4�4�4��3�;�
	���d�+�+�+��#�s�#�#�
5���n�n�+�+�G�4�4���s�#�#�A�����v���
���I���D��5� �A��I�I�a�L�L�L��-�-�/�/�K�T�3����"�
8��!�!�'�D�#�;�7�7�7��#�;�rc�r�	|�dt|����|���S)N�vrfy�ror0rb�rZaddressr'r�verifyzSMTP.verifyIs/��C����F�J�w�/�/�0�0�0��}�}���rcr�)N�expnr�r�r'rr�z	SMTP.expnPs/��<����F�J�w�/�/�0�0�0��}�}���rcs��	|j�d|j�_d|���dcxkrdks<n|���\}}d|cxkrdksnt	||���dSdSdSdS)Ni�ri+)r{r�r;rzr
)rrrvr!r�ehlo_or_helo_if_neededzSMTP.ehlo_or_helo_if_neededWs���		��>�	4�d�n�	4��4�9�9�;�;�q�>�
4�
4�
4�
4�S�
4�
4�
4�
4�#�y�y�{�{���t��t�4�4�4�4�s�4�4�4�4�'��d�3�3�3�		4�	4�	4�	4�
4�
4�4�4rT��initial_response_okcs��	|���}|r
|��nd}|�Kt|�d��d���}|�d|dz|z��\}}d|_n |�d|��\}}d|_|dkr�|xjdz
c_tj|��}t||���d��d���}|�|��\}}|jtkr!td	t||f��z���|dk��|d
vr||fSt||���)Nr<r))ZeolZAUTHrkrQriNz4Server AUTH mechanism infinite loop. Last response: �i�i�)Zupper�
encode_base64rhrMrC�base64Zdecodebytes�
_MAXCHALLENGErrcr)	rZ	mechanismZ
authobjectr�Zinitial_responseZresponserrv�	challenges	         rr~z	SMTP.authhs���	�*�O�O�%�%�	�,?�I�J�J�L�L�L�T���	+�$�%5�%<�%<�W�%E�%E�2�N�N�N�H��:�:�f�i�#�o��.H�I�I�L�T�4�)*�D�&�&��:�:�f�i�8�8�L�T�4�)*�D�&��c�k�	��&�&�!�+�&�&��*�4�0�0�I�$��
�9�%�%�,�,�W�5�5�2�?�?�?�H��:�:�h�/�/�L�T�4��)�M�9�
�#�J��D�$�<�(�(�)�����c�k�	��:��	 ��$�<��%�d�D�1�1�1rcs��	|�dS|jdztj|j�d��|d�����zS)Nrkr<Zmd5)�user�hmacZHMAC�passwordrhZ	hexdigest�rr�r'r�
auth_cram_md5zSMTP.auth_cram_md5�sY��	(��	��4��y�3�����M� � ��)�)�9�e�"=�"=�=F�Y�[�[�I�	Ircs&�d|j�d|j��S)Nz)r�r�r�r'r�
auth_plainzSMTP.auth_plain�s��	$�!�Y�Y�Y��
�
�6�6rcs:�	|�|jdkr|jS|jS)N�)rCr�r�r�r'r�
auth_loginzSMTP.auth_login�s.��	$��	!�� :�Q� >�	!��9���=� rcs��	|���|�d��std���|jd����gd�}�fd�|D��}|std���||c|_|_|D]z}d|����	dd��z}	|�
|t||��|�	��\}}	|d
vr||	fcS�b#t$r}
|
}Yd}
~
�sd}
~
wwxYw|�)Nr~z,SMTP AUTH extension not supported by server.)zCRAM-MD5ZPLAINZLOGINcs��g|]}|�v�|��	Srr)r�r~�advertised_authlists  �r�
<listcomp>zSMTP.login.<locals>.<listcomp>�s3���4�4�4�T��2�2�4�D�4�4�4rz(No suitable authentication method found.Zauth_z-Z_r�r�)
r�r�rr@r�rr�r�r�rmr~Zgetattrr)
rr�r�r�Zpreferred_authsZauthlistZ
authmethodZmethod_namerrvrxZlast_exceptionr�s
            @r�loginz
SMTP.login�s����	�6	
�#�#�%�%�%��}�}�V�$�$�	@�'�>�@�@�
@�#�1�&�9�?�?�A�A��9�8�8��4�4�4�4�_�4�4�4���	L�� J�K�K�K�
$(�� ��	�4�=�"�	#�	#�J�!�J�$4�$4�$6�$6�$>�$>�s�C�$H�$H�H�K�	
#�#�y�y����k� :� :�(;� )� =� =���t�
�:�%�(� �$�<�'�'�'�(��*�
#�
#�
#�!"�����������
#�����s�<0C0�0
D�:D�Dcs\�	|���|�d��std���|�d��\}}|dkr�tstd���|�|�t
d���|�|�t
d���|�|� ddl}|�d	td
��|�tj||���}|�|j
|j���|_
d|_d|_d|_i|_d
|_nt)||���||fS)N�starttlsz+STARTTLS extension not supported by server.ZSTARTTLSr=z&No SSL support included in this Python�4context and keyfile arguments are mutually exclusive�5context and certfile arguments are mutually exclusiver�Akeyfile and certfile are deprecated, use a custom context insteadr���certfile�keyfile�Zserver_hostnameF)r�r�rrM�	_have_sslZRuntimeErrorrY�warnings�warn�DeprecationWarning�ssl�_create_stdlib_context�wrap_socketrar>rRr{r�r@r�r)rr�r��contextrvZreplyr�rdrr�z
SMTP.starttls�s���	� 	
�#�#�%�%�%��}�}�Z�(�(�	?�'�=�?�?�
?��
�
�:�.�.�
��u��3�;�	5��
M�"�#K�L�L�L��
.�w�
.� �"-�.�.�.��
.�x�
.� �"-�.�.�.��
O�h�
O������
�
�7�8J�A�O�O�O��
F��4�h�=D�F�F�F���+�+�D�I�<@�J�,�H�H�D�I��D�I�
"�D�N�!�D�N�"$�D��#�D�O�O�
(��e�4�4�4��e�}�rcs>�	|���g}t|t��r"t|���d��}|jrT|�d��r%|�dt|��z��|D]}|�|���|�	||��\}}	|dkr@|dkr|�
��n|���t||	|���i}
t|t��r|g}|D]W}|�
||��\}}	|dkr
|dkr||	f|
|<|dkr#|�
��t|
����Xt|
��t|��kr#|���t|
���|�|��\}}	|dkr?|dkr|�
��n|���t!||	���|
S)Nr<Zsizezsize=%dr}i�i�)r�rfrgr:rhr�r�rtrsr�rEr�rr�rr7r)r�	from_addr�to_addrsr �mail_options�rcpt_optionsZ
esmtp_optsZoptionrrvZsenderrsr�s            r�sendmailz
SMTP.sendmail(s2��=	�|	
�#�#�%�%�%��
��c�3���	1��C�.�.�'�'��0�0�C��?�	*��}�}�V�$�$�
8��!�!�)�c�#�h�h�"6�7�7�7�&�
*�
*���!�!�&�)�)�)�)��y�y��J�7�7���t��3�;�	;��s�{�
��
�
������
�
����#�D�$�	�:�:�:����h��$�$�	"� �z�H��	6�	6�D��9�9�T�<�8�8�L�T�4����
.�$�#�+�
.�"&�������s�{�
6��
�
����+�H�5�5�5�
6��x�=�=�C��M�M�)�	2��J�J�L�L�L�'��1�1�1��y�y��~�~���t��3�;�	,��s�{�
��
�
������
�
������d�+�+�+��rcs��	|���|�d��}|�d}n%t|��dkrd}ntd���|�I|dz|vr||dzn
||dz}tj�|g��dd}|�Sd	�||d
z||dz||dzfD��}d
�tj�|��D��}tj|��}	|	d=|	d=d}
	d�|g|����	d��n6#t$r)|�d��std���d}
YnwxYwtj��5}|
rDtj�||j�d������}g|�d�d�R}ntj�|��}|�|	d���|���}
ddd��n#1swxYwY|�|||
||��S)NzResent-Dater)rQzResent-z0message has more than one 'Resent-' header blockZSender�Fromrcs�g|]}|�|��Srr)r�Zfr'rr��%SMTP.send_message.<locals>.<listcomp>�s.��-�-�-�� �-�1�-�-�-r�ToZBccZCccs�g|]
}|d��S)rQr)r�Zar'rr�r��s��L�L�L���!��L�L�Lrz
Resent-BccFr<r�z�One or more source or delivery addresses require internationalized email support, but the server does not advertise the required SMTPUTF8 capabilityT)Zutf8)�policyZSMTPUTF8z
BODY=8BITMIMEr)Zlinesep)r�Zget_allrsrYr*r+Zgetaddresses�copyrurhZUnicodeEncodeErrorr�r�ioZBytesIOZ	generatorZBytesGeneratorr�ZcloneZflattenZgetvaluer�)rr r�r�r�r�ZresentZ
header_prefixZaddr_fieldsZmsg_copyZ
internationalZbytesmsgZgZflatmsgs              r�send_messagezSMTP.send_message�s���	�:	
�#�#�%�%�%����]�+�+���	Q��M�M�
��[�[�A�
�	Q�%�M�M��O�P�P�P��	D� -�x�7�C�?�<��]�X�5�6�6� #�M�F�$:� ;�
���0�0�)��=�=�a�@��C�I��	M�-�-�s�=�4�+?�'@�'*�=�5�+@�'A�'*�=�4�+?�'@�'B�-�-�-�K�M�L�e�k�&>�&>�{�&K�&K�L�L�L�H��9�S�>�>���U�O��\�"��
�	!��G�G�Y�*��*�+�+�2�2�7�;�;�;�;��!�	!�	!�	!��=�=��,�,�
L�+�K�L�L�L�!�M�M�M�
	!�����Z�\�\�	*�X��
=��O�2�2��S�Z�%5�%5�4�%5�%@�%@�3�B�B��K��K�z�K�?�K�K����O�2�2�8�<�<��
�I�I�h��I�/�/�/��'�'�)�)�G�	*�	*�	*�	*�	*�	*�	*�	*�	*�	*�	*����	*�	*�	*�	*��}�}�Y��'�<�)�+�+�	+s%�+D>�>0E1�0E1�BH$�$H(�+H(cs��		|j}d|_|r|���|j}d|_|r|���dSdS#|j}d|_|r|���wwxYwr)rRrEra)rrRrar!rrEz
SMTP.close�s���6�		��9�D��D�I��
��
�
�����9�D��D�I��
��
�
������
�
���9�D��D�I��
��
�
�����
���s�$A�'A6cs��	|�d��}dx|_|_i|_d|_|���|S)N�quitF)rMr�r{r@r�rE)rZresr'rr�z	SMTP.quit�sE��)��j�j�� � ��*.�.����� �������
�
�����
r�r[rN)r))rr)NNN)rr)NNrr)1rrrrOrarRr{r�r�r��	SMTP_PORTr_rG�_GLOBAL_DEFAULT_TIMEOUTr"rLrNrPrWrZrDrjrorbrMrzr;r�r�r�r�r�r�r�r7r�r�r�r�r~r�r�r�r�r�r�r�rEr�rrrrr�s��������8�J��D��D��I��H��I��J��L��Q�t��7� $�.4�.4�.4�.4�`������%�%�%�*�*�*�=�=�=�����BG�G�G�& � � � �/�/�/�b��������1�1�1�1�f2�2�2�"�"�"�"�"�"�"�

�
�
�"�"�"�����*�������:���
�D����4�4�4�"BF�.2�.2�.2�.2�.2�`I�I�I�I�7�7�7�7�
!�!�!�!�<@�@�@�@�@�@�D6�6�6�6�p?A� �f�f�f�f�P:>�35�K+�K+�K+�K+�Z�������rrcsF��eZdZ	eZdddddejddfd�Z�fd�Z�xZ	S)�SMTP_SSLr)rNc	s2�|�|�td���|�|�td���|�|� ddl}	|	�dtd��||_||_|�t
j||���}||_t�
||||||��dS)Nr�r�rr�r�r�)rYr�r�r�r�r�r�r�r�rr")
rrHrIrFr�r�r?rBr�r�rJrr"zSMTP_SSL.__init__s����
.�w�
.� �"-�.�.�.��
.�x�
.� �"-�.�.�.��
O�h�
O������
�
�7�8J�A�O�O�O�"�D�L�$�D�M��
F��4�h�=D�F�F�F��"�D�L��M�M�$��d�N�G�(�
*�
*�
*�
*�
*rcs���|jdkr|�d||f��t���|||��}|j�||j���}|S)Nrr\r�)rOrW�superrZr�r�r>)rrHrIr?Z
new_socket�	__class__s     �rrZzSMTP_SSL._get_socketsr������"�
<��!�!�*�t�T�l�;�;�;����,�,�T�4��A�A�J���1�1�*�BF�*�2�N�N�J��r)
rrr�
SMTP_SSL_PORTr_rGr�r"rZ�
__classcell__�r��@rr�r��so�������	�%�� "��4�!�D�#�;�$(�$�	*�	*�	*�	*�.	�	�	�	�	�	�	�	�	rr�i�csF��eZdZ	dZdeddejf�fd�	Zd�fd�	Z�xZ	S)	�LMTPZlhlor)NcsV��	t���|||||���dS)N)rFrBr?)r�r")rrHrIrFrBr?r��      �rr"z
LMTP.__init__<sA���(�
������t�N�(6��	�	I�	I�	I�	I�	Irr[rcs���	|ddkr$t���|||���S|j�|jstd���	t	jtjtj��|_|jtjur|j�	|j��d|_
|j�|��nW#t$rJ|jdkr|�
d|��|jr|j���d|_�wxYw|���\}}|jdkr|�
d|��||fS)Nrz/)rBrXz
connect fail:r\)r�rDr?rYrGZAF_UNIXZSOCK_STREAMrar�Z
settimeoutrRr^rOrWrErb)rrHrIrBrr r�r�rrDzLMTP.connectBsf���K���7�c�>�	N��7�7�?�?�4��n�?�M�M�M��<�	Q�D�L�	Q��O�P�P�P�	��
�f�n�f�6H�I�I�D�I��|�6�#A�A�
3��	�$�$�T�\�2�2�2��D�I��I���d�#�#�#�#���	�	�	����"�
9��!�!�/�4�8�8�8��y�
"��	���!�!�!��D�I��
	�����m�m�o�o���s��?�Q��	/����j�#�.�.�.��c�{�s�BC�AD'r�)
rrrr��	LMTP_PORTrGr�r"rDr�r�r�rr�r�,s|�������4��H��Y�t� $�f�.L�I�I�I�I�I�I����������rr�Z__main__cs��tj�|dz��tj���tj������S)Nz: )rUZstdoutZwriteZflush�stdinrqr-)�promptr8rr�r�asP���
����$��'�'�'��
�������y�!�!�#�#�)�)�+�+�+rr�r�z,zEnter message, end with ^D:r)rQzMessage length is %dr[)@rGr�r3Zemail.utilsr*Z
email.messageZemail.generatorr�r�r�rTrUZemail.base64mimerr�Z__all__r�r�r5r�rrr�ZcompileZIr�r^rrrrrrrr	r
rrr0r
r9r:r�r�ZImportErrorrr�rtr�r�rr�Zfromaddrr�ZtoaddrsrSr r�rqrwrsZserverrPr�r�rrr�<module>r�s����R�
�
�
�	�	�	�	�	�	�	�	�������������
�
�
�
�������������
�
�
�
�9�9�9�9�9�9�-�-�-��

�	��
�
�������
���
�<���.�.�
�?�?�?�?�?�G�?�?�?������M���������]���� � � � � �M� � � �(�(�(�(�(�-�(�(�(�
"�
"�
"�
"�
"�M�
"�
"�
"�2�2�2�2�2�)�2�2�2�1�1�1�1�1�,�1�1�1�-�-�-�-�-�)�-�-�-������3����������5�5�5�/�/�/�8�8�8���J�J�J��I�I�������I�I�I�����t�t�t�t�t�t�t�t�l
�1�-�-�-�-�-�4�-�-�-�^�N�N�:����

�	�/�/�/�/�/�4�/�/�/�h�z���,�,�,�
�v�f�~�~�H��f�T�l�l� � ��%�%�G�	�E�
'�(�(�(�
�C���y�!�!�#�#���	���D�j��	�

�E�
 �3�3�s�8�8�
+�,�,�,�
�T�+�
�
�F�
���!����
�O�O�H�g�s�+�+�+�
�K�K�M�M�M�M�M�)�s�6C=�=D�D