Your IP : 216.73.216.213


Current Path : /opt/alt/python37/lib64/python3.7/site-packages/twisted/mail/__pycache__/
Upload File :
Current File : //opt/alt/python37/lib64/python3.7/site-packages/twisted/mail/__pycache__/relay.cpython-37.pyc

B

:��]��@s�dZddlmZddlmZddlmZddlZyddlZ	Wne
k
rXddl	Z	YnXGdd�d�ZGdd	�d	�ZGd
d�deej
�ZGdd
�d
eej�ZdS)z
Support for relaying mail.
�)�smtp)�log)�UNIXAddressNc@s2eZdZdZddd�Zdd�Zdd�Zd	d
�ZdS)
�DomainQueuerzM
    An SMTP domain which add messages to a queue intended for relaying.
    FcCs||_||_dS)N)�service�authed)�selfrZ
authenticated�r	�E/opt/alt/python37/lib64/python3.7/site-packages/twisted/mail/relay.py�__init__szDomainQueuer.__init__cst���j�j�rftdt�j��dd��}tdt�j��dd��}t|�dkrft|�dkrf��fdd�St�	���dS)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�@��cs
����S)N)�startMessager	)r�userr	r
�<lambda>3�z%DomainQueuer.exists.<locals>.<lambda>)
�	willRelay�dest�protocol�filter�str�orig�split�lenrZSMTPBadRcpt)rrrrr	)rrr
�exists szDomainQueuer.existscCs$|j��}|jp"t|t�p"|jdkS)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)Z	transportZgetPeerr�
isinstancer�host)r�addressrZpeerr	r	r
r7s
zDomainQueuer.willRelayc	Csb|jj}|��\}}|�@t�dt|j�t|j�f�t�	t|j�t|j�g|�WdQRX|S)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 %r -> %rN)
r�queueZcreateNewMessager�msgrrr�pickle�dump)rrrZenvelopeFileZsmtpMessager	r	r
rCs
&zDomainQueuer.startMessageN)F)�__name__�
__module__�__qualname__�__doc__rrrrr	r	r	r
rs

rc@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�RelayerMixinc
Csng|_g|_x\|D]T}t|d��}t�|�}WdQRXt|d�}|�|�|j�|�|j�|�qWdS)Nz-Hz-D)�messages�names�openr!�load�append)r�messagePaths�message�fpZmessageContentsr	r	r
�loadMessages]s

zRelayerMixin.loadMessagescCs|js
dS|jddS)Nr)r()rr	r	r
�getMailFromiszRelayerMixin.getMailFromcCs|js
dS|jddgS)Nrr
)r()rr	r	r
�	getMailTooszRelayerMixin.getMailTocCs|js
dS|jddS)Nrr)r()rr	r	r
�getMailDatauszRelayerMixin.getMailDatacCsF|tjkr2t�|jdd�t�|jdd�|jd=|jd=dS)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.
        rz-Dz-HN)r�SUCCESS�os�remover)r()r�codeZrespZnumOkZ	addressesrr	r	r
�sentMail{s

zRelayerMixin.sentMailN)r#r$r%r0r1r2r3r8r	r	r	r
r'Ws
r'c@seZdZdZdd�ZdS)�SMTPRelayerz)
    A base class for SMTP relayers.
    cOs"tjj|f|�|�|�|�dS)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�
SMTPClientrr0)rr-�args�kwr	r	r
r�szSMTPRelayer.__init__N)r#r$r%r&rr	r	r	r
r9�sr9c@seZdZdZdd�ZdS)�ESMTPRelayerz*
    A base class for ESMTP relayers.
    cOs"tjj|f|�|�|�|�dS)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�ESMTPClientrr0)rr-r;r<r	r	r
r�szESMTPRelayer.__init__N)r#r$r%r&rr	r	r	r
r=�sr=)r&Ztwisted.mailrZtwisted.pythonrZtwisted.internet.addressrr5ZcPickler!�ImportErrorrr'r:r9r>r=r	r	r	r
�<module>sA2