File: //usr/lib/python3/dist-packages/twisted/mail/__pycache__/relay.cpython-38.pyc
U
W[� � @ s� d Z ddlmZ ddlmZ ddlmZ ddlZzddlZ W n e
k
rX ddl Z Y nX G dd� d�ZG dd � d �ZG d
d� deej
�ZG dd
� d
eej�ZdS )z
Support for relaying mail.
� )�smtp)�log)�UNIXAddressNc @ s2 e Zd ZdZddd�Zdd� Zdd� Zd d
� ZdS )
�DomainQueuerzM
An SMTP domain which add messages to a queue intended for relaying.
Fc C s || _ || _d S �N)�service�authed)�selfr Z
authenticated� r
�4/usr/lib/python3/dist-packages/twisted/mail/relay.py�__init__ s zDomainQueuer.__init__c st � � �j�j�rftdt�j��dd��}tdt�j��dd��}t|�dkrft|�dkrf� �fdd�S t� ���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�@� � c s
� � ��S r )�startMessager
�r �userr
r �<lambda>3 � z%DomainQueuer.exists.<locals>.<lambda>)
� willRelay�dest�protocol�filter�str�orig�split�lenr ZSMTPBadRcpt)r r r r r
r r �exists s zDomainQueuer.existsc C s$ |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 Zhost)r Zaddressr Zpeerr
r
r r 7 s
�zDomainQueuer.willRelayc C sb | j j}|�� \}}|�@ t�dt|j�t|j�f � t� t|j�t|j�g|� W 5 Q R X |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 �msgr r r �pickle�dump)r r r ZenvelopeFileZsmtpMessager
r
r r C s
�&zDomainQueuer.startMessageN)F)�__name__�
__module__�__qualname__�__doc__r r r r r
r
r
r r s
r c @ s4 e Zd Zdd� Zdd� Zdd� Zdd� Zd d
� ZdS )�RelayerMixinc
C sj g | _ g | _|D ]T}t|d ��}t�|�}W 5 Q R X t|d �}|�|� | j �|� | j�|� qd S )N�-H�-D)�messages�names�openr! �load�append)r �messagePaths�message�fpZmessageContentsr
r
r �loadMessages] s
zRelayerMixin.loadMessagesc C s | j s
d S | j d d S )Nr �r* �r r
r
r �getMailFromi s zRelayerMixin.getMailFromc C s | j s
d S | j d d gS )Nr r r3 r4 r
r
r � getMailToo s zRelayerMixin.getMailToc C s | j s
d S | j d d S )Nr r r3 r4 r
r
r �getMailDatau s zRelayerMixin.getMailDatac C sF |t jkr2t�| jd d � t�| jd d � | 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.
r r) r( N)r �SUCCESS�os�remover+ r* )r �codeZrespZnumOkZ addressesr r
r
r �sentMail{ s
zRelayerMixin.sentMailN)r# r$ r% r2 r5 r6 r7 r<