g ddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl m ZgdZdZdZdZdZdZd Zej,d ej.ZGd d eZGd deZGddeZGddeZGddeZGddeZGddeZ GddeZ!GddeZ"GddeZ#dZ$d Z%d!Z&d"Z'd#Z( ddl)Z)d$Z*Gd&d'Z,e*rGd(d)e,Z-ej]d)d*Z/Gd+d,e,Z0e1d-k(rd.Z2e2d/Z3e2d0jid1Z5e6d2d3Z7e jpjsxZ:r"e7e:zZ7e jpjsxZ:r"e6d4e;e7ze,d5Zrrc eZdZy)rNrrrrrrKrrc eZdZy)rNrrrrrrRsrrceZdZ dZy)rc2||_||_||f|_yN) smtp_code smtp_errorargs)selfcodemsgs r__init__zSMTPResponseException.__init__cs3K rNrrrr(rrrrrZs  rrceZdZ dZy)rcB||_||_||_|||f|_yr!)r"r#senderr$)r%r&r'r,s rr(zSMTPSenderRefused.__init__os% 3' rNr)rrrrrhs  (rrceZdZ dZy)r c"||_|f|_yr!) recipientsr$)r%r/s rr(zSMTPRecipientsRefused.__init__}s$M rNr)rrrr r us "rr c eZdZy)r Nrrrrr r s1rr c eZdZy)r Nrrrrr r s0rr c eZdZy)r Nrrrrr r s,rr c eZdZy)r Nrrrrr r rrr c tjj|\}}||fdk(r&|jj dr|Sd|zSd|zS)Nr6)emailutils parseaddrstrip startswith addrstring displaynameaddrs rrrsa --j9KTh&     ( ( -  "" D=rc\tjj|\}}||fdk(r|S|S)Nr5)r8r9r:r=s r _addr_onlyrBs3 --j9KTh& Krc d tjddtjdt|S)Nz(?m)^\.z..(?:\r\n|\n|\r(?!\n))resubCRLFdatas rrrs/ 66*d &d3 55rc0tjdd|S)Ns(?m)^\.s..)rFrG)bindatas r_quote_periodsrMs 66+ug ..rc8tjdt|S)NrDrErIs r _fix_eolsrOs FF*D$ 77rTFcReZdZ dZdZdZdZdZdZdZ e Z ddde jdfdZdZdZd Zd Zd Zd+d Zd Zd,dZdZd,dZd,dZd,dZdZd,dZdZdZdZd-dZ d-dZ!dZ"dZ#e#Z$dZ%dZ&ddd Z'd.d!Z(d.d"Z)d.d#Z*ddd$Z+dd%d&Z, d/d'Z- d0d(Z.d)Z/d*Z0y)1rrNehloFr6c ||_||_i|_d|_||_d|_|r6|j ||\}}|dk7r|jt|||||_ ytj}d|vr||_ yd} tjtj} d| z|_ y#tj$rY wxYw)Nasciir.z 127.0.0.1z[%s])_hosttimeoutesmtp_featurescommand_encodingsource_address_auth_challenge_countconnectcloser local_hostnamesocketgetfqdn gethostbyname gethostnamegaierror) r%hostportr^rWrZr&r'fqdnr@s rr(z SMTP.__init__s     ',%&" ,,tT2KT3s{ &tS11  %"0D  >>#Dd{&*##!//0B0B0DED'-tm#s'CCCc|Sr!rr%s r __enter__zSMTP.__enter__s rc |jd\}}|dk7r t|| |jy#t$rYwxYw#|jwxYw)NQUIT)docmdrrr])r%r$r&messages r__exit__z SMTP.__exit__s]  JJv.MD's{+D':: JJL&    JJLs&%9A AAAAAc ||_yr!) debuglevel)r%rqs rset_debuglevelzSMTP.set_debuglevel"s %rc|jdkDrHttjjj g|dt j iyt|dt j iy)Nfile)rqprintdatetimenowtimesysstderrr%r$s r _print_debugzSMTP._print_debug+sM ??Q  (##'')..0 I4 Icjj I 4 )cjj )rc| |s td|jdkDr|jd||f|jt j ||f||jS)N0Non-blocking socket (timeout=0) is not supportedrz connect: to) ValueErrorrqr}rZr_create_connection)r%rdrerWs r _get_socketzSMTP._get_socket1sd  wOP P ??Q    mdD\4;N;N O''t g(,(;(;= =rc |r||_|sR|jd|jdk(r/|jd}|dk\r|d|||dzd}} t|}|s |j }tjd||||j|||j|_ d|_ |j\}}|jdkDr|jdt!|||fS#t$r t dwxYw)N:rrtznonnumeric portzsmtplib.connectconnect:)rZfindrfindintrOSError default_portrzauditrrWsockrugetreplyrqr}repr)r%rdrerZir&r's rr\z SMTP.connect;s  "0D 34::c?: 3AAv!"1XtAEF|d5t9D$$D #T46$$T4>  mmo s ??Q    j$s) 4c{"5!"3445s  C//Dc |jdkDr|jdt||jr_t |t r|j |j}tjd|| |jj|ytd#t$r|jtdwxYw)Nrzsend:z smtplib.sendServer not connectedzplease run connect() first)rqr}rr isinstancestrencoderYrzrsendallrr]r)r%ss rsendz SMTP.send\s% ??Q    gtAw / 99!S!HHT223 IIndA . E !!!$ ))EF F  E ,-CDD Es ;B""%Cc |dk(r|}n|d|}d|vsd|vr0|jddjdd}td||j|ty)Nr6   z\nz\rz=command and arguments contain prohibited newline characters: )replacerrrH)r%cmdr$rs rputcmdz SMTP.putcmdosx+ 2:A%qA 19  $&..tU;AOPQsS  QCv,rc g}|j |jjd|_ |jjtdz}|s|j td|jdkDr|jdt|t|tkDr|j tdd|j|d djd |dd } t!|}|d d d k7rndj%|}|jdkDr|jd|d|||fS#t $r,}|j tdt|zd}~wwxYw#t"$rd }YwxYw)Nrbrtz Connection unexpectedly closed: zConnection unexpectedly closedrzreply:izLine too long.s - zreply: retcode (z); Msg: )rurmakefilereadline_MAXLINErr]rrrqr}rlenrappendr;rrjoin)r%resplineer&errcodeerrmsgs rrz SMTP.getreply|s  99  **40DI 7yy))(Q,7  ,-MNN"!!(DJ74y8# +C1ABB KKQRz2 38D d) AayD 58D! ??Q    P Q9 7 ,-O/21v.677 7$  s)"E2 E: E7 'E22E7: FFcH |j|||jSr!rr)r%rr$s rrmz SMTP.docmds; C}}rc |jd|xs |j|j\}}||_||fS)Nhelo)rr^r helo_resp)r%namer&r's rrz SMTP.helosB  FD7D$7$78mmo sc{rc i|_|j|j|xs |j|j \}}|dk(r)t |dk(r|j td||_|dk7r||fSd|_ |jjdjd}|d=|D]}tj|}|rB|jjdd d z|jddz|jd<]t!jd |}|sv|j#d j%}|j&|j)d dj+} |dk(r0|jj|d d z| z|j|<| |j|<||fS) NrrrTzlatin-1rauthr6rz((?P[A-Za-z0-9][A-Za-z0-9\-]*) ?feature)rXrehlo_msgr^rrr]r ehlo_resp does_esmtpdecodesplit OLDSTYLE_AUTHmatchgetgroupsrFgrouplowerstringendr;) r%rr&r'reach auth_matchmrparamss rrQz SMTP.ehlos ! DMM4#>4+>+>?mmo s 2:#c(a- JJL()?@ @ 3;#; ~~$$Y/55d; GD',,T2J.2.A.A.E.Efb.Q/ * 1 1! 4Q 7/8##F+ DdKA''),224!%% "2"34::<f$373F3F3J3J7TV3W!4"$*4+D''04:D''056c{rc< |j|jvSr!)rrX)r%opts rhas_extnz SMTP.has_extnsEyy{d1111rcN |jd||jdS)Nhelprtrr|s rrz SMTP.helps& * FD!}}q!!rc4 d|_|jdS)NrSrset)rYrmrhs rrz SMTP.rsets4 'zz&!!rcF |jy#t$rYywxYwr!)rrrhs r_rsetz SMTP._rsets'   IIK%   s   c& |jdS)Nnoop)rmrhs rrz SMTP.noop s;zz&!!rc d}|rV|jrJtd|Dr$|jdrd|_n t dddj |z}|j ddt|||jS) Nr6c3BK|]}|jdk(yw)smtputf8N)r).0xs r zSMTP.mail..s:'Q1779j('srzutf-8z SMTPUTF8 not supported by serverrmailzFROM:) ranyrrYrrrrr)r%r,options optionlists rrz SMTP.mails  t:'::==,,3D)/:<<sxx00J F9V+> !dnn&<499;q>0S0#yy{ tt*s*'d33+1'= !rTinitial_response_okcJ |j}|r|nd}|?t|jdd}|jd|dz|z\}}d|_n|jd|\}}d|_|dk(r|xjdz c_t j |}t||jdd}|j|\}}|jtkDrtd t||fz|dk(r|d vr||fSt||) NrSr6)eolAUTHrrtriNz4Server AUTH mechanism infinite loop. Last response: i) upper encode_base64rrmr[base64 decodebytes _MAXCHALLENGErrr ) r% mechanism authobjectrinitial_responseresponser&r challenges rrz SMTP.authhs2 *OO% ,?JLT  '$%5%<%99 == rc |j|jds td|jdj }gd}|Dcgc]}||vr| }}|s t d||c|_|_|D]Q}d|jjddz} |j|t|| |\} } | d vr| | fcSS cc}w#t$r } | } Yd} ~ kd} ~ wwxYw) Nrz,SMTP AUTH extension not supported by server.)zCRAM-MD5PLAINLOGINz(No suitable authentication method found.auth_-_rr) rrrrXrrrr rrrgetattrr )r%rr radvertised_authlistpreferred_authsrauthlist authmethod method_namer&rrlast_exceptions rloginz SMTP.logins/ 6 ##%}}V$'>@ @#11&9??A9&54_T22_4 JK K $(  4="J!J$4$4$6$>$>sC$HHK ##yyk :(; ) = t :% $<'&#/4&+ #!" #s C'(C C0$C++C0)contextc |j|jds td|jd\}}|dk(rzts t d|t j}|j|j|j|_ d|_ d|_ d|_ i|_d|_||fSt!||)Nstarttlsz+STARTTLS extension not supported by server.STARTTLSrTz&No SSL support included in this Pythonserver_hostnameF)rrrrm _have_ssl RuntimeErrorssl_create_stdlib_context wrap_socketrrVrurrrXrr)r%r#rreplys rr%z SMTP.starttlss ##%}}Z('=? ? :. u 3;"#KLL446++DII<@JJ,HDIDI "DN!DN"$D #DO e}(e4 4rc| |jg}t|trt|j d}|j rF|j dr|jdt|z|D]}|j||j||\}} |dk7r3|dk(r|jn|jt|| |i} t|tr|g}|D]H} |j| |\}} |dk7r |dk7r|| f| | <|dk(s/|jt| t| t|k(r|jt| |j|\}} |dk7r2|dk(r|jn|jt!|| | S)NrSsizezsize=%dri)rrrrOrrrrrrr]rrrr rJr ) r% from_addrto_addrsr' mail_options rcpt_options esmtp_optsoptionr&rsenderrsrs rsendmailz SMTP.sendmails= | ##% c3 C.''0C ??}}V$!!)c#h"67&!!&)'yyJ7 t 3;s{  #D$ : : h $ zHD99T<8LT4 $#+"&s{ +H55  x=CM ) JJL'1 1yy~ t 3;s{  d+ +rc2 |j|jd}|d}nt|dk(rd}n td|=|dz|vr||dzn||dz}tj j |gdd}|U||d z||d z||d zfDcgc]}||} }tj j | D cgc]} | d }} tj|} | d =| d =d } dj|g|jdtj5} | rEtjj!| |j"j%d}g|dd}ntjj!| }|j'| d| j)}ddd|j+||||Scc}wcc} w#t$r!|jds tdd} YwxYw#1swYUxYw)Nz Resent-Dater6rtzResent-z0message has more than one 'Resent-' header blockSenderFromrToBccCcz Resent-BccFrSrzOne or more source or delivery addresses require internationalized email support, but the server does not advertise the required SMTPUTF8 capabilityT)utf8)policySMTPUTF8z BODY=8BITMIMEr)linesep)rget_allrrr8r9 getaddressescopyrrUnicodeEncodeErrorrrioBytesIO generatorBytesGeneratorrAcloneflattengetvaluer9)r%r'r2r3r4r5resent header_prefixf addr_fieldsamsg_copy internationalbytesmsggflatmsgs r send_messagezSMTP.send_messagesb : ##%]+ >M [A %MOP P   -x7C?]X56 #MF$: ;  00)=a@CI  '*=4+?'@'*=5+@'A'*=4+?'@'B-'B m'BK-',kk&>&>{&KL&K!&KHL99S> UO \ "  ! GGY** + 2 27 ;ZZ\XOO22SZZ%5%54%5%@3BKKzK?K OO228< IIhI /'')G}}Y'<)+ +9-M" !==,+KLL!M  !\s+ G G8#G /B H  'H  H  Hc |j}d|_|r|j|j}d|_|r|jyy#|j}d|_|r|jwwxYwr!)rur]r)r%rurs rr]z SMTP.closesl6 99DDI 99DDI 99DDI s %A(A7c |jd}dx|_|_i|_d|_|j |S)NquitF)rmrrrXrr])r%ress rr\z SMTP.quits>)jj *..   r localhostrN)r6)rr!)rr)NNrr)1rrrrqrrurrrr SMTP_PORTrr__GLOBAL_DEFAULT_TIMEOUTr(rirorrr}rr\rrrrmrrQrrrrrrrrJrrrrrrrrr"r%r9rYr]r\rrrrrs& 8J D DIHIJLQt77 $.4`%* =BG&  /b 1f2" " "*: D4"BF.2`I7 !<@@D#'+Z?A fP:>35K+Z rrcJeZdZ eZdej ddddZfdZxZ S)SMTP_SSLN)rWrZr#cr|tj}||_tj ||||||yr!)r+r,r#rr()r%rdrer^rWrZr#s rr(zSMTP_SSL.__init__s7446"DL MM$dNG( *rc|jdkDr|jd||ft| |||}|jj ||j }|S)Nrrr')rqr}superrr#r-rV)r%rdrerW new_socket __class__s rrzSMTP_SSL._get_sockets_"!!*tTl;,T4AJ11*BF**2NJ r)r6rN) rrr SMTP_SSL_PORTrr_rar(r __classcell__rhs@rrcrcs1 %  * & > >$($ *  rrcicPeZdZ dZdeddej ffd Zdfd ZxZ S)LMTPlhlor6Nc0 t||||||y)N)r^rZrW)rfr()r%rdrer^rZrWrhs rr(z LMTP.__init__ s$( tN(6  Irc |ddk7rt||||S|j|js td t jtj tj |_|jtjur%|jj|jd|_ |jj||j\}}|jdkDr|jd|||fS#t$rP|jdkDr|jd||jr|jjd|_wxYw)Nr/)rZrz connect fail:r)rfr\rWrr_AF_UNIX SOCK_STREAMrra settimeoutrurrqr}r]r)r%rdrerZr&r'rhs rr\z LMTP.connect&s'K 7c>7?4n?M M << #DLLOP P  fnnf6H6HIDI||6#A#AA $$T\\2DI II  d #mmo s ??Q    j# .c{ "!!/48yy !DI   sBDAE,r^) rrrr LMTP_PORTr_rar(r\rjrks@rrmrms1 4HYt $f.L.LI rrm__main__ctjj|dztjjtjj j S)Nz: )rzstdoutwriteflushstdinrr;)prompts rr|r|EsD $' yy!!#))++rr<r=,zEnter message, end with ^D:r6zMessage length is %dr_rt)@r_rHrF email.utilsr8 email.messageemail.generatorrr rFrwrzemail.base64mimerr__all__r`rirHrrrcompileIrrrrrrrr r r r r rrBrrMrOr+r) ImportErrorrrcrrurmrr|fromaddrrtoaddrsrvr'r{rrrserverrrr9r\rrrrs)R   9 -       <. ?G?M]  M   (- ( "M "2)21,1-)-3 5/8Ii i V 4< NN:  /4/h z, f~HTl  %G '( C))$$& &$ &Dj))$$& &$ & 3s8 +, + F ! OOHgs+ KKM#YIsGG"!G"