
    !hk                    h   S r SSKJ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KJr  SSKJr  SS	KJr  SS
KJr  SSKJrJrJr  SSKJr  SSKJr  SSKJr  SSKJr  SSK J!r!  \(       a&  SSK"J#r#J$r$  SSK%J&r&  SSK'J(r(  SSK)J*r*  SSK+J,r,  SSK-J.r.  \R^                  " \05      r1Sr2SS jr3 " S S5      r4g)zB
Mail sending helpers

See documentation in docs/topics/email.rst
    )annotationsN)encoders)MIMEBase)MIMEMultipart)MIMENonMultipart)MIMEText)
formatdate)BytesIO)IOTYPE_CHECKINGAny)ssl)Deferred)ScrapyDeprecationWarning)arg_to_iterto_bytes)CallableSequenceESMTPSenderFactory)Failure)Self)Crawler)BaseSettingsz, c                     U c  g [        U 5      $ Nr   )texts    R/root/1688_scrapy/alibaba-scraper/venv/lib/python3.13/site-packages/scrapy/mail.py_to_bytes_or_noner    1   s    |D>    c                  .   \ rS rSr        S               SS jjr\SS j5       r\SS j5       r\SS j5       r     S                 SS jjr	            SS jr
            SS	 jrSS
 jr        SS jrSrg)
MailSender7   Nc	                    Xl         XPl        [        U5      U l        [        U5      U l        X`l        Xpl        X l        Xl        g r   )	smtphostsmtpportr    smtpusersmtppasssmtptlssmtpsslmailfromdebug)	selfr&   r,   r(   r)   r'   r*   r+   r-   s	            r   __init__MailSender.__init__8   s:     &%&7&A&7&A$$% 
r!   c                r    [         R                  " U R                   S3[        SS9  U R	                  U5      $ )Nz;.from_settings() is deprecated, use from_crawler() instead.   )category
stacklevel)warningswarn__name__r   _from_settingsclssettingss     r   from_settingsMailSender.from_settingsL   s6    ||nWX-	

 !!(++r!   c                8    U R                  UR                  5      $ r   )r8   r;   )r:   crawlers     r   from_crawlerMailSender.from_crawlerU   s    !!'"2"233r!   c                    U " US   US   US   US   UR                  S5      UR                  S5      UR                  S5      S9$ )	N	MAIL_HOST	MAIL_FROM	MAIL_USER	MAIL_PASS	MAIL_PORTMAIL_TLSMAIL_SSL)r&   r,   r(   r)   r'   r*   r+   )getintgetboolr9   s     r   r8   MailSender._from_settingsY   sW    k*k*k*k*__[1$$Z0$$Z0
 	
r!   c	           	       ^ SSK Jn	  U(       a
  [        5       O[        UR	                  SS5      6 n
[        [        U5      5      n[        [        U5      5      nU R                  U
S'   [        R                  U5      U
S'   [        SS9U
S	'   X*S
'   US S  nU(       a)  UR                  U5        [        R                  U5      U
S'   U(       a  U(       a  U
R                  U5        U
R                  [        USU=(       d    S5      5        U Ht  u  pn[        UR	                  S5      6 nUR!                  UR#                  5       5        [$        R&                  " U5        UR)                  SSUS9  U
R                  U5        Mv     OU
R!                  X75        U(       a  U" XX4XZS9  U R*                  (       a%  [,        R+                  SUUU[/        U5      S.5        g U R1                  XR3                  5       R5                  U=(       d    S5      5      mTR7                  U R8                  XU[/        U5      5        TR;                  U R<                  XU[/        U5      5        U	R?                  SSU4S j5        T$ )Nr   reactor/   FromToT)	localtimeDateSubjectCcplainzus-asciizContent-Disposition
attachment)filename)tosubjectbodyccattachmsgzaDebug mail sent OK: To=%(mailto)s Cc=%(mailcc)s Subject="%(mailsubject)s" Attachs=%(mailattachs)dmailtomailccmailsubjectmailattachszutf-8beforeshutdownc                    > T $ r    )dfds   r   <lambda>!MailSender.send.<locals>.<lambda>   s    Cr!   ) twisted.internetrO   r   r   splitlistr   r,   
COMMASPACEjoinr	   extendset_charsetr_   r   r   set_payloadreadEncodersencode_base64
add_headerr-   loggerlen	_sendmail	as_stringencodeaddCallback_sent_ok
addErrback_sent_failedaddSystemEventTrigger)r.   r[   r\   r]   r^   attachsmimetypecharset	_callbackrO   r`   rcptsattach_nameattach_mimetypefpartrj   s                   @r   sendMailSender.sende   s    	-  'MO,<hnnSRS>T,U 	 +b/"+b/"mmFOOB'D	 40F I1LL"+CI(JJxgw/D*EF3:/a!6!6s!;<  *&&t,)<+    

4  4; OOD*4wX::LLD ! #*#&w<		 !^^==?))'*<W=
 	rwGEt(("'3w<H%%h
KH
r!   c                :    [         R                  SUUUUS.5        g )Nz[Mail sent OK: To=%(mailto)s Cc=%(mailcc)s Subject="%(mailsubject)s" Attachs=%(mailattachs)dra   )ry   info)r.   resultr[   r^   r\   nattachss         r   r   MailSender._sent_ok   s)     	@ &'			
r!   c           	     h    [        UR                  5      n[        R                  SUUUUUS.5        U$ )NzoUnable to send mail: To=%(mailto)s Cc=%(mailcc)s Subject="%(mailsubject)s" Attachs=%(mailattachs)d- %(mailerr)s)rb   rc   rd   re   mailerr)strvaluery   error)r.   failurer[   r^   r\   r   errstrs          r   r   MailSender._sent_failed   s@     W]]# &'!		
 r!   c                J   SSK Jn  [        U5      n[        5       nU R	                  XU5      nU R
                  (       a=  UR                  U R                  U R                  U[        R                  " 5       5        U$ UR                  U R                  U R                  U5        U$ )Nr   rN   )rm   rO   r
   r   _create_sender_factoryr+   
connectSSLr&   r'   r   ClientContextFactory
connectTCP)r.   to_addrsr`   rO   msg_iodfactorys          r   r{   MailSender._sendmail   s~    ,#:--hB<<t}}gs7O7O7Q  t}}dmmWEr!   c                    SSK Jn  SSU R                  U R                  S.nU" U R                  U R
                  U R                  UUU40 UD6nSUl        U$ )Nr   r   TF)heloFallbackrequireAuthenticationrequireTransportSecurityhostname)twisted.mail.smtpr   r*   r&   r(   r)   r,   noisy)r.   r   r`   r   r   factory_keywordsr   s          r   r   !MailSender._create_sender_factory   sg     	9 !%*(,	,
 %MMMMMM
 
 r!   )r-   r,   r&   r)   r'   r+   r*   r(   )	localhostzscrapy@localhostNN   FFF)r&   r   r,   r   r(   
str | Noner)   r   r'   intr*   boolr+   r   r-   r   )r;   r   returnr   )r?   r   r   r   )Nri   z
text/plainNN)r[   zstr | list[str]r\   r   r]   r   r^   zstr | list[str] | Noner   z"Sequence[tuple[str, str, IO[Any]]]r   r   r   r   r   zCallable[..., None] | Noner   zDeferred[None] | None)r   r   r[   	list[str]r^   r   r\   r   r   r   r   None)r   r   r[   r   r^   r   r\   r   r   r   r   r   )r   r   r`   bytesr   Deferred[Any])r   r   r`   z	IO[bytes]r   r   r   r   )r7   
__module____qualname____firstlineno__r/   classmethodr<   r@   r8   r   r   r   r{   r   __static_attributes__ri   r!   r   r#   r#   7   s    $*##!! ! 	!
 ! ! ! ! !( , , 4 4 	
 	
  &*68$"04BB B 	B
 #B 4B B B .B 
BH

(
.7
BE
QT
	
  	
   
."!(16C	r!   r#   )r   zstr | bytes | Noner   zbytes | None)5__doc__
__future__r   loggingr5   emailr   rv   email.mime.baser   email.mime.multipartr   email.mime.nonmultipartr   email.mime.textr   email.utilsr	   ior
   typingr   r   r   rm   r   twisted.internet.deferr   scrapy.exceptionsr   scrapy.utils.miscr   scrapy.utils.pythonr   collections.abcr   r   r   r   twisted.python.failurer   typing_extensionsr   scrapy.crawlerr   scrapy.settingsr   	getLoggerr7   ry   rp   r    r#   ri   r!   r   <module>r      s    #   & $ . 4 $ "  ) )   + 6 ) (2 5. '&, 
		8	$
 
~ ~r!   