File: //usr/lib/python3/dist-packages/twisted/mail/__pycache__/relay.cpython-310.pyc
o
�b� � @ s� d Z ddlZddlZddlmZ ddlmZ ddlmZ G dd� d�Z G dd � d �Z
G d
d� de
ej�ZG dd
� d
e
ej
�ZdS )z
Support for relaying mail.
� N)�UNIXAddress)�smtp)�logc @ 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 �
authenticated� r �4/usr/lib/python3/dist-packages/twisted/mail/relay.py�__init__ s
zDomainQueuer.__init__c sp � � �j�j�r3tdt�j��dd��}tdt�j��dd��}t|�dkr3t|�dkr3� �fdd�S t� ���)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>- s
z%DomainQueuer.exists.<locals>.<lambda>)
� willRelay�dest�protocol�filter�str�orig�split�lenr �SMTPBadRcpt)r r r r r r r �exists s
zDomainQueuer.existsc C s$ |j �� }| jpt|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)� transport�getPeerr �
isinstancer �host)r �addressr �peerr r r r 0 s
zDomainQueuer.willRelayc C s| | j j}|�� \}}|�( t�dt|j��dt|j���� t� t|j�t|j�g|� W d � |S 1 s7w Y |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 z -> N)
r �queue�createNewMessager �msgr r r �pickle�dump)r r r% �envelopeFile�smtpMessager r r r : 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 s� g | _ g | _|D ]5}t|d d��
}t�|�}W d � n1 s!w Y t|d �}|�|� | j �|� | j�|� qd S )N�-H�rb�-D)�messages�names�openr( �load�append)r �messagePaths�message�fp�messageContentsr r r �loadMessagesR s �
�zRelayerMixin.loadMessagesc C s | j sd S | j d d S )Nr �r4 �r r r r �getMailFrom] � zRelayerMixin.getMailFromc C s | j sd S | j d d gS )Nr r r>