← Back
Editing: 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<