+
    üÐj’  ã                   ó¾   € R t ^ RIt^ RIt^ RIHt ^ RIHt ^ RIHt  ! R R4      t	 ! R R4      t
 ! R	 R
]
]P                  4      t ! R R]
]P                  4      tR# )z
Support for relaying mail.
N)ÚUNIXAddress)Úsmtp)Úlogc                   ó@   a € ] tR t^t o RtRR ltR tR tR tRt	V t
R# )	ÚDomainQueuerzE
An SMTP domain which add messages to a queue intended for relaying.
c                ó   € Wn         W n        R # ©N)ÚserviceÚauthed)Úselfr	   Úauthenticateds   &&&Ú4/usr/lib/python3/dist-packages/twisted/mail/relay.pyÚ__init__ÚDomainQueuer.__init__   s   € ØŒØ#Žó    c                ó”  a a€ S P                  SP                  SP                  4      '       d†   \        R\	        SP
                  4      P                  R^4      4      p\        R\	        SP                  4      P                  R^4      4      p\        V4      ^8X  d   \        V4      ^8X  d   V V3R l# \        P                  ! S4      h)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                  ó&   <€ S P                  S4      # 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   ff  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                ó¬   € VP                   P                  4       pV P                  ;'       g(    \        V\        4      ;'       g    VP
                  R8H  # )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   sB   € ð ×!Ñ!×)Ñ)Ó+ˆØ�{‰{×WÐWœj¨¬{Ó;×WÐW¸t¿y¹yÈKÑ?WÐWr   c           
     óª  € V P                   P                  pVP                  4       w  r4V;_uu_ 4        \        P                  ! R\        VP                  4      : R\        VP                  4      : 24       \        P                  ! \        VP                  4      \        VP                  4      .V4       RRR4       V#   + '       g   i     T# ; i)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   r,   Ú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CÃC	)r
   r	   N)F)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r!   r   r   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r   r   r      s$   ø‡ € ñô$ò%ò,X÷ð r   r   c                   ó>   a € ] tR t^Lt o R tR tR tR tR tRt	V t
R# )ÚRelayerMixinc                ó€  € . V n         . V n        V F–  p\        VR ,           R4      ;_uu_ 4       p\        P                  ! V4      pRRR4       \        VR,           4      pXP                  V4       V P                   P                  V4       V P                  P                  V4       K˜  	  R#   + '       g   i     Lo; i)ú-HÚrbNú-D)ÚmessagesÚnamesÚopenr/   Ú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                ó^   € V P                   '       g   R # V P                   ^ ,          ^ ,          # r   ©rC   ©r   s   &r   ÚgetMailFromÚRelayerMixin.getMailFrom\   ó"   € Ø�}�}ˆ}ÙØ�}‰}˜QÕ Õ"Ð"r   c                ó`   € V P                   '       g   R # V P                   ^ ,          ^,          .# r   rO   rP   s   &r   Ú	getMailToÚRelayerMixin.getMailToa   s%   € Ø�}�}ˆ}ÙØ—‘˜aÕ  Õ#Ð$Ð$r   c                ó^   € V P                   '       g   R # V P                   ^ ,          ^,          # r   rO   rP   s   &r   ÚgetMailDataÚRelayerMixin.getMailDataf   rS   r   c                ó  € V\         P                  9   d]   \        P                  ! V P                  ^ ,          R,           4       \        P                  ! V P                  ^ ,          R,           4       V P
                  ^  V P                  ^  R# )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.
rB   r@   N)r   ÚSUCCESSÚosÚremoverD   rC   )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   )rC   rD   N)r4   r5   r6   r7   rL   rQ   rU   rX   rb   r9   r:   r;   s   @r   r>   r>   L   s#   ø‡ € ò
	'ò#ò
%ò
#÷

ð 
r   r>   c                   ó*   a € ] tR t^xt o RtR tRtV tR# )ÚSMTPRelayerz!
A base class for SMTP relayers.
c                óp   € \         P                  P                  ! V .VO5/ VB  V P                  V4       R# )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   rL   ©r   rH   ÚargsÚkws   &&*,r   r   ÚSMTPRelayer.__init__}   s.   € ô 	�‰× Ò  Ð3¨Ò3°Ò3Ø×Ñ˜,Ö'r   © N©r4   r5   r6   r7   r8   r   r9   r:   r;   s   @r   re   re   x   s   ø‡ € ñ÷(ð (r   re   c                   ó*   a € ] tR t^�t o RtR tRtV tR# )ÚESMTPRelayerz"
A base class for ESMTP relayers.
c                óp   € \         P                  P                  ! V .VO5/ VB  V P                  V4       R# )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   rL   rh   s   &&*,r   r   ÚESMTPRelayer.__init__’   s0   € ô" 	×Ñ×!Ò! $Ð4¨Ò4°Ò4Ø×Ñ˜,Ö'r   rl   Nrm   r;   s   @r   ro   ro   �   s   ø‡ € ñ÷(ð (r   ro   )r8   r\   r/   Útwisted.internet.addressr   Útwisted.mailr   Útwisted.pythonr   r   r>   rg   re   rq   ro   rl   r   r   Ú<module>rv      sW   ðñ
ó 
Û å 0Ý Ý ÷8ñ 8÷v)ñ )ôX(�, §¡ô (ô*(�< ×!1Ñ!1ö (r   