Your IP : 216.73.216.213
B
:��]� � @ s� d Z ddlmZ ddlmZ ddlmZ ddlZyddlZ 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 �E/opt/alt/python37/lib64/python3.7/site-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 )N)�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 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 �host)r �addressr 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 dQ 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 -> %rN)
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 sn g | _ g | _x\|D ]T}t|d ��}t�|�}W d Q R X t|d �}|�|� | j �|� | j�|� qW d S )Nz-Hz-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
)r( )r r r r
� getMailToo s zRelayerMixin.getMailToc C s | j s
d S | j d d S )Nr r )r( )r 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 z-Dz-HN)r �SUCCESS�os�remover) r( )r �codeZrespZnumOkZ addressesr r r r
�sentMail{ s
zRelayerMixin.sentMailN)r# r$ r% r0 r1 r2 r3 r8 r r r r
r'