grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026U iÛf¢‡ã@sZddlZddlZddlZddlZddlZddlZddlZddlZddlZddl m Z ddl m Z m Z dddddgZejdZd ZGd d „d ƒZeƒad Zd ZdZd$dd„ZGdd„dejƒZGdd„dejƒZGdd„deƒZGdd„deƒZGdd„deƒZGdd„dƒZdd„Z e!dk�rVe ƒZ"e"j#Z#de#k�rle# $d¡Z%e&e#de%…e'ƒe(ƒdgƒZ)e#e%dd…Z#nddl*Z)e+e)e#ƒZ,e,e"j-e"j.fe"j/e"j0fe"j1e"j2d�Z3e"j4�r2z ddl5Z5Wn.e6k �räe7dej8d �e 9d¡YnXe5 :d!¡d"Z;ze 4e;¡Wn.ek �rTYnXdS)%éN)Úwarn)Ú get_addr_specÚget_angle_addrÚ SMTPChannelÚ SMTPServerÚDebuggingServerÚ PureProxyÚ MailmanProxyzPython SMTP proxy version 0.3c@seZdZdd„Zdd„ZdS)ÚDevnullcCsdS©N©©ÚselfÚmsgr r ú*/opt/alt/python38/lib64/python3.8/smtpd.pyÚwritefóz Devnull.writecCsdSr r ©rr r rÚflushgrz Devnull.flushN)Ú__name__Ú __module__Ú __qualname__rrr r r rr esr Ú z, iÚcCs4tttƒtjd�|r&t|tjd�t |¡dS)N©Úfile)ÚprintÚ__doc__ÚglobalsÚsysÚstderrÚexit)Úcoderr r rÚusagepsr#c@sþeZdZdZdZdZe efdd„¡Ze dd„ƒZ e dd d fd d „Z d d „Z dd„Ze dd„ƒZejdd„ƒZe dd„ƒZejdd„ƒZe dd„ƒZejdd„ƒZe dd„ƒZejdd„ƒZe dd„ƒZejdd„ƒZe dd „ƒZejd!d „ƒZe d"d#„ƒZejd$d#„ƒZe d%d&„ƒZejd'd&„ƒZe d(d)„ƒZejd*d)„ƒZe d+d,„ƒZejd-d,„ƒZe d.d/„ƒZejd0d/„ƒZd1d2„Zd3d4„Zd5d6„Zd7d8„Zd9d:„Zd;d<„Z d=d>„Z!d?d@„Z"dAdB„Z#dCdD„Z$dEdF„Z%dGdH„Z&dIdJ„Z'dKdL„Z(dMdN„Z)dOdP„Z*dQdR„Z+dS)SrréicCs|Sr r )Úxr r rÚ|rzSMTPChannel.cCs0zt|j ¡ƒWStk r*|jYSXdSr )ÚmaxÚcommand_size_limitsÚvaluesÚ ValueErrorÚcommand_size_limitrr r rÚmax_command_size_limit~sz"SMTPChannel.max_command_size_limitNFc Cs&tjj|||d�||_||_||_||_||_||_|rF|rFt dƒ‚|rdd|_ d|_ d|_ t |_nd|_ d|_ tdƒ|_ d |_| ¡d|_d |_|j ¡t ¡|_z| ¡|_WnBtk rø}z$| ¡|jd tjkrâ‚WY¢dSd}~XYnXtd t |jƒt!d �| "d|jt#f¡dS)N©ÚmapúFdecode_data and enable_SMTPUTF8 cannot be set to True at the same timerú Ú.ró ó.ó FrzPeer:rz 220 %s %s)$ÚasynchatÚ async_chatÚ__init__Ú smtp_serverÚconnÚaddrÚdata_size_limitÚenable_SMTPUTF8Ú _decode_datar*Ú _emptystringÚ_linesepÚ_dotsepÚNEWLINEÚ_newlineÚordÚ_set_rset_stateÚ seen_greetingÚ extended_smtpr(ÚclearÚsocketZgetfqdnÚfqdnZ getpeernameÚpeerÚOSErrorÚcloseÚargsÚerrnoZENOTCONNrÚreprÚ DEBUGSTREAMÚpushÚ __version__) rZserverr9r:r;r.r<Ú decode_dataÚerrr r rr7…s@   zSMTPChannel.__init__cCs.|j|_d|_g|_d|_d|_| d¡dS)NFrr2)ÚCOMMANDÚ smtp_stateÚmailfromÚrcpttosÚrequire_SMTPUTF8Ú num_bytesÚset_terminatorrr r rÚ_set_post_data_state¬s z SMTPChannel._set_post_data_statecCs| ¡d|_g|_dS©Nr)r\Ú received_dataÚreceived_linesrr r rrDµszSMTPChannel._set_rset_statecCstdtdƒ|jS)NzTAccess to __server attribute on SMTPChannel is deprecated, use 'smtp_server' insteadé©rÚDeprecationWarningr8rr r rÚ__server½s ÿzSMTPChannel.__servercCstdtdƒ||_dS)NzRSetting __server attribute on SMTPChannel is deprecated, set 'smtp_server' insteadr`ra©rÚvaluer r rrcÂs ÿcCstdtdƒ|jS)NzUAccess to __line attribute on SMTPChannel is deprecated, use 'received_lines' insteadr`©rrbr_rr r rÚ__lineÈs ÿzSMTPChannel.__linecCstdtdƒ||_dS)NzSSetting __line attribute on SMTPChannel is deprecated, set 'received_lines' insteadr`rfrdr r rrgÍs ÿcCstdtdƒ|jS)NzRAccess to __state attribute on SMTPChannel is deprecated, use 'smtp_state' insteadr`©rrbrVrr r rÚ__stateÓs ÿzSMTPChannel.__statecCstdtdƒ||_dS)NzPSetting __state attribute on SMTPChannel is deprecated, set 'smtp_state' insteadr`rhrdr r rriØs ÿcCstdtdƒ|jS)NzXAccess to __greeting attribute on SMTPChannel is deprecated, use 'seen_greeting' insteadr`©rrbrErr r rÚ __greetingÞs ÿzSMTPChannel.__greetingcCstdtdƒ||_dS)NzVSetting __greeting attribute on SMTPChannel is deprecated, set 'seen_greeting' insteadr`rjrdr r rrkãs ÿcCstdtdƒ|jS)NzSAccess to __mailfrom attribute on SMTPChannel is deprecated, use 'mailfrom' insteadr`©rrbrWrr r rÚ __mailfromés ÿzSMTPChannel.__mailfromcCstdtdƒ||_dS)NzQSetting __mailfrom attribute on SMTPChannel is deprecated, set 'mailfrom' insteadr`rlrdr r rrmîs ÿcCstdtdƒ|jS)NzQAccess to __rcpttos attribute on SMTPChannel is deprecated, use 'rcpttos' insteadr`©rrbrXrr r rÚ __rcpttosôs ÿzSMTPChannel.__rcpttoscCstdtdƒ||_dS)NzOSetting __rcpttos attribute on SMTPChannel is deprecated, set 'rcpttos' insteadr`rnrdr r rroùs ÿcCstdtdƒ|jS)NzTAccess to __data attribute on SMTPChannel is deprecated, use 'received_data' insteadr`©rrbr^rr r rÚ__dataÿs ÿzSMTPChannel.__datacCstdtdƒ||_dS)NzRSetting __data attribute on SMTPChannel is deprecated, set 'received_data' insteadr`rprdr r rrqs ÿcCstdtdƒ|jS)NzKAccess to __fqdn attribute on SMTPChannel is deprecated, use 'fqdn' insteadr`©rrbrIrr r rÚ__fqdn s ÿzSMTPChannel.__fqdncCstdtdƒ||_dS)NzISetting __fqdn attribute on SMTPChannel is deprecated, set 'fqdn' insteadr`rrrdr r rrss ÿcCstdtdƒ|jS)NzKAccess to __peer attribute on SMTPChannel is deprecated, use 'peer' insteadr`©rrbrJrr r rÚ__peers ÿzSMTPChannel.__peercCstdtdƒ||_dS)NzISetting __peer attribute on SMTPChannel is deprecated, set 'peer' insteadr`rtrdr r rrus ÿcCstdtdƒ|jS)NzKAccess to __conn attribute on SMTPChannel is deprecated, use 'conn' insteadr`©rrbr9rr r rÚ__conn s ÿzSMTPChannel.__conncCstdtdƒ||_dS)NzISetting __conn attribute on SMTPChannel is deprecated, set 'conn' insteadr`rvrdr r rrw%s ÿcCstdtdƒ|jS)NzKAccess to __addr attribute on SMTPChannel is deprecated, use 'addr' insteadr`©rrbr:rr r rÚ__addr+s ÿzSMTPChannel.__addrcCstdtdƒ||_dS)NzISetting __addr attribute on SMTPChannel is deprecated, set 'addr' insteadr`rxrdr r rry0s ÿcCs&tj |t|d|jrdndƒ¡dS)Nr0úutf-8Úascii)r5r6rQÚbytesrYr r r rrQ7s  ÿzSMTPChannel.pushcCs|d}|j|jkr|j}n|j|jkr*|j}|r<|j|krÚjoinr_rrOrPrVrUrZrQr=r€ÚfindÚupperÚstriprFr(r+Úgetattrr}r;Úsplitr?r@rrBr^rJrWrXr…r†r8Úprocess_messager\) rÚlineZszÚiÚcommandÚargZmax_szÚmethodr�ÚtextrMÚkwargsZstatusr r rÚfound_terminatorLsl   ÿ ÿ   þ zSMTPChannel.found_terminatorcCsH|s| d¡dS|jr&| d¡dS| ¡||_| d|j¡dS)Nz501 Syntax: HELO hostnameú503 Duplicate HELO/EHLOz250 %s)rQrErDrI©rr’r r rÚ smtp_HELOŠs  zSMTPChannel.smtp_HELOcCs²|s| d¡dS|jr&| d¡dS| ¡||_d|_| d|j¡|jrr| d|j¡|jdd7<|js‚| d¡|jr¤| d ¡|jdd 7<| d ¡dS) Nz501 Syntax: EHLO hostnamer—Tz250-%sz 250-SIZE %sÚMAILéz 250-8BITMIMEz 250-SMTPUTF8é z250 HELP) rQrErDrFrIr;r(r=r<r˜r r rÚ smtp_EHLO–s&    zSMTPChannel.smtp_EHLOcCs|r| d¡n | d¡dS)Nz501 Syntax: NOOPr‡©rQr˜r r rÚ smtp_NOOP¬s zSMTPChannel.smtp_NOOPcCs| d¡| ¡dS)Nz221 Bye)rQZclose_when_doner˜r r rÚ smtp_QUIT²s zSMTPChannel.smtp_QUITcCs0t|ƒ}|d|… ¡|kr,||d… ¡SdSr])r~rŠr‹)rÚkeywordr’Zkeylenr r rÚ_strip_command_keyword·sz"SMTPChannel._strip_command_keywordcCsF|sdS| ¡ d¡r$t|ƒ\}}n t|ƒ\}}|s<||fS|j|fS)N)rrú<)ÚlstripÚ startswithrrZ addr_spec)rr’ÚaddressÚrestr r rÚ_getaddr½s zSMTPChannel._getaddrcCsHi}|D]:}| d¡\}}}| ¡r,|r2|s2dS|r:|nd||<q|S)Nú=T)Ú partitionÚisalnum)rÚparamsÚresultZparamÚeqrer r rÚ _getparamsÈszSMTPChannel._getparamscCs|rôd}| ¡}|dkr$| d¡qþ|dkr8| d¡qþ|dkr^d}|jrR||7}| |¡qþ|dkr„d }|jrx||7}| |¡qþ|d kr˜| d ¡qþ|d kr¬| d ¡qþ|dkrÀ| d¡qþ|dkrÔ| d¡qþ|dkrè| d¡qþ| d¡n | d¡dS)Nú [SP ]ZEHLOz250 Syntax: EHLO hostnameZHELOz250 Syntax: HELO hostnameršz 250 Syntax: MAIL FROM:
ZRCPTz250 Syntax: RCPT TO:
r}z250 Syntax: DATAZRSETz250 Syntax: RSETZNOOPz250 Syntax: NOOPZQUITz250 Syntax: QUITZVRFYz250 Syntax: VRFY
zD501 Supported commands: EHLO HELO MAIL RCPT DATA RSET NOOP QUIT VRFYzD250 Supported commands: EHLO HELO MAIL RCPT DATA RSET NOOP QUIT VRFY)rŠrQrF)rr’ZextendedZlc_argrr r rÚ smtp_HELPÓs:          zSMTPChannel.smtp_HELPcCs@|r2| |¡\}}|r"| d¡q<| d|¡n | d¡dS)NzB252 Cannot VRFY user, but will accept message and attempt deliveryz502 Could not VRFY %sz501 Syntax: VRFY
)r¨rQ)rr’r¦r¬r r rÚ smtp_VRFYös  zSMTPChannel.smtp_VRFYcCsÌ|js| d¡dStd|td�d}|jr4|d7}|dkrJ| |¡dS| d|¡}| |¡\}}|sv| |¡dS|jsŽ|rŽ| |¡dS|jr¢| d¡dS| ¡  ¡|_ |  |j ¡}|dkrÒ| |¡dS|j sú|  dd ¡}|d krú| d ¡dS|j�r8|  d d ¡}|dk�r d|_n|d k �r8| d¡dS|  dd¡}|�rˆ| ¡�sb| |¡dS|j�rˆt|ƒ|jk�rˆ| d¡dSt| ¡ƒdk�r¨| d¡dS||_td|jtd�| d¡dS)Nú503 Error: send HELO firstz ===> MAILrz 501 Syntax: MAIL FROM:
r°zFROM:z503 Error: nested MAIL commandZBODYÚ7BIT)r´Z8BITMIMEz1501 Error: BODY can only be one of 7BIT, 8BITMIMEZSMTPUTF8FTz&501 Error: SMTPUTF8 takes no argumentsZSIZEz:552 Error: message size exceeds fixed maximum message sizerz:555 MAIL FROM parameters not recognized or not implementedzsender:r‡)rErQrrPrFr¢r¨rWrŠr�r…r¯r=Úpopr<rYÚisdigitr;Úintr~Úkeys)rr’Ú syntaxerrr¦r¬ZbodyÚsmtputf8Úsizer r rÚ smtp_MAILsh                    zSMTPChannel.smtp_MAILcCs|js| d¡dStd|td�|js6| d¡dSd}|jrH|d7}|dkr^| |¡dS| d|¡}| |¡\}}|sŠ| |¡dS|js¢|r¢| |¡dS| ¡  ¡|_ |  |j ¡}|dkrÒ| |¡dSt |  ¡ƒdkrð| d ¡dS|j |¡td |jtd�| d ¡dS) Nr³z ===> RCPTrz503 Error: need MAIL commandz501 Syntax: RCPT TO:
r°zTO:rz8555 RCPT TO parameters not recognized or not implementedzrecips:r‡)rErQrrPrWrFr¢r¨rŠr�r†r¯r~r¸rXr)rr’r¹r¦r¬r r rÚ smtp_RCPT7s@           zSMTPChannel.smtp_RCPTcCs(|r| d¡dS| ¡| d¡dS)Nz501 Syntax: RSETr‡)rQrDr˜r r rÚ smtp_RSETZs  zSMTPChannel.smtp_RSETcCsZ|js| d¡dS|js(| d¡dS|r:| d¡dS|j|_| d¡| d¡dS)Nr³z503 Error: need RCPT commandz501 Syntax: DATAs . z#354 End data with .)rErQrXr}rVr[r˜r r rÚ smtp_DATAas    zSMTPChannel.smtp_DATAcCs| d¡dS)Nz502 EXPN not implementedržr˜r r rÚ smtp_EXPNpszSMTPChannel.smtp_EXPN),rrrrUr}r+Ú collectionsÚ defaultdictr(Úpropertyr,ÚDATA_SIZE_DEFAULTr7r\rDZ_SMTPChannel__serverÚsetterZ_SMTPChannel__lineZ_SMTPChannel__stateZ_SMTPChannel__greetingZ_SMTPChannel__mailfromZ_SMTPChannel__rcpttosZ_SMTPChannel__dataZ_SMTPChannel__fqdnZ_SMTPChannel__peerZ_SMTPChannel__connZ_SMTPChannel__addrrQrƒr–r™r�rŸr r¢r¨r¯r±r²r¼r½r¾r¿rÀr r r rrws” ÿ '                       >   # 6#c@s2eZdZeZedddfdd„Zdd„Zdd„ZdS) rNFcCsÎ||_||_||_||_||_|r.|r.tdƒ‚tjj||d�zNt j |dt j iŽ}|  |dd|dd¡|  ¡| |¡| d¡Wn| ¡‚Yn(Xtd|jjt t ¡¡||ftd�dS) Nr/r-Útyperr$éz0%s started at %s Local addr: %s Remote addr:%sr)Z _localaddrÚ _remoteaddrr;r<r=r*ÚasyncoreÚ dispatcherr7rHZ getaddrinfoZ SOCK_STREAMZ create_socketZset_reuse_addrZbindZlistenrLrÚ __class__rÚtimeÚctimerP)rZ localaddrZ remoteaddrr;r.r<rSZ gai_resultsr r rr7xs6ÿ  þþzSMTPServer.__init__c Cs6tdt|ƒtd�| ||||j|j|j|j¡}dS)NzIncoming connection from %sr)rrOrPÚ channel_classr;Ú_mapr<r=)rr9r:Zchannelr r rÚhandle_accepted”súzSMTPServer.handle_acceptedcKst‚dSr )ÚNotImplementedError©rrJrWrXr�r•r r rrŽŸszSMTPServer.process_message) rrrrrÎrÄr7rÐrŽr r r rrtsþ  c@seZdZdd„Zdd„ZdS)rcCsld}| ¡}|D]V}|rL|sLd|d}t|tƒs@t| d¡ƒ}t|ƒd}t|tƒs^t|ƒ}t|ƒqdS)Nr$zX-Peer: rrz)Ú splitlinesÚ isinstancer€rOÚencoder)rrJr�Z inheadersÚlinesr�Z peerheaderr r rÚ_print_message_contentÃs   z&DebuggingServer._print_message_contentcKsXtdƒ|r@| d¡r&td|dƒ| d¡r@td|dƒ| ||¡tdƒdS)Nz%---------- MESSAGE FOLLOWS ----------r…zmail options: %sr†zrcpt options: %s z%------------ END MESSAGE ------------)rÚgetr×rÒr r rrŽÔs   zDebuggingServer.process_messageN)rrrr×rŽr r r rrÁscs,eZdZ‡fdd„Zdd„Zdd„Z‡ZS)rcs.d|kr|drtdƒ‚tt|ƒj||ŽdS)Nr<z$PureProxy does not support SMTPUTF8.©r*Úsuperrr7©rrMr•©rËr rr7àszPureProxy.__init__c Csf| d¡}d}|D]}|sq(|d7}q| |d|d¡t |¡}| |||¡}td|td�dS)Nrrr$z X-Peer: %szwe got some refusals:r)r�ÚinsertrArˆÚ_deliverrrP) rrJrWrXr�rÖr�r�Úrefusedr r rrŽås   zPureProxy.process_messagec Csîddl}i}zB| ¡}| |jd|jd¡z| |||¡}W5| ¡XWnš|jk r„}ztdtd�|j }W5d}~XYnft |j fk rè}zBtd|j td�t |ddƒ}t |dd ƒ} |D]} || f|| <qÆW5d}~XYnX|S) Nrr$zgot SMTPRecipientsRefusedrZgotZ smtp_codeéÿÿÿÿZ smtp_errorÚignore)ÚsmtplibZSMTPZconnectrÈÚquitZsendmailZSMTPRecipientsRefusedrrPZ recipientsrKZ SMTPExceptionrËrŒ) rrWrXr�rârßÚsÚeZerrcodeÚerrmsgÚrr r rrÞós$    zPureProxy._deliver)rrrr7rŽrÞÚ __classcell__r r rÜrrßs cs$eZdZ‡fdd„Zdd„Z‡ZS)r cs.d|kr|drtdƒ‚tt|ƒj||ŽdS)Nr<z'MailmanProxy does not support SMTPUTF8.rÙrÛrÜr rr7 szMailmanProxy.__init__cCs*ddlm}ddlm}ddlm}ddlm}g} |D]t} |  ¡ d¡d} |  d¡} t| ƒdkrfq8| d} t| ƒdkr„| d }nd }|  | ¡r8|d krœq8|   | | |f¡q8| D]\} } }|  | ¡q²t d d   |¡td�|rü| |||¡}t d|td�i}||ƒ}| |¡}| d¡�s&||d<| d¡�sDt t ¡¡|d<| D]Ü\} } }t d| td�| | ¡}|�s†|j| dd�}||| <|d k�r |j|d d�n‚|dk�rº|j|d d�nh|dk�rÔ|j|d d�nN|dk�rî|j|d d�n4|dk�rH|dk�r d|d <nd!|d <|j|d d��qHdS)"Nr)ÚStringIO)ÚUtils)ÚMessage)ÚMailListú@ú-r`r$r)rÚadminÚownerÚrequestrˆÚleavezforwarding recips:r„rzwe got refusals:ÚfromZFromÚdateZDatezsending message to)Úlock)Útolistrï)Ztoadminrð)Ztoownerrñ)Z torequest)rˆròrˆZ subscribeZSubjectZ unsubscribe)ÚioréZMailmanrêrërìÚlowerr�r~Z list_existsrÚremoverrˆrPrÞrØrÌrÍZEnqueue)rrJrWrXr�rérêrërìZ listnamesZrcptZlocalÚpartsZlistnamer‘rßZmlistsrärZmlistr r rrŽsb                    zMailmanProxy.process_message)rrrr7rŽrèr r rÜrr s c@seZdZdZdZdZdZdS)ÚOptionsTrNF)rrrÚsetuidÚ classnameÚ size_limitr<r r r rrû_srûc Cspz.t tjdd…dddddddd g¡\}}Wn.tjk r\}ztd|ƒW5d}~XYnXtƒ}|D]º\}}|d kr‚td ƒqh|d kržttƒt d ¡qh|d kr®d|_ qh|dkr¾||_ qh|dkrÎtj a qh|dkrÞd|_ qh|dkrhzt|ƒ}||_Wqhtd|tj d�t d¡YqhXqht|ƒdk�rPs‚ þ  M-SB      þ