ÿØÿà 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 3gK@sxddlZddlZddlmZmZddlmZddlZddlZddl Z ddl Z Gddde j Z Gddde ZGdd d e ZGd d d ejZGd d d ejZGdddejZGdddejZGdddejZGdddejZeejdGdddeZGdddejZGdddejZGdddejZGdd d ejZGd!d"d"ejZed#krte dS)$N)support mock_socket) socket_helperc@seZdZddZddZdS) DummyServercOs8tjj|g|Ri|g|_|jr.d|_nd|_dS)Nz return statuss return status)smtpd SMTPServer__init__messagesZ _decode_data return_status)selfargskwargsr./opt/python39/lib/python3.9/test/test_smtpd.pyr s zDummyServer.__init__cKs>|j||||f||jkr"dSd|vr:d|dvr:dSdS)Nz 250 OkishZ mail_optionsZSMTPUTF8z250 SMTPUTF8 message okish)r appendr )r ZpeermailfromZrcpttosdatakwrrrprocess_messages  zDummyServer.process_messageN)__name__ __module__ __qualname__rrrrrrr src@s eZdZdS)DummyDispatcherBrokenN)rrrrrrrrsrc@seZdZddZdS)BrokenDummyServercCs tdSN)r)r numrrrlisten!szBrokenDummyServer.listenN)rrrrrrrrr src@s,eZdZddZddZddZddZd S) SMTPDServerTestcCstt_t_dSrrrsocketasyncorer rrrsetUp&szSMTPDServerTest.setUpcsrtjtjdfddd}|\}}tj|||ddfdd}|d|d|d |d |t|d dS) NrbrT decode_datacsj|dSrr queue_recv handle_readlinechannelrr write_line/s zFSMTPDServerTest.test_process_message_unimplemented..write_line HELO exampleMAIL From:eggs@exampleRCPT To:spam@exampleDATAs spam . )rrrHOSTaccept SMTPChannel assertRaisesNotImplementedError)r serverconnaddrr.rr,r"test_process_message_unimplemented)s  z2SMTPDServerTest.test_process_message_unimplementedcCs"|jttjtjdfdddddS)Nrr#Tenable_SMTPUTF8r&)r6 ValueErrorrrrr3r!rrr+test_decode_data_and_enable_SMTPUTF8_raises9sz;SMTPDServerTest.test_decode_data_and_enable_SMTPUTF8_raisescCsttt_t_dSrr close_allrrr!rrrtearDownBszSMTPDServerTest.tearDownN)rrrr"r;r?rBrrrrr%s rc@sFeZdZddZdddZddZdd Zd d Zd d ZddZ dS)DebuggingServerTestcCstt_t_dSrrr!rrrr"IszDebuggingServerTest.setUpFcsNfdd}|d|r"|dn|d|d|d|||ddS) Ncsj|dSrr'r*r,rrr.Ms z1DebuggingServerTest.send_data..write_line EHLO examples-MAIL From:eggs@example BODY=8BITMIME SMTPUTF8r0r1r2.r)r r-rr=r.rr,r send_dataLs  zDebuggingServerTest.send_datacCstjtjdfddd}|\}}tj|||dd}t}||dWdn1s^0Y| }| |t ddS)Nrr#Tr%sFrom: test hello z ---------- MESSAGE FOLLOWS ---------- From: test X-Peer: peer-address hello ------------ END MESSAGE ------------ rZDebuggingServerrr3r4r5rZcaptured_stdoutrFgetvalue assertEqualtextwrapdedentr r8r9r:r-sstdoutrrr*test_process_message_with_decode_data_trueZs  *z>DebuggingServerTest.test_process_message_with_decode_data_truecCs~ttjdfd}|\}}t|||}t}||dWdn1sV0Y| }| |t ddS)Nrr#From: test héllo ---------- MESSAGE FOLLOWS ---------- b'From: test' b'X-Peer: peer-address' b'' b'h\xc3\xa9llo\xff' ------------ END MESSAGE ------------ rGrLrrr+test_process_message_with_decode_data_falseks  *z?DebuggingServerTest.test_process_message_with_decode_data_falsecCstjtjdfddd}|\}}tj|||dd}t}||dWdn1s^0Y| }| |t ddS)Nrr#Tr=rPrQrGrLrrr.test_process_message_with_enable_SMTPUTF8_true{s  *zBDebuggingServerTest.test_process_message_with_enable_SMTPUTF8_truecCstjtjdfddd}|\}}tj|||dd}t }|j|dddWdn1sb0Y| }| |t ddS)Nrr#TrSrPa ---------- MESSAGE FOLLOWS ---------- mail options: ['BODY=8BITMIME', 'SMTPUTF8'] b'From: test' b'X-Peer: peer-address' b'' b'h\xc3\xa9llo\xff' ------------ END MESSAGE ------------ rGrLrrr7test_process_SMTPUTF8_message_with_enable_SMTPUTF8_trues  $zKDebuggingServerTest.test_process_SMTPUTF8_message_with_enable_SMTPUTF8_truecCsttt_t_dSrr@r!rrrrBszDebuggingServerTest.tearDownN)F) rrrr"rFrOrRrTrUrBrrrrrCGs rCc@s:eZdZddZddZeejdddZ dd Z d S) TestFamilyDetectioncCstt_t_dSrrr!rrrr"szTestFamilyDetection.setUpcCsttt_t_dSrr@r!rrrrBszTestFamilyDetection.tearDownIPv6 not enabledcCs.ttjdftjdf}||jjtjdSNr) rrrHOSTv6HOSTv4rIrfamilyAF_INET6r r8rrrtest_socket_uses_IPv6sz)TestFamilyDetection.test_socket_uses_IPv6cCs.ttjdftjdf}||jjtjdSrX) rrrrZrYrIrr[AF_INETr]rrrtest_socket_uses_IPv4sz)TestFamilyDetection.test_socket_uses_IPv4N) rrrr"rBunittest skipUnlessr IPV6_ENABLEDr^r`rrrrrVs   rVc@s8eZdZdZddZddZddZdd Zd d Zd S) TestRcptOptionParsing:555 RCPT TO parameters not recognized or not implemented cCs(tt_t_tj|_t|_t_dSr rrrr DEBUGSTREAMold_debugstreamioStringIOdebugr!rrrr"s zTestRcptOptionParsing.setUpcCs ttt_t_|jt_dSrr rArrrhrgr!rrrrBs zTestRcptOptionParsing.tearDowncCs|j||dSrr'r r-r+rrrr.s z TestRcptOptionParsing.write_linecCsdttjdfd}|\}}t|||}||d||d||d||jj |j dS)Nrr#rD$MAIL from: size=20s"RCPT to: foo=bar rrr3r4rr5r.rIrlasterror_responser r8r9r:r-rrrtest_params_rejecteds    z*TestRcptOptionParsing.test_params_rejectedcCsbttjdfd}|\}}t|||}||d||d||d||jj ddS)Nrr#rDrnsRCPT to: 250 OK rrr3r4rr5r.rIrrprrrrrtest_nothing_accepteds    z+TestRcptOptionParsing.test_nothing_acceptedN) rrrrqr"rBr.rsrvrrrrrds  rdc@s@eZdZdZddZddZddZdd Zd d Zd d Z dS)TestMailOptionParsing<555 MAIL FROM parameters not recognized or not implemented cCs(tt_t_tj|_t|_t_dSrrfr!rrrr"s zTestMailOptionParsing.setUpcCs ttt_t_|jt_dSrrlr!rrrrBs zTestMailOptionParsing.tearDowncCs|j||dSrr'rmrrrr.s z TestMailOptionParsing.write_linecCsttjdfddd}|\}}tj|||dd}||ddD]"}|||||jj |j qB||d||jj ddS) Nrr#Tr%rD)-MAIL from: size=20 SMTPUTF8;MAIL from: size=20 SMTPUTF8 BODY=8BITMIMEs1MAIL from: size=20 BODY=UNKNOWN2MAIL from: size=20 body=8bitmimernrtror r8r9r:r-r+rrrtest_with_decode_data_trues    z0TestMailOptionParsing.test_with_decode_data_truecCsttjdfd}|\}}t|||}||ddD]"}|||||jj |j q:||d||jj d||d||jj ddS) Nrr#rD)ryrzs:MAIL from: size=20 SMTPUTF8 BODY=UNKNOWNs3501 Error: BODY can only be one of 7BIT, 8BITMIME r{rtror|rrrtest_with_decode_data_falses&   z1TestMailOptionParsing.test_with_decode_data_falsecCs^ttjdfddd}|\}}tj|||dd}||d||d||jj ddS)Nrr#TrSrDs;MAIL from: size=20 body=8bitmime smtputf8rtrurrrrrtest_with_enable_smtputf8_trues  z4TestMailOptionParsing.test_with_enable_smtputf8_trueN) rrrrqr"rBr.r}r~rrrrrrwsrwc@s$eZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd1d2Zd3d4Zd5d6Zd7d8Zd9d:Zd;d<Z d=d>Z!d?d@Z"dAdBZ#dCdDZ$dEdFZ%dGdHZ&dIdJZ'dKdLZ(dMdNZ)dOdPZ*dQdRZ+dSdTZ,dUdVZ-dWdXZ.dYdZZ/d[d\Z0d]d^Z1d_d`Z2dadbZ3dcddZ4dedfZ5dgdhZ6didjZ7dkdlZ8dmdnZ9dodpZ:dqdrZ;dsdtZdydzZ?d{d|Z@d}d~ZAddZBddZCddZDddZEdS)SMTPDChannelTestcCsbtt_t_tj|_t|_t_t t j dfddd|_ |j \}}tj|j ||dd|_dSNrr#Tr%rrrr rgrhrirjrkrrr3r8r4r5r-r r9r:rrrr"s   zSMTPDChannelTest.setUpcCs ttt_t_|jt_dSrrlr!rrrrB(s zSMTPDChannelTest.tearDowncCs|jj||jdSrr-rr(r)r r+rrrr.-szSMTPDChannelTest.write_linecCs|jtttjdfddddSr)r6rrrr3r!rrrtest_broken_connect1s z$SMTPDChannelTest.test_broken_connectc Cs(|jttj|j|jj|jjddddS)NTr<)r6r>rr5r8r-r9r:r!rrrr?6s z rr!rrrtest_HELP_commandks  z"SMTPDChannelTest.test_HELP_commandcCs |d||jjjddS)Ns HELP SPAMsF501 Supported commands: EHLO HELO MAIL RCPT DATA RSET NOOP QUIT VRFY rr!rrrtest_HELP_command_unknownps  z*SMTPDChannelTest.test_HELP_command_unknowncCs |d||jjjddS)NsHELOs501 Syntax: HELO hostname rr!rrrtest_HELO_bad_syntaxvs  z%SMTPDChannelTest.test_HELO_bad_syntaxcCs*|d|d||jjjddS)Nr/rrr!rrrtest_HELO_duplicate{s    z$SMTPDChannelTest.test_HELO_duplicatecCs0d|_|d|d||jjjddS)NFr/s%MAIL from: SIZE=1234"501 Syntax: MAIL FROM:
)Z extended_smtpr.rIr-rrpr!rrr8test_HELO_parameter_rejected_when_extensions_not_enableds    zISMTPDChannelTest.test_HELO_parameter_rejected_when_extensions_not_enabledcCs*|d|d||jjjddS)Nr/sMAIL from: rtrr!rrr"test_MAIL_allows_space_after_colons    z3SMTPDChannelTest.test_MAIL_allows_space_after_coloncCs*|d|d||jjjddS)NrDs&MAIL from: size=20rtrr!rrr+test_extended_MAIL_allows_space_after_colons    z MAIL from: SIZE=1234rtr)r.r-rlenrIrrpr fill_lenrrr*test_MAIL_command_limit_extended_with_SIZEs    z;SMTPDChannelTest.test_MAIL_command_limit_extended_with_SIZEcCs2|d|d||jjjddddS)NrDs5MAIL from: BODY=8BITMIME SMTPUTF8r5rr!rrr-test_MAIL_command_rejects_SMTPUTF8_by_defaults  z>SMTPDChannelTest.test_MAIL_command_rejects_SMTPUTF8_by_defaultcCs\d|j_|d|d|d|d|d|jjd||jjjddS) Nr/r0r1r2AsA .552 Error: Too much mail data r-Zdata_size_limitr.rIrrpr!rrr-test_data_longer_than_default_data_size_limits     z>SMTPDChannelTest.test_data_longer_than_default_data_size_limitcCs*|d|d||jjjddS)NrDs!MAIL FROM: SIZE=512rtrr!rrrtest_MAIL_size_parameters    z)SMTPDChannelTest.test_MAIL_size_parametercCs*|d|d||jjjddS)NrDs%MAIL FROM: SIZE=invalid9501 Syntax: MAIL FROM:
[SP ] rr!rrr test_MAIL_invalid_size_parameters    z1SMTPDChannelTest.test_MAIL_invalid_size_parametercCsP|d|d||jjjd|d|d||jjjddS)NrDs"MAIL FROM: ham=greenrxsMAIL FROM:s RCPT TO: ham=greenrerr!rrr!test_MAIL_RCPT_unknown_parameterss      z2SMTPDChannelTest.test_MAIL_RCPT_unknown_parameterscCs2d|j_|d|d||jjjddS)NrrDs"MAIL FROM: SIZE=2096s<552 Error: message size exceeds fixed maximum message size rr!rrrrtrr!rrrtest_MAIL_chevronss  z#SMTPDChannelTest.test_MAIL_chevronscCs*|d|d||jjjddS)NrDs MAIL from:<>rtrr!rrrtest_MAIL_empty_chevronss  z)SMTPDChannelTest.test_MAIL_empty_chevronscCs:|d|d||jjjd||jjddS)NrDs%MAIL from: <"Fred Blogs"@example.com>rt"Fred Blogs"@example.comr.rIr-rrprr!rrrtest_MAIL_quoted_localparts  z+SMTPDChannelTest.test_MAIL_quoted_localpartcCs:|d|d||jjjd||jjddS)NrDs#MAIL from: "Fred Blogs"@example.comrtrrr!rrr$test_MAIL_quoted_localpart_no_angles#s  z5SMTPDChannelTest.test_MAIL_quoted_localpart_no_anglescCs:|d|d||jjjd||jjddS)NrDs/MAIL from: <"Fred Blogs"@example.com> SIZE=1000rtrrr!rrr$test_MAIL_quoted_localpart_with_size)s  z5SMTPDChannelTest.test_MAIL_quoted_localpart_with_sizecCs:|d|d||jjjd||jjddS)NrDs-MAIL from: "Fred Blogs"@example.com SIZE=1000rtrrr!rrr.test_MAIL_quoted_localpart_with_size_no_angles/s  z?SMTPDChannelTest.test_MAIL_quoted_localpart_with_size_no_anglescCs4|d|d|d||jjjddS)Nr/sMAIL from:eggs@examplesMAIL from:spam@examples 503 Error: nested MAIL command rr!rrrtest_nested_MAIL5s     z!SMTPDChannelTest.test_nested_MAILcCs |d||jjjddS)NsVRFY eggs@examplesD252 Cannot VRFY user, but will accept message and attempt delivery rr!rrr test_VRFY<s  zSMTPDChannelTest.test_VRFYcCs |d||jjjddS)NsVRFYs501 Syntax: VRFY
rr!rrrtest_VRFY_syntaxBs  z!SMTPDChannelTest.test_VRFY_syntaxcCs |d||jjjddS)NsEXPNs502 EXPN not implemented rr!rrrtest_EXPN_not_implementedGs  z*SMTPDChannelTest.test_EXPN_not_implementedcCs |d||jjjddS)NsMAIL from:503 Error: send HELO first rr!rrrtest_no_HELO_MAILLs  z"SMTPDChannelTest.test_no_HELO_MAILcCs4|d|d|d||jjjddS)Nr/r0r2s503 Error: need RCPT command rr!rrrtest_need_RCPTQs     zSMTPDChannelTest.test_need_RCPTcCs4|d|d|d||jjjddS)Nr/MAIL From: eggs@exampleRCPT to eggs@examples 501 Syntax: RCPT TO:
rr!rrrtest_RCPT_syntax_HELOXs     z&SMTPDChannelTest.test_RCPT_syntax_HELOcCs4|d|d|d||jjjddS)NrDrrs7501 Syntax: RCPT TO:
[SP ] rr!rrrtest_RCPT_syntax_EHLO_s     z&SMTPDChannelTest.test_RCPT_syntax_EHLOcCs4|d|d|d||jjjddS)Nr/rsRCPT to: rtrr!rrrtest_RCPT_lowercase_to_OKfs   z*SMTPDChannelTest.test_RCPT_lowercase_to_OKcCs |d||jjjddS)Nrrrr!rrrtest_no_HELO_RCPTls  z"SMTPDChannelTest.test_no_HELO_RCPTcCs|d|d||jjjd|d||jjjd|d||jjjd|d||jjjd||jjdd d gd fgdS Nr/r0rtr1r2%354 End data with . s data more .z peer-addressz peer-port eggs@example spam@examplez data morer.rIr-rrpr8r r!rrrtest_data_dialogqs$       z!SMTPDChannelTest.test_data_dialogcCs>|d|d|d|d||jjjddS)Nr/r0r1 DATA spams501 Syntax: DATA rr!rrrtest_DATA_syntaxs     z!SMTPDChannelTest.test_DATA_syntaxcCs |d||jjjddS)Nrrrr!rrrtest_no_HELO_DATAs  z"SMTPDChannelTest.test_no_HELO_DATAcCsF|d|d|d|d|d||jjddS)Nr/r0r1r2s.. . .r.rIr- received_datar!rrr$test_data_transparency_section_4_5_2s      z5SMTPDChannelTest.test_data_transparency_section_4_5_2cCs^|d|d|d|d|d|d||jjddd d gd fgdS) Nr/r0r1sRCPT To:ham@exampler2data .rrrz ham@exampler)r.rIr8r r!rrrtest_multiple_RCPTs       z#SMTPDChannelTest.test_multiple_RCPTcCsH|d|d|d|d|d||jjjddS)Nr/r0r1r2sreturn status .s 250 Okish rr!rrrtest_manual_statuss      z#SMTPDChannelTest.test_manual_statuscCs|d|d|d|d||jjjd|d|d|d|d ||jjd d d gd fgdS)Nr/r0r1RSETrtsMAIL From:foo@examplesRCPT To:eggs@exampler2rrz foo@examplerrrr!rrr test_RSETs          zSMTPDChannelTest.test_RSETcCs*|d|d||jjjddS)Nr/rrtrr!rrrtest_HELO_RSETs  zSMTPDChannelTest.test_HELO_RSETcCs |d||jjjddS)NsRSET his501 Syntax: RSET rr!rrrtest_RSET_syntaxs z!SMTPDChannelTest.test_RSET_syntaxcCs |d||jjjddS)Ns UNKNOWN_CMDs1500 Error: command "UNKNOWN_CMD" not recognized rr!rrrtest_unknown_commands  z%SMTPDChannelTest.test_unknown_commandcCstdtf|jj}Wdn1s,0Ytdtfd|j_Wdn1sb0Ytdtf|jj}Wdn1s0Ytdtfd|j_Wdn1s0Ytdtf|jj}Wdn1s0Ytdtfd|j_Wdn1s>0Ytdtf|jj}Wdn1sv0Ytdtfd|j_Wdn1s0Ytdtf|jj}Wdn1s0Ytdtfd|j_Wdn1s0Ytdtf|jj }Wdn1sV0Ytdtfd|j_ Wdn1s0Ytdtf|jj }Wdn1s0Ytdtfd|j_ Wdn1s0Ytdtf|jj }Wdn1s60Ytdtfd|j_ Wdn1sn0Ytdtf|jj }Wdn1s0Ytdtfd|j_ Wdn1s0Ytdtf|jj }Wdn1s0Ytdtfd|j_ Wdn1sN0Ytdtf|jj}Wdn1s0Ytdtfd|j_Wdn1s0YdS)Nspam)rZcheck_warningsDeprecationWarningr-Z_SMTPChannel__serverZ_SMTPChannel__lineZ_SMTPChannel__stateZ_SMTPChannel__greetingZ_SMTPChannel__mailfromZ_SMTPChannel__rcpttosZ_SMTPChannel__dataZ_SMTPChannel__fqdnZ_SMTPChannel__peerZ_SMTPChannel__connZ_SMTPChannel__addr)r rrrrtest_attribute_deprecationssX&&&&(((((((((((((((((z,SMTPDChannelTest.test_attribute_deprecationsN)Frrrr"rBr.rr?rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrs     rrWc@seZdZddZdS)SMTPDChannelIPv6TestcCsbtt_t_tj|_t|_t_t t j dfddd|_ |j \}}tj|j ||dd|_dSr)rrrr rgrhrirjrkrrrYr8r4r5r-rrrrr"s   zSMTPDChannelIPv6Test.setUpN)rrrr"rrrrrsrc@s4eZdZddZddZddZddZd d Zd S) !SMTPDChannelWithDataSizeLimitTestcCsdtt_t_tj|_t|_t_t t j dfddd|_ |j \}}tj|j ||ddd|_dS)Nrr#Tr% rrrrrr"s  z'SMTPDChannelWithDataSizeLimitTest.setUpcCs ttt_t_|jt_dSrrlr!rrrrBs z*SMTPDChannelWithDataSizeLimitTest.tearDowncCs|jj||jdSrrrrrrr.sz,SMTPDChannelWithDataSizeLimitTest.write_linecCs|d|d||jjjd|d||jjjd|d||jjjd|d||jjjd||jjdd d gd fgdSrrr!rrrtest_data_limit_dialogs$       z8SMTPDChannelWithDataSizeLimitTest.test_data_limit_dialogcCs~|d|d||jjjd|d||jjjd|d||jjjd|d||jjjddS) Nr/r0rtr1r2rs'This message is longer than 32 bytes .rrr!rrr$test_data_limit_dialog_too_much_data.s       zFSMTPDChannelWithDataSizeLimitTest.test_data_limit_dialog_too_much_dataN)rrrr"rBr.rrrrrrrs  rc@s4eZdZddZddZddZddZd d Zd S) SMTPDChannelWithDecodeDataFalsecCsZtt_t_tj|_t|_t_t t j dfd|_ |j \}}t|j |||_dS)Nrr#rrrrrr"?s  z%SMTPDChannelWithDecodeDataFalse.setUpcCs ttt_t_|jt_dSrrlr!rrrrBGs z(SMTPDChannelWithDecodeDataFalse.tearDowncCs|jj||jdSrrrrrrr.Lsz*SMTPDChannelWithDecodeDataFalse.write_linecCsP|d|d|d|d|d|d||jjddS)Nr/r0r1r2plain ascii textrErr!rrrtest_ascii_dataPs      z/SMTPDChannelWithDecodeDataFalse.test_ascii_datacCsZ|d|d|d|d|d|d|d||jjddS) Nr/r0r1r2utf8 enriched text: żźćand some plain asciirEs/utf8 enriched text: żźć and some plain asciirr!rrrtest_utf8_dataYs       z.SMTPDChannelWithDecodeDataFalse.test_utf8_dataNrrrr"rBr.rrrrrrr=s  rc@s4eZdZddZddZddZddZd d Zd S) SMTPDChannelWithDecodeDataTruecCsbtt_t_tj|_t|_t_t t j dfddd|_ |j \}}tj|j ||dd|_dSrrrrrrr"is   z$SMTPDChannelWithDecodeDataTrue.setUpcCs ttt_t_|jt_dSrrlr!rrrrBts z'SMTPDChannelWithDecodeDataTrue.tearDowncCs|jj||jdSrrrrrrr.ysz)SMTPDChannelWithDecodeDataTrue.write_linecCsP|d|d|d|d|d|d||jjddS)Nr/r0r1r2rrEzplain ascii textrr!rrrr}s      z.SMTPDChannelWithDecodeDataTrue.test_ascii_datacCsZ|d|d|d|d|d|d|d||jjddS) Nr/r0r1r2rrrEu/utf8 enriched text: żźć and some plain asciirr!rrrrs       z-SMTPDChannelWithDecodeDataTrue.test_utf8_dataNrrrrrrgs   rc@sLeZdZddZddZddZddZd d Zd d Zd dZ ddZ dS)&SMTPDChannelTestWithEnableSMTPUTF8TruecCsbtt_t_tj|_t|_t_t t j dfddd|_ |j \}}tj|j ||dd|_dS)Nrr#TrSrrrrrr"s   z,SMTPDChannelTestWithEnableSMTPUTF8True.setUpcCs ttt_t_|jt_dSrrlr!rrrrBs z/SMTPDChannelTestWithEnableSMTPUTF8True.tearDowncCs|jj||jdSrrrrrrr.sz1SMTPDChannelTestWithEnableSMTPUTF8True.write_linecCs0|d|dd||jjjddS)NrDu7MAIL from: BODY=8BITMIME SMTPUTF8utf-8rt)r.rrIr-rrpr!rrr1test_MAIL_command_accepts_SMTPUTF8_when_announceds zXSMTPDChannelTestWithEnableSMTPUTF8True.test_MAIL_command_accepts_SMTPUTF8_when_announcedcCs|ddD]}|d|||jjjddd|d||jjjddd|d||jjjddd |d |d kr||jjjd q||jjjd qdS)NrD)rsBODY=8BITMIME SMTPUTF8sMAIL from: r250srcpt to:data354sc .rrts250 SMTPUTF8 message okish r)r Zmail_parametersrrrtest_process_smtputf8_messages     zDSMTPDChannelTestWithEnableSMTPUTF8True.test_process_smtputf8_messagecCs|d|dd||jjjddd|dd||jjjddd|d||jjjddd |d |d ||jjd dS) NrDu2MAIL From: naïve@examplé BODY=8BITMIME SMTPUTF8rrrruRCPT To:späm@examplér2rrrE)r.rrIr-rrprr!rrrrs    z5SMTPDChannelTestWithEnableSMTPUTF8True.test_utf8_datacCsn|ddtd}|dd|dd||jjjd|dd|d||jjjd dS) N ehlo example$mail from:<@example>rrr @example>rrtr.rrIr-rrprrrr7test_MAIL_command_limit_extended_with_SIZE_and_SMTPUTF8s     z^SMTPDChannelTestWithEnableSMTPUTF8True.test_MAIL_command_limit_extended_with_SIZE_and_SMTPUTF8cCs|ddtd}dD]}|d||d||jjjddd |d||d ||jjjddd |d ||jjjddd |d ||jjjddd|d||jjjddd qdS)Nr r r )rbcrs a@example>rrs500r rsrcpt to:rrstest .r)r rcharrrr1test_multiple_emails_with_extended_command_lengths     zXSMTPDChannelTestWithEnableSMTPUTF8True.test_multiple_emails_with_extended_command_lengthN) rrrr"rBr.rr rrrrrrrrs  rc@seZdZddZdS) MiscTestCasecCshd}tj|t|ddS)N> Z COMMASPACErgZDevnullZOptionsNEWLINEZ parseargsZprogramZDATA_SIZE_DEFAULTusage) blacklist)rZ check__all__r)r rrrr test__all__szMiscTestCase.test__all__N)rrrrrrrrrsr__main__)!rarJtestrrZ test.supportrrrirr rr ExceptionrrZTestCaserrCrVrdrwrrbrcrrrrrrrmainrrrrs8 "]%B`  7*,X