ó ŸçƒQc@sÖddlmZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddlZ e jjjZd„Zee jjjd||_||_tjj||tj|_||_dS(N(R!R"R R Rt SMTP_SSL_PORTt default_portR (RR R!R"R((s2/sys/lib/python2.7/site-packages/mercurial/mail.pyRBs    cCsz|jdkr+tjdI||fIJntj||f|ƒ}tj||j|j|j }t j |ƒ|_ |S(Nisconnect:( t debugleveltsyststderrtsockettcreate_connectionRRR!R"R R RR(Rthosttportttimeoutt new_socket((s2/sys/lib/python2.7/site-packages/mercurial/mail.pyR)Is   N(R&R'R(RRR)(((s2/sys/lib/python2.7/site-packages/mercurial/mail.pyR*=scKstjtdƒƒ‚dS(Ns"SMTPS requires Python 2.6 or later(RtAbortR(R R!R"R((s2/sys/lib/python2.7/site-packages/mercurial/mail.pyR*Sscs1|jddƒ}|jdddƒ}|dkp?tj|ƒ}|dk}|sZ|r…tjtdƒ r…tjtdƒƒ‚n|jdd ƒ}|sµtjtd ƒƒ‚n|jdd d ƒ}|dkr tj|ƒtk r tjtdƒ|ƒ‚q n|s|r1|r1tj ||ƒ}ni}|re|j tdƒƒt |d|ƒ‰n-|r€t |d|ƒ‰nt jd|ƒ‰|r¡d}nd}tj|jdd|ƒƒ} |j tdƒ|| fƒˆjd |d| ƒ|r2|j tdƒƒˆjƒˆjƒˆjƒn|s>|r||r||j tdƒƒtj||ƒˆj|d kƒn|jddƒ} |jddƒ} | r¼| r¼|jƒ} n| r| r|j tdƒ| ƒyˆj| | ƒWqt jk r} tj| ƒ‚qXn‡fd†} | S(s;build an smtp connection and return a function to send mailtsmtptlocal_hostnamettlstnoneRtsmtpstssls/can't use TLS: Python SSL support not installedR2s+smtp.host not configured - cannot send mailt verifycerttstricttlooses)invalid smtp.verifycert configuration: %ss(using smtps) iÑiR3s$sending mail: smtp host %s, port %s s(using starttls) s(verifying remote certificate) tusernametpasswords&(authenticating to mail server as %s) csšyˆj|||ƒSWn|tjk rq}g|jjƒD]}|d^q<}tjddj|ƒƒ‚n%tjk r•}tj|ƒ‚nXdS(Nis ( tsendmailR tSMTPRecipientsRefusedt recipientstvaluesRR6tjoinR(tsenderRDR#tinsttr(ts(s2/sys/lib/python2.7/site-packages/mercurial/mail.pytsendŽs&(R>R?(tconfigRt parseboolRR0R6RtFalseRR tnoteR*R R R tgetporttconnecttehloRt validatorRtgetpasstloginR(tuiR8R9RR;tmailhostR=R t defaultporttmailportR@RARHRK((RJs2/sys/lib/python2.7/site-packages/mercurial/mail.pyt_smtpVsf      %   cCsÔ|jddƒ}d|tj|ƒdjttj|ƒƒf}|jtdƒ|ƒtj|dƒ}|j|ƒ|j ƒ}|rÐtj dt j j |jd dƒd ƒtj|ƒd fƒ‚nd S( ssend mail using sendmail.temailtmethods %s -f %s %sRssending mail: %s tws%s %siiN(RLRR[RFtmapRORtpopentwritetcloseR6tostpathtbasenametsplitRt explainexit(RVRGRDR#tprogramtcmdlinetfptret((s2/sys/lib/python2.7/site-packages/mercurial/mail.pyt _sendmail™s   cCsft|dƒ}tjdtjƒƒ}|jd||fƒ|j|ƒ|jdƒ|jƒdS(swrite mails to mboxsab+s%a %b %d %H:%M:%S %Ys From %s %s s N(topenttimetstrftimet localtimeR`Ra(tmboxRGRDR#Ritdate((s2/sys/lib/python2.7/site-packages/mercurial/mail.pyt_mbox§s   csXˆr&tˆdƒjƒ‡fd†SˆjdddƒdkrKtˆƒS‡fd†S(snmake a mail connection. return a function to send mail. call as sendmail(sender, list-of-recipients, msg).twbcstˆ|||ƒS(N(Rr(RJRItm(Rp(s2/sys/lib/python2.7/site-packages/mercurial/mail.pyt·sR[R\R7cstˆ|||ƒS(N(Rk(RJRIRt(RV(s2/sys/lib/python2.7/site-packages/mercurial/mail.pyRuºs(RlRaRLRZ(RVRp((RpRVs2/sys/lib/python2.7/site-packages/mercurial/mail.pyRQ²s   cCs"t|d|ƒ}||||ƒS(NRp(RQ(RVRGRDR#RpRK((s2/sys/lib/python2.7/site-packages/mercurial/mail.pyRB¼scCs}|jdddƒ}|dkrN|jddƒsytjtdƒƒ‚qyn+tj|ƒsytjtdƒ|ƒ‚ndS(s=determine if we have enough config data to try sending email.R[R\R7R2s>smtp specified as email transport, but no smtp host configureds0%r specified as email transport, but not in PATHN(RLRR6Rtfindexe(RVR\((s2/sys/lib/python2.7/site-packages/mercurial/mail.pytvalidateconfigÀs tplaincCsod}|s_y|jdƒWq_tk r[y|jdƒd}Wq\tk rWq\Xq_Xnt|||ƒS(sžReturn MIME message suitable for a patch. Charset will be detected as utf-8 or (possibly fake) us-ascii. Transfer encodings will be used if necessary.sus-asciisutf-8(tdecodetUnicodeDecodeErrort mimetextqp(RJtsubtypetdisplaytcs((s2/sys/lib/python2.7/site-packages/mercurial/mail.pyt mimetextpatchÌs     cCs~d}x?|jƒD]1}t|ƒdkrtj|ƒ}d}PqqWtjj|||ƒ}|rz|d=||ds2$H$  C