Ñò
?]Mc           @   sb  d  Z  d d k Z d d k Z d d k l Z d d k l Z d d k l Z d d k	 l
 Z
 d d k	 l Z d d k	 l Z d d	 k	 l Z d d
 k	 l Z d d k l Z d d k	 l Z d Z e i e
 i d ƒ ƒ d  Z d „  Z h e d ƒ e i 6e d ƒ e i 6e d ƒ e i 6e d ƒ e i 6Z e i Z d d d „  ƒ  YZ d d d „  ƒ  YZ d S(   s   Handle delivery bounces.iÿÿÿÿN(   t
   StringType(   t   MIMEText(   t   MIMEMessage(   t   mm_cfg(   t   Utils(   t   Message(   t   MemberAdaptor(   t   Pending(   t   syslog(   t   i18nt    i   i   c         C   s   |  S(   N(    (   t   s(    (    s#   /usr/lib/mailman/Mailman/Bouncer.pyt   _*   s    s   due to excessive bouncess   by yourselfs   by the list administrators   for unknown reasonst   _BounceInfoc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s)   | |  _  d  |  _ |  i | | | ƒ d  S(   N(   t   membert   Nonet   cookiet   reset(   t   selfR   t   scoret   datet   noticesleft(    (    s#   /usr/lib/mailman/Mailman/Bouncer.pyt   __init__7   s    		c         C   s(   | |  _  | |  _ | |  _ t |  _ d  S(   N(   R   R   R   t   ZEROHOUR_PLUSONEDAYt
   lastnotice(   R   R   R   R   (    (    s#   /usr/lib/mailman/Mailman/Bouncer.pyR   <   s    			c         C   s   d |  i  S(   Nsí   <bounce info for member %(member)s
        current score: %(score)s
        last bounce date: %(date)s
        email notices left: %(noticesleft)s
        last notice date: %(lastnotice)s
        confirmation cookie: %(cookie)s
        >(   t   __dict__(   R   (    (    s#   /usr/lib/mailman/Mailman/Bouncer.pyt   __repr__B   s    	(   t   __name__t
   __module__R   R   R   (    (    (    s#   /usr/lib/mailman/Mailman/Bouncer.pyR   6   s   		t   Bouncerc           B   sG   e  Z d  „  Z d d d „ Z d „  Z d „  Z d „  Z d d „ Z RS(   c         C   sv   t  i |  _ t  i |  _ t  i |  _ t  i |  _ t  i	 |  _
 t  i |  _ t  i |  _ t  i |  _ h  |  _ h  |  _ d  S(   N(   R   t   DEFAULT_BOUNCE_PROCESSINGt   bounce_processingt   DEFAULT_BOUNCE_SCORE_THRESHOLDt   bounce_score_thresholdt   DEFAULT_BOUNCE_INFO_STALE_AFTERt   bounce_info_stale_aftert(   DEFAULT_BOUNCE_YOU_ARE_DISABLED_WARNINGSt    bounce_you_are_disabled_warningst1   DEFAULT_BOUNCE_YOU_ARE_DISABLED_WARNINGS_INTERVALt)   bounce_you_are_disabled_warnings_intervalt.   DEFAULT_BOUNCE_UNRECOGNIZED_GOES_TO_LIST_OWNERt&   bounce_unrecognized_goes_to_list_ownert&   DEFAULT_BOUNCE_NOTIFY_OWNER_ON_DISABLEt   bounce_notify_owner_on_disablet&   DEFAULT_BOUNCE_NOTIFY_OWNER_ON_REMOVALt   bounce_notify_owner_on_removalt   bounce_infot   delivery_status(   R   (    (    s#   /usr/lib/mailman/Mailman/Bouncer.pyt   InitVarsP   s    	g      ð?c         C   sT  |  i  | ƒ p d  S|  i | ƒ } | d  j o t i ƒ  d  } n t | t ƒ p; t | | | |  i ƒ } t d d |  i	 ƒ  | | i
 ƒ n|  i | ƒ t i j o t d d |  i	 ƒ  | ƒ d  S| i | j o0 t d d |  i	 ƒ  | t i d | d ƒ ƒ n  t i | ƒ } t i | i ƒ } | |  i | j  o3 | i | | |  i ƒ t d d	 |  i	 ƒ  | ƒ n8 | i
 | 7_
 | | _ t d d
 |  i	 ƒ  | | i
 ƒ | i
 |  i j os t i oR t d d |  i	 ƒ  | | i
 |  i ƒ |  i | | ƒ | i d | i | i ƒ q,|  i | | | ƒ n |  i  | ƒ o |  i | | ƒ n d  S(   Ni   t   bounces   %s: %s bounce score: %ss   %s: %s residual bounce receiveds*   %s: %s already scored a bounce for date %ss   %d-%b-%Yi    i   s'   %s: %s has stale bounce info, resettings   %s: %s current bounce score: %ss-   sending %s list probe to: %s (score %s >= %s)(   i    i    i    i    i   i    (   t   isMembert   getBounceInfoR   t   timet	   localtimet
   isinstanceR   R%   R   t   internal_nameR   t   getDeliveryStatusR   t   ENABLEDR   t   strftimeR   t   midnightR#   R   R!   R   t   VERP_PROBESt	   sendProbeR   t   disableBouncingMembert   setBounceInfo(   R   R   t   msgt   weightt   dayt   infot   nowt
   lastbounce(    (    s#   /usr/lib/mailman/Mailman/Bouncer.pyt   registerBouncei   sN    					

c         C   sÅ   |  i  t i |  i ƒ  | ƒ } | | _ |  i | | ƒ t i o t d d |  i ƒ  | ƒ n& t d d |  i ƒ  | | i	 |  i
 ƒ |  i | t i ƒ |  i | ƒ |  i o |  i | | ƒ n d  S(   NR1   s-   %s: %s disabling due to probe bounce receiveds-   %s: %s disabling due to bounce score %s >= %s(   t   pend_newR   t	   RE_ENABLER7   R   R?   R   R<   R   R   R!   t   setDeliveryStatusR   t   BYBOUNCEt   sendNextNotificationR+   t   _Bouncer__sendAdminBounceNotice(   R   R   RC   R@   R   (    (    s#   /usr/lib/mailman/Mailman/Bouncer.pyR>   «   s    	
		
c         C   s  t  i |  i ƒ } t  i d h |  i d 6| d 6d d 6t d ƒ d 6d d 6d d	 6| d
 6d |  ƒ} t d ƒ } t i |  i ƒ  | | d |  i	 ƒ} | i
 d ƒ | i t | d t  i |  i	 ƒ ƒƒ t | t ƒ o | i t | ƒ ƒ n | i t | ƒ ƒ | i |  ƒ d  S(   Ns
   bounce.txtt   listnamet   addrR
   t   negativet   disabledt   didt   butt   reenablet	   owneraddrt   mlists   Bounce action notificationt   langs   multipart/mixedt   _charset(   R   t   get_site_emailt	   host_namet   maketextt	   real_nameR   R   t   UserNotificationt   GetOwnerEmailt   preferred_languaget   set_typet   attachR   t
   GetCharSetR6   R    R   t   send(   R   R   R@   t	   siteownert   textt   subjectt   umsg(    (    s#   /usr/lib/mailman/Mailman/Bouncer.pyt   __sendAdminBounceNoticeÀ   s,    
		c         C   s©  |  i  | ƒ } | d  j o d  S|  i | ƒ } | i d j o± |  i | d d |  i d d ƒ|  i | i ƒ | t i	 j o t
 d d |  i ƒ  | ƒ n t
 d d	 |  i ƒ  | h d
 t i	 6d t i 6d t i 6d t i 6i | d ƒ ƒ d  Sd |  i d d d ƒ| i f } |  i | d d ƒ} |  i ƒ  } |  i | ƒ } t i | ƒ } | d  j o t d ƒ } n t | ƒ } | t i	 j oA t i d t i t i | i ƒ ƒ ƒ }	 t d ƒ }
 | |
 7} n t i d h |  i d 6| i d 6| d 6| d 6|  i | ƒ d 6|  i ƒ  d 6| d 6d | d |  ƒ} t  i! | | d | d | ƒ} | d  =d! | i | d" <| i" |  ƒ | i d 8_ t i ƒ  d#  | _# |  i$ | | ƒ d  S($   Ni    s   disabled addresst   admin_notift   useracki   R1   s'   %s: %s deleted after exhausting noticest	   subscribes%   %s: %s auto-unsubscribed [reason: %s]RJ   t   BYUSERt   BYADMINt   UNKNOWNs   invalid values   %s/%st   confirmt   absolutes   for unknown reasonss   %d-%b-%Ys5    The last bounce received from you was dated %(date)ss   disabled.txtRM   R   t
   confirmurlt
   optionsurlt   passwordRT   t   reasonRV   RU   Rd   Re   s   confirm t   Subjecti   (%   R3   R   R8   R   t   ApprovedDeleteMemberR-   t   pend_confirmR   R   RJ   R   R7   Rk   Rl   Rm   t   gett   GetScriptURLt   GetOptionsURLt   GetRequestEmailt   getMemberLanguaget   REASONSR   R4   R:   R5   R   R;   R   RZ   R[   t   getMemberPasswordR]   R   R\   Rb   R   R?   (   R   R   RC   Rs   Rp   Rq   t   reqaddrRV   t	   txtreasonR   t   extraRd   R@   (    (    s#   /usr/lib/mailman/Mailman/Bouncer.pyRK   à   sh    				

	

c   	      C   s÷   | i  ƒ  } | i d t d ƒ ƒ } t i | t i |  i ƒ ƒ } | d  j o t d ƒ } n t | i ƒ  ƒ } t	 i
 | i  ƒ  |  i ƒ  | d |  i ƒ} | i d ƒ t | d t i |  i ƒ ƒ} | i | ƒ | i t | ƒ ƒ | i |  ƒ d  S(   NRe   s   (no subject)s!   [No bounce details are available]RV   s   multipart/mixedRW   (   t
   get_senderRw   R   R   t   onelineRa   R^   R   t   noticeR   R\   R]   R_   R   R`   R   Rb   (	   R   R@   t   msgdatat   et   senderRe   Rƒ   t   bmsgt   txt(    (    s#   /usr/lib/mailman/Mailman/Bouncer.pyt   BounceMessage   s"    			N(	   R   R   R0   R   RF   R>   RL   RK   R‰   (    (    (    s#   /usr/lib/mailman/Mailman/Bouncer.pyR   O   s   	B		 	@(    (    (   t   __doc__t   sysR4   t   typesR    t   email.MIMETextR   t   email.MIMEMessageR   t   MailmanR   R   R   R   R   t   Mailman.Logging.SyslogR   R	   t   EMPTYSTRINGR5   t   daysR   R   RJ   Rk   Rl   Rm   R|   R   R   (    (    (    s#   /usr/lib/mailman/Mailman/Bouncer.pyt   <module>   s,   		
