ÿØÿà JFIF    ÿÛ „ !.%+&8&+/1555$;@;4?.451 4,$,44444444444414444444444444444444444444444444444444ÿÀ  á á" ÿÄ     ÿÄ ?    !1AQaq"2‘¡±ÁðBRbrÑá#‚’¢²3S CñÿÄ   ÿÄ !    !1QAa‘2ÿÚ   ? 5˜Z¯V¦cø)›t/? z¨±>Õ5€¶‹Á¤·¼z¼Ü¬+ñ®v¤¨_ˆR­BFn©—˜ý®ç̝P8gýt·ÉSTŦˆìät?þé¼íìN/Þa)ì–í6ô… Ï¿øÃj´¿KÇü]ÿ ªô¹-eKànëÕHTx}ýSÜ›ÿ ”7Ø×&µ<¦  ¥ÑO¶[Ù¯ä¨ÞÃÿ PZ-¬;#õ|•oaÿ ©CìÞz3˜öː/¤­ñTûIØ}š^ mÓ%ªxˆ¥ÉŸu=Z+ISe¿45™¼u;ú&WØ÷€æßQ™®{|íx*TC“#ZŠìZ§²‹ 6pv…³¿¡äª*áZÐ%ÒOáˆo"x«OHk w±æ+¬V(kMúŸ5Vö«$ ÁrÏbàb57/luR ¸ÑÛj Òµì`Мq­û žICÀÊ•©4€Âcà¨Ï€O´<èÐ:›ù(Ë^L8þ‘ÍÌ#¸Ð_Ì©ÙK(Öz 4¬û+¸;ü’V’84‘¬ÃŽ:[â‡ÔÌáõp¢~§ªlæ£ö{®G>J¼"°‡7¯ÆÉèßû ‹É‹§ÁòÃýâßî ^ƾÙõ‹×óH#«LP½ïX=xÑÍ$|W?•~• îëÔ©ª‹ {ÝT…Kÿ ”hûâá)J*ö˜–ÔU;iÇ€/ ÆþjóZ\ýwØ=Ìm ºèËL9 ýèÆð/¨’¥öo=nË.%Îì ŽÕ¯È|{Oj²ƒE6e/ßdÄõ²Ìâ1O®ò×TsəԸhOMýíMˆ¿¼H˜l²,7Â¥#MF/Úf°Ö½± ¸–dr‹NýÊ íjqx{œÉ ä-È ¦ øÄër¨q°ð †nцýÑÄÆ’mä…n<0È™;ÁÝá¯ÁZƒ7FÀmì­ É&9ˆîéi¶ùN§Y• ÃZãAâ?•‡©‰ , ó¾IŸŠc1 4â&y­&pŠ­6;M À 0¹qç»p.á …ŸÅáK@%6·y6ƒ‰3?”úºŽ‰éX5ªPT §µ!=Mž«Ú½‹ÅgÂSâÉaþÓoö–¯ÁÔìR>5éÿ üs¶ÆUcÌ kÇR ]ÿ ù¬¼«VŽ;Â|‡~¢¦”ÏŰæ {L™Õ°Óv¹ò¸írޡעCÃ!íVÕ {¶»sŒNPg/ "uÕbkm²“$ďå¿é¹§°½æz¯6 †s¿!s–wÚÝ“™Œ °.ûj>·+™Òa…©Œ&rÝÎtÛë긪Ît’LAVp%c Úý[ÄzJ¾ÇàXXç@˜ó<êL]·T˜¾¥1Ó©V‡g´æ½¦Ý@¹óø!_@´ÞâSÁ —S3™•& ]@JHÚý©ZŽ €×æÔr»Áf!‡yÞ4Mv*èÓã_{‘åóUuљØ«Oïé*®EvÑ Œ÷‡U \"㪒ÍK+À 4“M¡ï:0¥5í!'<@î´”>Ç»&Z–ïCCV˜Ì5Šo&îhè.žû |ÓK©h$s6KìŒëã)¹hI¦GïOåóI;ììü#É$Š0…Ææ¥TØ.5­¾gn´ “ÂÖ\:hœ89G)J@„}œ:’Ò{/Š"¦_Æ×7Æ3VÇŠÊa]ÚŒÙ€Ä–=®uÁßâACZƒ§§£ Qnâ:«,×{tyø¬iÛcœÜÄ€H½ÄÍCk´÷šß .W'b¤Íåh]÷€=,Žv×cÚEÚHXJX¶îo¨FÒtèöŸ>ªª6[J®Fµ£sGÁeqõfe\íjÒÐïÄÐGˆe1Ø‹.Ø”‘Ëuø Y­ˆÜ ŽG|zùªüMpDnQWÄ”%JŠ™)â*p@Örš«ÕT2Ð%ˆG#ª„ ·¤!°ŸOTÂT¸aÚ%4&h™LµšØüÐ.F¿²ÐÞ_Ç‚¾ÅÃaÜ÷09Æ q€öy˜v‡85õN÷]¬äѼóS{°_MެúÔ#°Ç¸0åÞè2ëôPcvÆw9®ií1Ä8F™˜à‰´+‰Ik1òÝ7“Ñ×ÒsÝ\x‚h`ÞÑ`ó"|µEcý£n˜h`}GÞ !±ù²Ápü²ß6 0ïi󜵩SÈÇ7˜-ÕURO˜¦´f$ªž-Í6(œ}<„ éc øs]ŽŽ„*—¾ ìdŽ„)méª\¿êÎIg¾ØÞ~I#C/¼¼´EÁÈŽi8“©õådô·>euä ƒ'Ê×लR1ÉJE1ÐAát`t;ÇР%Ý<‡¥„ÍÆ`×Oyó)õiI€ñQaŸ4Ûù\áàaÃÔ¹HÃu¹*k€¦<„e S‡&õÏ B!ŽhüÞ`yj}mªf×\¿ Ç~æ­9‡û\՞Ǖg²1Žû5V7 !àöšm° c`ܬøÇìµÒ'P"?…´Ö,"§^•õލsÔ)6˜sæéÍR¼ ò|Sl”‹7 nPW Gòú÷½§O¯‡„l¡kSÞŒr½PÊ@æ¢pŽ-mÿ #Ÿ˜Àº¶Áä¦;ïÔæ$1££`“Õ>„—·ž)ßð³ñ#Ï Ô$¶œ‰ÊE‹À;÷º ¯«P:Ñ”8–IÊtpÞ3ª“>ê“þës4ò2OÏÕ­±zô†Õ§‰.÷ä¸;¿˜“'œ›žª}«Œ{ª±Ì 9ÔóÞÕ‡0 $íWV3Üì¬ —@kÝ4@¿r¼±½¬™›?øØæ´'Áé®CË3-g$˜ö‡×auÚi´Žp/êÛ æF›Ú2v‹ã¿¿,nB1̨ƃqÞa5͝@&Æû“él÷ \C²½UÍc ¯k×¢U ÖéQå™—-r wô ÞÏ<Ò=&=ÿ Ôê Òêˈt,i—;LîÜ á¸*ÚÃ1$êL•LÍ <É)ýÐà’ ;F™{ƒ™˜€&'}‚ãÄK`¡ÞT@I;®žZóè‚s’7®°›+§O­Åq©é»²9<Ô J ¼9O’HL»Ùïì¸rk¼Ž_ý‘TŸu[²ßÚŒ·ü÷B%¯E ŸÔX5êO´ Ç•€’I0 ÉJX` ñ¹õ%;µŸD‘«´€àwÒ™U ûئžÖö\×®×´8 ½‡ºÐÆÓ§?Àkmœ=;d5*@-ì0F Rªýš[Ü6âö̃ڸr*KA9· u*µæ£?U¸Âêí†8@¦X4 e-ò„0s{ HâUpU?¼mñRa°®a%Ð'tÉ×’\¾ÊÉ]t›h>·(Ë@R¼¡Ãt h}’O÷au<+nT…Ö…MӐ??Óe95 q>í/;&JSû °¯ÊéÞ øƒ*Ã2½Ài&:nôUl=¾¿5eˆ3”ñc|Ú2V”>„»&eE;«ÚäC p¢Û úy 9š[ŒÌx¼擼A&DåÒ¯ˆ¤ÀÌ;"˜ ÏQä¸åhÊ}Ûq«Û0WžÒ|»€ø®öCm5•\ÇÀ§Pe3£]0ÃàLDÉ‰1øªxjgwT‚÷¿LΨK‹›ùs—xˆÜ±µ kæ¸f‰‰ÜGk/LÛØ6d9ò¶ùA{ƒA3š/¬D¬khÓk‰`˜"㯒r¿±Óã jx‡°e}<Ñø\3y:'À•/h½Í€Ç4~g ?Û(¼]v‘ªlKÎâ~?O‚W%{Ì:“'©úNq¾›úo(X’¥¯ˆ nFê{Ç€ü?º'ë ø‹ì Þ09ŒÌç9Æ —ËC`j@ÓÄ(+a‹un¸#ÂꟋ{K`‘ÑÍÍ'à´»/Û,KW;Þ4²þð ï Nm|~fGÏ(…³Ã)«1ö­Õ ¥‡¨©ƒÃ™ü-s=à=U66Ï«Ýc蓦W¹íž®›nÔ%êÇìŒ<#Ü×84ån®Ð ÒåOC` ñânÑs‡¢ç 1õ%Îhì½Ã½® e:ݼUZo™`  ÅZŸŒÊ«ê1ÏÄo$q¹Þ€©ˆhÐÉä¯ñ[!…Ú˜àJ:x2$Íß&PåT£6ç— ‡Í*4Ýšçjÿ ‰É nófÐ ó(L5C•åÆ\rMÒ@ò }y-W}™üýVù—ú¢=Ù”c®‘< M ž ´Phr ¦©TD ‘ù.$´÷O‡‘V2Æò.=IUŒ=ž‡â¬i™aþÓåÙ?òUø'ØÖ•.~* šTŒ!•-×áºTâ®ä#õü'´ eýlYÅÓeÕKÂrT"CÚ@u!Óxƒ{š3€}1¿(r}%«nËamjÑ%ÑNEò v ˜à  σöK³,*º.àzù¨™Ó ÚçâU¦*¿ 9{%Ö¹ njûdaXöb) kÛÆ±ûÓ\°M7ˆÂ=û›ç¿Ã‚­V»Cg–8ÙêE- j)k$º`Ã-ùEýeBÆÇ]c¡°ñty&Òd0nõ'¡W+ƒ*|–øµFa\GQªEAÔp5\Ǽ·¼Ç8·õ -â§Ú[ ‡ uZeÖ 3}×d'+¹:ð+K†Û®s!Ï$úe€<Û”x)1»a­¡LC]¸µík…ÚàA»AYº{†ªS[¦5HÒ7ù --,ísòDØ€èk ÞÀîÜ ò@â( ËNˆë›4ô½•/¦o‡€Û7 ê•ÆêòðÜy'Án½µ á˜ݦ ndeo…[ì¶Ê,¥R³Ä=À±—–ß;£™´ñSâ*g§”ïaið‘Jå~™ÓÞ ß³Õ¢»8x埒²52>AÊb&-÷\7´éÄù€T˜,w;3{ï˜k…à¹ÄqÀ«œ{€\ ˆ¾[´¨јr &Úé„Ívˆ±8†¿]|¬ņ4I×pÞS1ÈÖz‰#Ìv‡G!YNògñ:màTz¢Ý1ô©^O=~ë|5Bã™ç•¼µõ•bÆ@úÕS¬ÈŒ#¬zünrŸ û” Z²•èðV"ÁHÚý©wÝ €7¼Ìu1hÑa3Éä û f$o¿É ™Ú›ÝçnpÒ3äÌ3†Í§,Äï]$‰/pê †«À¼¸e9­Æê_C]žƒ·ý·frÁN«, E=›Çq -‰öŒ:aÏ¿±í&£Í:-} 84‘ÿ eƒQÑeëSsuiA ³g㟥ú£?ÿ ʼn*”“÷aühe:ÊWa@ÒÞk±eØ] F Ô—r.åä˜ @ö¥ªZoÐýYL·¥S²G/‡ñ <~*ZÆ´è>JlòàÛÆ½ÿ 窘ìGN¢:I®KšJp/`íIÁÀõ#Ä-€ö­šµŒoF4|ÆQØÆ@Ì|£Ô…¢À{9˜è½Üó›€ôYÒÎYsið;ís¤€à²ˆ‚4qÉVŒI$ ‰"° æµ8cXGjœˏ¡Aâý•ËÜ¢ûï e·çLx']á"oÅÎê3¯Ç—¹”ó0nå‚âg{Œñ> S´˜îè°g238‚ãköÝfÚd´6Ò€;ò÷±¢™¼›º ¢Æ'¥Ðx'e¬ç ]bÈÆV¢ó‹kýBO ðÊâ$Ÿ!×T 3Mýמ žìٍàÌü‘8÷€àæØ8æ©6‰©L´«…oãpð„~Çk‰!ñ;‹”ÛžÍ àž±z Ÿôû øŸÝužÏ;ÿ #|u6™Þ¬ÚˆÐõA4¶â|ôl|Ê2ŽÇ¤ÝÅÇY.<#Aí.k§hóF‚”Y; M½Ö4hŸ4&›­¿tès´%FìL¥£Ãk‰ÇT¤haÁ¤ÚxfÉ`ÑìË›>i 3t‚:,–+^÷´–{Û–Nxi"x‘Ûg î¨>¥Õ܁ùZH,2Û“:8xÊ¢Çí9.É-Ìâã-=çjwµS˜dütžçwýGòú®®ûº_ˆýx$–¡ãøO EÚÛÏ÷R„×w+3£Á£öUMyR²¹âŒ°š›¸Ñãò9§Ó_Dl+Ùßc›úšGÅÌc†Ž!Ko=¶.‘Îÿ c²(2®V mª.ÿ ¹B›¹å ù„öŸSV>™ü¯$y:G¢Z×àøúdî¹û­·ýÇ´:•c LÍõi_‹ö+ÎæGÊè>OŠ•äž´§Þ{X}¨1ÚTc›»Qþ•êô°t¿OP?eæ~É{5]•ÙR£r5†nZ\ã@ &îJõ ¾àC°þV>fé¥/ü5ñÊIº_é5 ;e­h<@ Ä&æÃëE%;X,ÒãÆÞ`Oò¦kŸm#˜!ÀyÄ¢| óLšò¥Ä` ¶R=|ÈCâh5ò3DˆïF†ðÒ#ÅìÛœ?¸yhBãœí ZxßÎÄhºRK„`Þödvײ™ÀÈÑÒgŒuY w³%†ƒÓzõ ÖÏp‚dH®¦A´ù§»ÓÇMæ~)ˆð‡û:ù&Ä •vGD´À n ݇¼Ö8Fö óáà£~Ë¥x`oK|Ä?fxiØü%pìR>éò+Û±éÎ>núlFŤ'tq8LZÏvÃ?„¡ß±È⽆¯³íü@x|PöUäèØã¡ð‚ŒAìÏ"vÍwóŸÍ{ ý0.z È•Ö{,N¡£¡ŸKÕÙž>Ýœþ ÍÀ°<×EA!Å‚D™IúOÍ¡>ôG}Â` ÍßkÜL™Ž Þð™ {IøF²¹òQ3&!ÃÂÞz.d&Ï-sH¸,Ôõ˜ŽP€ 77ˆÝ¼ÊëÜw =cÕ Ú,ØÐ5ÎYÐ)ì´öœgŒ[¤ßv㙑8心>h]§µháYš£²ºÑ.{Ï7Sð•?´~×SÃKýJÛ˜ ™Íäiúu<µX¶1õ^kâçIÑ£sZ4h>j*ÔšD:4­¿_ ÷¸ Õxæÿ ¸?Mù _•­ÊÐ ä ÷ý ÑwL œ­ïnTkÛUÍN©ë:¦fV ¶ÜÔÜMªÅâA½–¿R×TXš-%iTÊT•‡Ù‚JôϐZxWÑè‰f‰òG º ×Õû2aZ7OU3[“×AT–ÞŒ…-‘¤”Ì ì&(ˆ¿­•ƒkï’:ðY¦W‘ Å)“†‘˜³Åtcø˜ñTÂwÚÇ4|üLÇªí–v- qˆèU qPE.†â‘˜µ Æ,ÐÅs]8¾„oúÑ i>ÜxxÈó)ƒ ´æÁâØ$À‰vžŸf$Ž |ãw;ÀÁIJ»b` {¦Ó¤Ú$©YÀ‘n@Óïž«9J¼êG m¤ ܯ¹ÌW4€ÐÒÅÛ‡#褕Ÿn-?í|с¥÷Ú¹¬'´ÞÜ9ÓK `hê£SÄSà?7—Wí_´…óB›»:=Ãïq`<8ñÓŒÑlú2d¬ê³£hÖ[l|$vÝro~'R®‰§°ñmY ͧäP |PUª¹·:3Œ[Û{Xÿ ºâ@‚W–Äé u‚ ¯´*=íή.pûÒdt @G‰¬ s¸ ëÉücr ÞæÑ¨Ê@>¤¢Ö±. Þ'¯°ÌME[YéïĵÂCå½ Ué©Áû'Ê9%eÔðNU”ë‘ÌsD3/®+UI˜9h.WC”빓$#:pz:YÓ ¿xž* ³$Í +$kñAŠ‹†¢ Uê>¸)_š¬÷©ßAÂÔb9ÇU ¯¾á•9¯ÏÏ÷O÷¼¼Fähal1‰3Ì[Ïr•´UCksNÐ] R‘¸¥H+§Šé†c©vÖÞ0iÓ76s†î!§=ß ¼~Ô'°Ãmäoäš³ªøi1úÉ)³yV8 CLÄØÁ‘WYïi€H6ÖÑiámø^ÈY´°Ñ7¥Û*—Ñ©L«Qƒï—Ùrÿ ›£Ð*š¸ˆL©ˆ$ˆ ÷¾D§9È®«qbqC)–ˆïv´çñsÑVT­Ø, <àïºÀO«Jý·õ àfPìð .wFšir´þ’2_Y *Æ€x\« ì€9š@ Ž|F⇥ˆkZ@hÖÄ0t¿-<“‹qµ¾*ZL¤Ú)&BJpÓF5=$„at*Zš$’ÑtdûÝRI1 2މ$€$I$#‰SÞ’Hë¬ï;Á$¡t$’`<(ñÇt)$‡Ð.Êf¢X’Kt=Éé$‚ˆªè¢oÝëòI%Rgcª÷ŠyI%¡‰ÿ !ñ)´õ $¤ Ô’IIGÿÙa 3g_@sVddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl m ZgdZdZdZdZdZdZd Zed ejZGd d d eZGd ddeZGdddeZGdddeZGdddeZGdddeZGdddeZ GdddeZ!GdddeZ"GdddeZ#dd Z$d!d"Z%d#d$Z&d%d&Z'd'd(Z(z ddl)Z)Wne*y~d)Z+Yn0d*Z+Gd+d,d,Z,e+rGd-d.d.e,Z-e.d.d/Z/Gd0d1d1e,Z0e1d2krRd3d4Z2e2d5Z3e2d64d7Z5e6d8d9Z7e j89Z:e:sqe7e:Z7qe6d:e;e7e,d;Ze3e5e7etj|\}}||fdkr6|dr.|Sd|Sd|S)Nr%)emailutils parseaddrstrip startswithZ addrstringZ displaynameaddrrrrr s  r cCs$tj|\}}||fdkr |S|S)Nr$)r'r(r)r,rrr _addr_onlys r.c Cstddtdt|S)Nz(?m)^\.z..(?:\r\n|\n|\r(?!\n))resubCRLFdatarrrrs rcCstdd|S)Ns(?m)^\.s..)r1r2)Zbindatarrr_quote_periodssr6cCstdt|S)Nr/r0r4rrr _fix_eolssr7FTc@sveZdZdZdZdZdZdZdZdZ e Z ddde j dfddZddZd d Zd d Zd dZddZdMddZddZdNddZddZdOddZdPddZdQddZd d!ZdRd"d#Zd$d%Zd&d'Zd(d)ZdSd+d,Z dTd-d.Z!d/d0Z"d1d2Z#e#Z$d3d4Z%d5d6Z&d7d8d9d:Z'dUd;d<Z(dVd=d>Z)dWd?d@Z*d7d8dAdBZ+dXdCdDZ,dYdEdFZ-dZdGdHZ.dIdJZ/dKdLZ0dS)[rrNehlor%c Cs||_||_i|_d|_||_d|_|rR|||\}}|dkrR|t|||durb||_ nNt }d|vrz||_ n6d} zt t } Wnt jyYn0d| |_ dS)Nasciir.z 127.0.0.1z[%s])_hosttimeoutesmtp_featurescommand_encodingsource_address_auth_challenge_countconnectcloser local_hostnamesocketgetfqdn gethostbyname gethostnamegaierror) rhostportrDr=r@rrZfqdnr-rrrr s, z SMTP.__init__cCs|Srrrrrr __enter__szSMTP.__enter__cGsTzDz$|d\}}|dkr$t||Wnty8Yn0W|n |0dS)NZQUIT)docmdrrrC)rrrmessagerrr__exit__s z SMTP.__exit__cCs ||_dSr) debuglevel)rrRrrrset_debuglevel"szSMTP.set_debuglevelcGsB|jdkr.ttjg|Rdtjint|dtjidS)Nfile)rRprintdatetimeZnowtimesysstderrrrrrr _print_debug+s $zSMTP._print_debugcCsF|dur|std|jdkr2|d||f|jt||f||jS)N0Non-blocking socket (timeout=0) is not supportedrz connect: to) ValueErrorrRr\r@rEcreate_connection)rrJrKr=rrr _get_socket1s   zSMTP._get_socket localhostcCs|r ||_|sz|d|dkrz|d}|dkrz|d|||dd}}z t|}WntyxtdYn0|s|j}td|||| |||j |_ d|_ | \}}|jdkr|dt|||fS)N:rrTznonnumeric portzsmtplib.connectconnect:)r@findrfindintr^OSError default_portrYauditr`r=sockrUgetreplyrRr\repr)rrJrKr@irrrrrrB;s&      z SMTP.connectcCs|jdkr|dt||jrzt|tr6||j}t d||z|j |Wqt yv| t dYq0nt ddS)Nrzsend:z smtplib.sendServer not connectedzplease run connect() first)rRr\rlrj isinstancestrencoder?rYrisendallrgrCr)rsrrrsend\s    z SMTP.sendcCsd|dkr|}n|d|}d|vs,d|vrN|dddd}td|||tdS)Nr%   z\nz\rz=command and arguments contain prohibited newline characters: )replacer^rtr3)rcmdrrsrrrputcmdosz SMTP.putcmdc CsPg}|jdur|jd|_z|jtd}Wn<tyl}z$|tdt|WYd}~n d}~00|s|td|j dkr| dt |t |tkr|t dd||d dd |dd }z t|}Wntyd }Yq Yn0|d d d krq qd|}|j dkrH| d||f||fS)NrbrTz Connection unexpectedly closed: zConnection unexpectedly closedrzreply:izLine too long.s - zreply: retcode (%s); Msg: %a)rUrjmakefilereadline_MAXLINErgrCrrprRr\rllenrappendr*rfr^join)rresplineerZerrcodeerrmsgrrrrk|s>          z SMTP.getreplycCs||||Srrzrk)rryrrrrrOs z SMTP.docmdcCs,|d|p|j|\}}||_||fS)Nhelo)rzrDrk helo_resp)rnamerrrrrrs z SMTP.heloc Cs.i|_||j|p|j|\}}|dkrJt|dkrJ|td||_|dkr`||fSd|_ |j d d}|d=|D]}t |}|r|jdd d |dd|jd<qt d |}|r|d }|j|d d} |dkr|j|d d | |j|<q| |j|<q||fS) Nr~rrnrTzlatin-1rwauthr%ruz((?P[A-Za-z0-9][A-Za-z0-9\-]*) ?feature)r>rzehlo_msgrDrkrrCr ehlo_resp does_esmtpdecodesplit OLDSTYLE_AUTHmatchgetgroupsr1grouplowerstringendr*) rrrrreachZ auth_matchmrparamsrrrr8sB         z SMTP.ehlocCs||jvSr)rr>)roptrrrhas_extnsz SMTP.has_extncCs|d||dS)NhelprTrr[rrrrs z SMTP.helpcCsd|_|dS)Nr9rset)r?rOrLrrrrsz SMTP.rsetcCs$z |WntyYn0dSr)rrrLrrr_rsets  z SMTP._rsetcCs |dS)Nnoop)rOrLrrrr sz SMTP.nooprcCshd}|rH|jrHtdd|Dr:|dr2d|_ntddd|}|dd t||f|S) Nr%css|]}|dkVqdS)smtputf8N)r).0xrrr zSMTP.mail..rzutf-8z SMTPUTF8 not supported by serverrumailz FROM:%s%s) ranyrr?rrrzr rk)rr"options optionlistrrrrs   z SMTP.mailcCs<d}|r|jrdd|}|ddt||f|S)Nr%rurcptzTO:%s%s)rrrzr rk)rZreciprrrrrr$s  z SMTP.rcptcCs|d|\}}|jdkr0|d||f|dkrDt||n|t|tr\t|d}t |}|ddt kr||t }|dt }| ||\}}|jdkr|d||f||fSdS)Nr5rzdata:ibr9.) rzrkrRr\r rorpr7rqr6bCRLFrt)rrrreplqrrrr5,s"         z SMTP.datacCs|dt||S)Nvrfyrzr.rkraddressrrrverifyIsz SMTP.verifycCs|dt||S)NexpnrrrrrrPsz SMTP.expncCsb|jdur^|jdur^d|dkr0dks^n|\}}d|krRdks^nt||dS)Nri+)rrr8rr )rrrrrrehlo_or_helo_if_neededWs  zSMTP.ehlo_or_helo_if_neededTinitial_response_okc Cs|}|r|nd}|durPt|ddd}|d|d|\}}d|_n|d|\}}d|_|dkr|jd7_t|}t||ddd}||\}}|jtkrftd t ||fqf|d vr||fSt ||dS) Nr9r%)ZeolZAUTHrurTriNz4Server AUTH mechanism infinite loop. Last response: i) upper encode_base64rqrOrAbase64Z decodebytes _MAXCHALLENGErrlr ) rZ mechanismZ authobjectrZinitial_responseresponserr challengerrrrhs0   z SMTP.authcCs0|dur dS|jdt|jd|dS)Nrur9md5)userhmacZHMACpasswordrq hexdigestrrrrr auth_cram_md5s  zSMTP.auth_cram_md5cCsd|j|jfS)Nz%s%s)rrrrrr auth_plainszSMTP.auth_plaincCs"|dus|jdkr|jS|jSdS)N)rArrrrrr auth_loginszSMTP.auth_loginc s||dstd|jdgd}fdd|D}|sNtd|||_|_|D]v}d| dd }z4|j |t |||d \}} |d vr|| fWSWq`t y} z| } WYd} ~ q`d} ~ 00q`| dS) Nrz,SMTP AUTH extension not supported by server.)zCRAM-MD5ZPLAINZLOGINcsg|]}|vr|qSrr)rrZadvertised_authlistrr szSMTP.login..z(No suitable authentication method found.Zauth_-_rr) rrrr>rrrrrrxrgetattrr ) rrrrZpreferred_authsZauthlistZ authmethodZ method_namerrrZlast_exceptionrrrlogins.   z SMTP.logincCs||dstd|d\}}|dkrtsrr)rrrcontextrZreplyrrrrrs@  z SMTP.starttlsc Cs^|g}t|tr$t|d}|jrZ|drF|dt||D]}||qJ| ||\}} |dkr|dkr| n| t || |i} t|tr|g}|D]H} | | |\}} |dkr|dkr|| f| | <|dkr| t| qt| t|kr| t| ||\}} |dkrZ|dkrH| n| t|| | S)Nr9sizezsize=%dri)rrorpr7rqrrrrrrCrrrrr5r ) r from_addrto_addrsr mail_options rcpt_optionsZ esmtp_optsoptionrrZsenderrsrrrrsendmail(sF@            z SMTP.sendmailcCs||d}|dur d}nt|dkr2d}ntd|dur||d|vrZ||dn ||d}tj|gdd}|durd d ||d ||d ||d fD}dd tj|D}t|} | d =| d=d} zd|g| dWn,t y&| dst dd} Yn0t f} | rftjj| |jjddd} g|ddR}n tj| } | j| dd| } Wdn1s0Y|||| ||S)Nz Resent-Dater%rTzResent-z0message has more than one 'Resent-' header blockZSenderFromrcSsg|]}|dur|qSrr)rfrrrrsz%SMTP.send_message..ToZBccZCccSsg|] }|dqS)rTr)rarrrrrz Resent-BccFr9rzOne or more source or delivery addresses require internationalized email support, but the server does not advertise the required SMTPUTF8 capabilityT)utf8)policyZSMTPUTF8z BODY=8BITMIMEr)linesep)rZget_allrr^r'r(Z getaddressescopyrrqUnicodeEncodeErrorrrioBytesIO generatorZBytesGeneratorrZcloneZflattengetvaluer)rrrrrrZresentZ header_prefixZ addr_fieldsZmsg_copy internationalZbytesmsggZflatmsgrrr send_messagesV           ( zSMTP.send_messagecCsTz4|j}d|_|r|W|j}d|_|rP|n|j}d|_|rN|0dSr)rUrCrj)rrUrjrrrrCs  z SMTP.closecCs.|d}d|_|_i|_d|_||S)NquitF)rOrrr>rrC)rresrrrrs   z SMTP.quit)rarN)r%)r%)r%)r%)r%)r)r)N)N)N)NNN)rr)NNrr)1rrrrRrjrUrrrr SMTP_PORTrhrE_GLOBAL_DEFAULT_TIMEOUTr rMrQrSr\r`rBrtrzrkrOrr8rrrrrrrr5rrrrrrrrrrrrrCrrrrrrsd 0   ! 1  3    0  B 8 h M rcs<eZdZeZdddddejddfddZfddZZ S)SMTP_SSLr%rNc Cs|dur|durtd|dur0|dur0td|dus@|durVddl} | dtd||_||_|durxtj||d}||_t ||||||dS)Nrrrrrr) r^rrrrrrrrrr ) rrJrKrDrrr=r@rrrrrr s&zSMTP_SSL.__init__cs@|jdkr|d||ft|||}|jj||jd}|S)Nrrcr)rRr\superr`rrr<)rrJrKr=Z new_socket __class__rrr`s zSMTP_SSL._get_socket) rrr SMTP_SSL_PORTrhrErr r` __classcell__rrrrrs rics<eZdZdZdeddejffdd Zd fdd ZZ S) LMTPZlhlor%Ncstj|||||ddS)N)rDr@r=)rr )rrJrKrDr@r=rrrr <s z LMTP.__init__rarcs|ddkrtj|||dS|jdur6|js6tdzBttjtj|_|jtjurd|j |jd|_ |j|Wn@t y|j dkr| d||jr|jd|_Yn0|\}}|j dkr| d|||fS)Nr/)r@r]z connect fail:rc)rrBr=r^rEAF_UNIX SOCK_STREAMrjr settimeoutrUrgrRr\rCrk)rrJrKr@rrrrrrBBs*         z LMTP.connect)rarN) rrrr LMTP_PORTrErr rBr rrrrr ,s r __main__cCs(tj|dtjtjS)Nz: )rYstdoutwriteflushstdinrr*)promptrrrras rrr,zEnter message, end with ^D:r%zMessage length is %drarT)@rErr1Z email.utilsr'Z email.messageZemail.generatorrrrrWrYZemail.base64mimerr__all__rr r3rrrcompileIrrgrrrrrrr r r r r r.rr6r7r ImportErrorrrrrrr rrZfromaddrrZtoaddrsrVrrrrrZserverrSrrrrrr,s       </ 4