HEX
Server: Apache
System: Linux scp1.abinfocom.com 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: confeduphaar (1010)
PHP: 8.1.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //lib/python3/dist-packages/twisted/mail/__pycache__/relay.cpython-38.pyc
U


W[��@s�dZddlmZddlmZddlmZddlZz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
�4/usr/lib/python3/dist-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
����Sr)�startMessager
�r	�userr
r�<lambda>3�z%DomainQueuer.exists.<locals>.<lambda>)
�	willRelay�dest�protocol�filter�str�orig�split�lenrZSMTPBadRcpt)r	rrrr
rr�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�
isinstancerZhost)r	ZaddressrZpeerr
r
rr7s
�zDomainQueuer.willRelayc	Csb|jj}|��\}}|�@t�dt|j�t|j�f�t�	t|j�t|j�g|�W5QRX|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 -> %r)
r�queueZcreateNewMessager�msgrrr�pickle�dump)r	rrZenvelopeFileZsmtpMessager
r
rrCs
�&zDomainQueuer.startMessageN)F)�__name__�
__module__�__qualname__�__doc__rrrrr
r
r
rrs

rc@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�RelayerMixinc
Csjg|_g|_|D]T}t|d��}t�|�}W5QRXt|d�}|�|�|j�|�|j�|�qdS)N�-H�-D)�messages�names�openr!�load�append)r	�messagePaths�message�fpZmessageContentsr
r
r�loadMessages]s
zRelayerMixin.loadMessagescCs|js
dS|jddS)Nr�r*�r	r
r
r�getMailFromiszRelayerMixin.getMailFromcCs|js
dS|jddgS)Nrrr3r4r
r
r�	getMailTooszRelayerMixin.getMailTocCs|js
dS|jddS)Nrrr3r4r
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.
        rr)r(N)r�SUCCESS�os�remover+r*)r	�codeZrespZnumOkZ	addressesrr
r
r�sentMail{s

zRelayerMixin.sentMailN)r#r$r%r2r5r6r7r<r
r
r
rr'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�
SMTPClientrr2�r	r/�args�kwr
r
rr�szSMTPRelayer.__init__N�r#r$r%r&rr
r
r
rr=�sr=c@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�ESMTPClientrr2r?r
r
rr�szESMTPRelayer.__init__NrBr
r
r
rrC�srC)r&Ztwisted.mailrZtwisted.pythonrZtwisted.internet.addressrr9ZcPickler!�ImportErrorrr'r>r=rDrCr
r
r
r�<module>sA2