;ò
¢)?Bc           @   s&  d  Z  d k Z d k Z d k Z d k Z d k l Z d k l Z d k l	 Z	 d k l
 Z
 d k l Z d k l Z d k l Z d k Z d	 k l Z d
 k l Z d k l Z d Z y e e f Wn e j
 o d Z d Z n Xd f  d „  ƒ  YZ d „  Z d „  Z d „  Z d „  Z  d S(   s¢  Local SMTP direct drop-off.

This module delivers messages via SMTP to a locally specified daemon.  This
should be compatible with any modern SMTP server.  It is expected that the MTA
handles all final delivery.  We have to play tricks so that the list object
isn't locked while delivery occurs synchronously.

Note: This file only handles single threaded delivery.  See SMTPThreaded.py
for a threaded implementation.
N(   s   UnicodeType(   s   mm_cfg(   s   Utils(   s   Errors(   s   Decorate(   s   syslog(   s   MsgSafeDict(   s
   formataddr(   s   Header(   s   Charsets   .i   i    s
   Connectionc           B   s,   t  Z d „  Z d „  Z d „  Z d „  Z RS(   Nc         C   s   t  |  _ d  S(   N(   s   Nones   selfs   _Connection__conn(   s   self(    (    s+   /var/mailman/Mailman/Handlers/SMTPDirect.pys   __init__:   s    c         C   s8   t  i ƒ  |  _ |  i i t i t i ƒ t i |  _	 d  S(   N(
   s   smtplibs   SMTPs   selfs   _Connection__conns   connects   mm_cfgs   SMTPHOSTs   SMTPPORTs    SMTP_MAX_SESSIONS_PER_CONNECTIONs   _Connection__numsessions(   s   self(    (    s+   /var/mailman/Mailman/Handlers/SMTPDirect.pys	   __connect=   s    c         C   s•   |  i t j o |  i ƒ  n y |  i i | | | ƒ } Wn# t	 i
 j
 o |  i ƒ  ‚  n X|  i d 8_ |  i d j o |  i ƒ  n | Sd  S(   Ni   i    (   s   selfs   _Connection__conns   Nones   _Connection__connects   sendmails	   envsenders   recipss   msgtexts   resultss   smtplibs   SMTPExceptions   quits   _Connection__numsessions(   s   selfs	   envsenders   recipss   msgtexts   results(    (    s+   /var/mailman/Mailman/Handlers/SMTPDirect.pys   sendmailB   s    
c         C   sO   |  i t j o d  Sn y |  i i ƒ  Wn t i j
 o n Xt |  _ d  S(   N(   s   selfs   _Connection__conns   Nones   quits   smtplibs   SMTPException(   s   self(    (    s+   /var/mailman/Mailman/Handlers/SMTPDirect.pys   quitU   s    (   s   __name__s
   __module__s   __init__s   _Connection__connects   sendmails   quit(    (    (    s+   /var/mailman/Mailman/Handlers/SMTPDirect.pys
   Connection9   s   			c         C   sI  | i d ƒ } | o d  Sn | i d ƒ } | t j o- |  o |  i ƒ  } qh t i d d ƒ } n t } | i
 d ƒ p | d o | i d ƒ p |  i o> g  i } | D] } | | g ƒ q² ~ } d | d <t } n0 t i d j o | g } n t | t i ƒ } | i
 d	 ƒ o | d	 } n | t j o< | i d
 ƒ o! t i |  | | ƒ t | d
 <n t } n h  } t i ƒ  } | d } t ƒ  } z} | | d	 <xe | o] | i ƒ  } | | d <y | |  | | | | | ƒ Wq­t! j
 o | i | ƒ ‚  q­Xq­W| d	 =Wd  | i" ƒ  | | d <Xt i ƒ  } t$ | h  d | | <d t% | i& ƒ  ƒ <d t% | ƒ <d t% | ƒ <d |  i' ƒ  <d | i( ƒ  <ƒ } t i* o( t+ i, t i* d t i* d d | ƒn | o6 t i- o( t+ i, t i- d t i- d d | ƒq`nG | i d ƒ o6 t i. o( t+ i, t i. d t i. d d | ƒq`n g  }	 g  } x² | i1 ƒ  D]¤ \ } \ } }
 | d j o
 | d j o | i | ƒ n |	 i | ƒ t i4 oP | i5 h  d | <d | <d |
 <ƒ t+ i, t i4 d t i4 d d | ƒqyqyW|	 p | o t6 i7 |	 | ƒ ‚ n d  S(   Ns   recipss	   envsenders   extras   bouncess   personalizes   verpi   i    s   undelivereds	   decorateds   times   sizes   #recipss   #refuseds   listnames   senders   kwss   tolistiô  i(  s	   recipients   failcodes   failmsg(8   s   msgdatas   gets   recipss	   envsenders   Nones   mlists   GetBouncesEmails   Utilss   get_site_emails   deliveryfuncs   has_keys   personalizes   appends   _[1]s   recips   chunkss   verpdelivers   mm_cfgs   SMTP_MAX_RCPTSs   chunkifys   Decorates   processs   msgs   Trues   bulkdelivers   refuseds   times   t0s
   origrecipss
   Connections   conns   pops   chunks	   Exceptions   quits   t1s   MsgSafeDicts   lens	   as_strings   internal_names
   get_senders   ds   SMTP_LOG_EVERY_MESSAGEs   syslogs   write_exs   SMTP_LOG_REFUSEDs   SMTP_LOG_SUCCESSs   tempfailuress   permfailuress   itemss   codes   smtpmsgs   SMTP_LOG_EACH_FAILUREs   updates   Errorss   SomeRecipientsFailed(   s   mlists   msgs   msgdatas   codes   chunks   deliveryfuncs   chunkss   recipss   conns   tempfailuress   smtpmsgs   refuseds   recips   ds   t0s   t1s   _[1]s
   origrecipss   permfailuress	   envsender(    (    s+   /var/mailman/Mailman/Handlers/SMTPDirect.pys   process`   sˆ    6*



	
 
 
m


 

(c         C   si  h  d d <d d <d d <d d <d d <d	 d <}
 h  } x} |  D]u } t } | i d
 ƒ } | d j o | | d } n |
 i | d ƒ } | i | g  ƒ } | i | ƒ | | | <qI Wg  }	 g  } d } xŠ | i ƒ  D]| } xO | D]G } | i | ƒ | d } | | j o |	 i | ƒ g  } d } qî qî W| o |	 i | ƒ g  } d } qá qá W|	 Sd  S(   Ns   comi   s   neti   s   orgs   edui   s   uss   cas   .i    (   s   chunkmaps   bucketss   recipss   rs   Nones   tlds   rfinds   is   gets   bins   buckets   appends   chunkss   currentchunks   chunklens   valuess	   chunksize(   s   recipss	   chunksizes   bins   is   bucketss   buckets   rs   chunklens   tlds   chunkss   chunkmaps   currentchunk(    (    s+   /var/mailman/Mailman/Handlers/SMTPDirect.pys   chunkifyå   s<    <   
c         C   s4  x-| d D]!} | g | d <t i | ƒ } t i |  | | ƒ | i	 d ƒ oœ t
 i | ƒ \ } } t
 i | ƒ \ } } | t j o t d d | ƒ q n h  d | <d | <d t i | ƒ <}
 d t i |
 t i | ƒ f } n |  i d	 j oæ | d
 =t } |  i | ƒ o |  i | ƒ } n | o¡ t
 i |  i | ƒ ƒ } | d j o
 d } n t | ƒ } | i  p d }	 t" | t# ƒ o t$ | |	 d ƒ } n t% | | ƒ i& ƒ  } t' | | f ƒ | d <qâ| | d <n | d =| i	 d h  ƒ i( | ƒ o d | d <n t) |  | | | | | ƒ q Wd  S(   Ns   recipss   verps   smtps*   Skipping VERP delivery to unqual recip: %ss   bouncess   mailboxs   hosts   %s@%si   s   tos   us-asciis
   iso-8859-1s   asciis   replaces   Tos   x-mailman-copys   add-dup-headers   yess   X-Mailman-Copy(,   s   msgdatas   recips   copys   deepcopys   msgs   msgcopys   Decorates   processs   mlists   gets   Utilss
   ParseEmails	   envsenders   bmailboxs   bdomains   rmailboxs   rdomains   Nones   syslogs   DOTs   joins   ds   mm_cfgs   VERP_FORMATs   personalizes   names   isMembers   getMemberNames
   GetCharSets   getMemberLanguages   charsets   Charsets   input_codecs   codecs
   isinstances   UnicodeTypes   unicodes   Headers   encodes
   formataddrs   has_keys   bulkdelivers   failuress   conn(   s   mlists   msgs   msgdatas	   envsenders   failuress   conns   rmailboxs   msgcopys   charsets   codecs   ds   recips   names   bdomains   rdomains   bmailbox(    (    s+   /var/mailman/Mailman/Handlers/SMTPDirect.pys   verpdeliver  sD     		*$
c         C   sŠ  | d =| d =| | d <| | d <| i ƒ  } h  }
 | d } | d } y | i	 | | | ƒ }
 Wnt
 i j
 o% } t d d | | ƒ | i }
 nã t
 i j
 op } t d d	 | i | i | ƒ | i d
 j  p | i d j o+ x( | D] } | i | i f |
 | <qí Wqyne t i t t
 i f j
 oI } t d d | | ƒ t | ƒ }	 x# | D] } d |	 f |
 | <qZWn X| i |
 ƒ d  S(   Ns   senders	   errors-tos   Senders	   Errors-Tos   recipss
   message-ids   smtp-failures%   All recipients refused: %s, msgid: %ss'   SMTP session failure: %s, %s, msgid: %siô  i(  s#   Low level smtp error: %s, msgid: %siÿÿÿÿ(   s   msgs	   envsenders	   as_strings   msgtexts   refuseds   msgdatas   recipss   msgids   conns   sendmails   smtplibs   SMTPRecipientsRefuseds   es   syslogs
   recipientss   SMTPResponseExceptions	   smtp_codes
   smtp_errors   rs   sockets   errors   IOErrors   SMTPExceptions   strs   failuress   update(   s   mlists   msgs   msgdatas	   envsenders   failuress   conns   msgtexts   es   msgids   errors   refuseds   rs   recips(    (    s+   /var/mailman/Mailman/Handlers/SMTPDirect.pys   bulkdeliverV  s8    	



	
	  " (!   s   __doc__s   copys   times   sockets   smtplibs   typess   UnicodeTypes   Mailmans   mm_cfgs   Utilss   Errorss   Mailman.Handlerss   Decorates   Mailman.Logging.Syslogs   syslogs   Mailman.SafeDicts   MsgSafeDicts   emails   email.Utilss
   formataddrs   email.Headers   Headers   email.Charsets   Charsets   DOTs   Trues   Falses	   NameErrors
   Connections   processs   chunkifys   verpdelivers   bulkdeliver(   s   Errorss   processs   Charsets   syslogs   DOTs
   formataddrs   smtplibs   Trues   emails   verpdelivers   MsgSafeDicts   chunkifys
   Connections   mm_cfgs   bulkdelivers   Decorates   copys   Falses   sockets   Utilss   Headers   UnicodeTypes   time(    (    s+   /var/mailman/Mailman/Handlers/SMTPDirect.pys   ?   s4   					'	…	+	F