HOME


Mini Shell 1.0
DIR: /lib/python3/dist-packages/twisted/mail/__pycache__/
Upload File :
Current File : //lib/python3/dist-packages/twisted/mail/__pycache__/relay.cpython-312.pyc
�

Ϫ�f����dZddlZddlZddlmZddlmZddlmZGd�d�Z	Gd�d	�Z
Gd
�de
ej�ZGd�d
e
ej�Zy)z
Support for relaying mail.
�N)�UNIXAddress)�smtp)�logc�*�eZdZdZdd�Zd�Zd�Zd�Zy)�DomainQueuerzM
    An SMTP domain which add messages to a queue intended for relaying.
    c� �||_||_y�N)�service�authed)�selfr
�
authenticateds   �4/usr/lib/python3/dist-packages/twisted/mail/relay.py�__init__zDomainQueuer.__init__s�����#���c�|����j�j�j�r�tdt	�j
�j
dd��}tdt	�j�j
dd��}t|�dk(rt|�dk(r��fd�Stj���)a�
        Check whether mail can be relayed to a user.

        @type user: L{User}
        @param user: A user.

        @rtype: no-argument callable which returns L{IMessage <smtp.IMessage>}
            provider
        @return: A function which takes no arguments and returns a message
            receiver for the user.

        @raise SMTPBadRcpt: When mail cannot be relayed to the user.
        N�@��c�&���j��Sr	)�startMessage)r�users��r�<lambda>z%DomainQueuer.exists.<locals>.<lambda>-s���t�0�0��6�r)
�	willRelay�dest�protocol�filter�str�orig�split�lenr�SMTPBadRcpt)rrrrs``  r�existszDomainQueuer.existss�����>�>�$�)�)�T�]�]�3��$��D�I�I�� 4� 4�S�!� <�=�D��$��D�I�I�� 4� 4�S�!� <�=�D��4�y�A�~�#�d�)�q�.�6�6����t�$�$rc��|jj�}|jxs!t|t�xs|j
dk(S)z�
        Check whether we agree to relay.

        The default is to relay for all connections over UNIX
        sockets and all connections from localhost.
        z	127.0.0.1)�	transport�getPeerr�
isinstancer�host)r�addressr�peers    rrzDomainQueuer.willRelay0s<���!�!�)�)�+���{�{�W�j��{�;�W�t�y�y�K�?W�Wrc	��|jj}|j�\}}|5tjdt|j��dt|j����tjt|j�t|j�g|�ddd�|S#1swY|SxYw)z�
        Create an envelope and a message receiver for the relay queue.

        @type user: L{User}
        @param user: A user.

        @rtype: L{IMessage <smtp.IMessage>}
        @return: A message receiver.
        zQueueing mail z -> N)
r
�queue�createNewMessager�msgrrr�pickle�dump)rrr+�envelopeFile�smtpMessages     rrzDomainQueuer.startMessage:s������"�"��$)�$:�$:�$<�!��k�
�	H��G�G�n�S����^�$6�d�3�t�y�y�>�:L�M�N��K�K��T�Y�Y���T�Y�Y��8�,�G�	H���	H���s�BB6�6CN)F)�__name__�
__module__�__qualname__�__doc__rr"rr�rrrrs���$�%�,X�rrc�*�eZdZd�Zd�Zd�Zd�Zd�Zy)�RelayerMixinc�J�g|_g|_|D]�}t|dzd�5}tj|�}ddd�t|dz�}j|�|jj|�|jj|���y#1swY�axYw)N�-H�rb�-D)�messages�names�openr.�load�append)r�messagePaths�message�fp�messageContentss     r�loadMessageszRelayerMixin.loadMessagesQs�����
���
�#�	'�G��g��n�d�+�
2�r�"(�+�+�b�/��
2��g��n�%�B��"�"�2�&��M�M� � ��1��J�J���g�&�
	'�
2�
2�s�B�B"	c�@�|jsy|jddS)Nr�r=�rs r�getMailFromzRelayerMixin.getMailFrom\� ���}�}���}�}�Q���"�"rc�B�|jsy|jddgS)NrrrHrIs r�	getMailTozRelayerMixin.getMailToas#���}�}���
�
�a� ��#�$�$rc�@�|jsy|jddS)NrrrHrIs r�getMailDatazRelayerMixin.getMailDatafrKrc���|tjvrJtj|jddz�tj|jddz�|j
d=|jd=y)z�Since we only use one recipient per envelope, this
        will be called with 0 or 1 addresses. We probably want
        to do something with the error message if we failed.
        rr<r:N)r�SUCCESS�os�remover>r=)r�code�resp�numOk�	addressesrs      r�sentMailzRelayerMixin.sentMailksY��
�4�<�<���I�I�d�j�j��m�d�*�+��I�I�d�j�j��m�d�*�+��M�M�!���J�J�q�MrN)r2r3r4rFrJrMrOrXr6rrr8r8Ls��
	'�#�
%�
#�

rr8c��eZdZdZd�Zy)�SMTPRelayerz)
    A base class for SMTP relayers.
    c�l�tjj|g|��i|��|j|�y)a�
        @type messagePaths: L{list} of L{bytes}
        @param messagePaths: The base filename for each message to be relayed.

        @type args: 1-L{tuple} of (0) L{bytes} or 2-L{tuple} of
            (0) L{bytes}, (1) L{int}
        @param args: Positional arguments for L{SMTPClient.__init__}

        @type kw: L{dict}
        @param kw: Keyword arguments for L{SMTPClient.__init__}
        N)r�
SMTPClientrrF�rrB�args�kws    rrzSMTPRelayer.__init__}s.��	
��� � ��3��3��3����,�'rN�r2r3r4r5rr6rrrZrZxs���
(rrZc��eZdZdZd�Zy)�ESMTPRelayerz*
    A base class for ESMTP relayers.
    c�l�tjj|g|��i|��|j|�y)a�
        @type messagePaths: L{list} of L{bytes}
        @param messagePaths: The base filename for each message to be relayed.

        @type args: 3-L{tuple} of (0) L{bytes}, (1) L{None} or
            L{ClientContextFactory
            <twisted.internet.ssl.ClientContextFactory>},
            (2) L{bytes} or 4-L{tuple} of (0) L{bytes}, (1) L{None}
            or L{ClientContextFactory
            <twisted.internet.ssl.ClientContextFactory>}, (2) L{bytes},
            (3) L{int}
        @param args: Positional arguments for L{ESMTPClient.__init__}

        @type kw: L{dict}
        @param kw: Keyword arguments for L{ESMTPClient.__init__}
        N)r�ESMTPClientrrFr]s    rrzESMTPRelayer.__init__�s0��"	
���!�!�$�4��4��4����,�'rNr`r6rrrbrb�s���(rrb)r5rRr.�twisted.internet.addressr�twisted.mailr�twisted.pythonrrr8r\rZrdrbr6rr�<module>rhsW��
�
�
�0���8�8�v)�)�X(�,����(�*(�<��!1�!1�(r