ó
    Ö›‘h’  ã                   ó¼   • S r SSKrSSKrSSKJr  SSKJr  SSKJr   " S S5      r	 " S S	5      r
 " S
 S\
\R                  5      r " S S\
\R                  5      rg)z
Support for relaying mail.
é    N)ÚUNIXAddress)Úsmtp)Úlogc                   ó4   • \ rS rSrSrS	S jrS rS rS rSr	g)
ÚDomainQueueré   zE
An SMTP domain which add messages to a queue intended for relaying.
c                 ó   • Xl         X l        g ©N)ÚserviceÚauthed)Úselfr   Úauthenticateds      ÚVC:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\twisted/mail/relay.pyÚ__init__ÚDomainQueuer.__init__   s   € ØŒØ#�ó    c                 óŽ  ^ ^• T R                  TR                  TR                  5      (       aƒ  [        S[	        TR
                  5      R                  SS5      5      n[        S[	        TR                  5      R                  SS5      5      n[        U5      S:X  a  [        U5      S:X  a  U U4S j$ [        R                  " T5      e)aI  
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                  ó&   >• T R                  T5      $ r
   )ÚstartMessage)r   Úusers   €€r   Ú<lambda>Ú%DomainQueuer.exists.<locals>.<lambda>-   s   ø€ ˜t×0Ñ0°Ô6r   )
Ú	willRelayÚdestÚprotocolÚfilterÚstrÚorigÚsplitÚlenr   ÚSMTPBadRcpt)r   r   r!   r   s   ``  r   ÚexistsÚDomainQueuer.exists   sŒ   ù€ ð �>‰>˜$Ÿ)™) T§]¡]×3Ñ3ä˜$¤ D§I¡I£× 4Ñ 4°S¸!Ó <Ó=ˆDÜ˜$¤ D§I¡I£× 4Ñ 4°S¸!Ó <Ó=ˆDÜ�4‹y˜A‹~¤# d£)¨q£.Ý6Ð6Ü×Ò˜tÓ$Ð$r   c                 ó¨   • UR                   R                  5       nU R                  =(       d&    [        U[        5      =(       d    UR
                  S:H  $ )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   Úpeers       r   r   ÚDomainQueuer.willRelay0   s<   € ð ×!Ñ!×)Ñ)Ó+ˆØ�{‰{×Wœj¨¬{Ó;×W¸t¿y¹yÈKÑ?WÐWr   c           	      ó–  • U R                   R                  nUR                  5       u  p4U   [        R                  " S[        UR                  5      < S[        UR                  5      < 35        [        R                  " [        UR                  5      [        UR                  5      /U5        SSS5        U$ ! , (       d  f       U$ = f)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.
zQueueing mail z -> N)
r   ÚqueueÚcreateNewMessager   Úmsgr    r!   r   ÚpickleÚdump)r   r   r0   ÚenvelopeFileÚsmtpMessages        r   r   ÚDomainQueuer.startMessage:   s’   € ð —‘×"Ñ"ˆØ$)×$:Ñ$:Ó$<Ñ!ˆÚÜ�GŠG�n¤S¨¯©£^Ñ$6°d¼3¸t¿y¹y»>Ñ:LÐMÔNÜ�KŠKœ˜TŸY™Y›¬¨T¯Y©Y«Ð8¸,ÔG÷ ð Ð÷ Œ\ð Ðús   «BB9Â9
C)r   r   N)F)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r%   r   r   Ú__static_attributes__© r   r   r   r      s   † ñô$ò%ò,Xõr   r   c                   ó2   • \ rS rSrS rS rS rS rS rSr	g)	ÚRelayerMixinéL   c                 óZ  • / U l         / U l        U H†  n[        US-   S5       n[        R                  " U5      nS S S 5        [        US-   5      nWR                  U5        U R                   R                  U5        U R                  R                  U5        Mˆ     g ! , (       d  f       Nh= f)Nú-HÚrbú-D)ÚmessagesÚnamesÚopenr3   ÚloadÚappend)r   ÚmessagePathsÚmessageÚfpÚmessageContentss        r   ÚloadMessagesÚRelayerMixin.loadMessagesQ   sƒ   € ØˆŒØˆŒ
Û#ˆGÜ�g ‘n dÔ+¨rÜ"(§+¢+¨b£/�÷ ,ä�g ‘nÓ%ˆBØ×"Ñ" 2Ô&Ø�M‰M× Ñ  Ô1Ø�J‰J×Ñ˜gÖ&ò $ß+Õ+ús   £BÂ
B*	c                 óJ   • U R                   (       d  g U R                   S   S   $ )Nr   ©rF   ©r   s    r   ÚgetMailFromÚRelayerMixin.getMailFrom\   ó    € Ø�}�}ØØ�}‰}˜QÑ Ñ"Ð"r   c                 óL   • U R                   (       d  g U R                   S   S   /$ )Nr   r   rR   rS   s    r   Ú	getMailToÚRelayerMixin.getMailToa   s#   € Ø�}�}ØØ—‘˜aÑ  Ñ#Ð$Ð$r   c                 óJ   • U R                   (       d  g U R                   S   S   $ )Nr   r   rR   rS   s    r   ÚgetMailDataÚRelayerMixin.getMailDataf   rV   r   c                 óø   • U[         R                  ;   aL  [        R                  " U R                  S   S-   5        [        R                  " U R                  S   S-   5        U R
                  S	 U R                  S	 g)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   rE   rC   N)r   ÚSUCCESSÚosÚremoverG   rF   )r   ÚcodeÚrespÚnumOkÚ	addressesr   s         r   ÚsentMailÚRelayerMixin.sentMailk   sY   € ð
 ”4—<‘<Óä�IŠI�d—j‘j ‘m dÑ*Ô+Ü�IŠI�d—j‘j ‘m dÑ*Ô+Ø�M‰M˜!ÐØ�J‰J�q‰Mr   )rF   rG   N)
r8   r9   r:   r;   rO   rT   rX   r[   re   r=   r>   r   r   r@   r@   L   s   † ò
	'ò#ò
%ò
#õ

r   r@   c                   ó   • \ rS rSrSrS rSrg)ÚSMTPRelayeréx   z!
A base class for SMTP relayers.
c                 ón   • [         R                  R                  " U /UQ70 UD6  U R                  U5        g)aN  
@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   rO   ©r   rK   ÚargsÚkws       r   r   ÚSMTPRelayer.__init__}   s.   € ô 	�‰× Ò  Ð3¨Ò3°Ò3Ø×Ñ˜,Õ'r   r>   N©r8   r9   r:   r;   r<   r   r=   r>   r   r   rh   rh   x   s   † ñõ(r   rh   c                   ó   • \ rS rSrSrS rSrg)ÚESMTPRelayeré�   z"
A base class for ESMTP relayers.
c                 ón   • [         R                  R                  " U /UQ70 UD6  U R                  U5        g)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   rO   rl   s       r   r   ÚESMTPRelayer.__init__’   s0   € ô" 	×Ñ×!Ò! $Ð4¨Ò4°Ò4Ø×Ñ˜,Õ'r   r>   Nrp   r>   r   r   rr   rr   �   s   † ñõ(r   rr   )r<   r_   r3   Útwisted.internet.addressr   Útwisted.mailr   Útwisted.pythonr   r   r@   rk   rh   ru   rr   r>   r   r   Ú<module>rz      sW   ðñ
ó 
Û å 0Ý Ý ÷8ñ 8÷v)ñ )ôX(�, §¡ô (ô*(�< ×!1Ñ!1õ (r   