
Lcc           @   s   d  Z  d d l m Z d d l m Z d d l m Z d d l m Z y e	 e
 f Wn e k
 rs d Z	 d Z
 n Xd   Z d	 S(
   s   Parse RFC 3464 (i.e. DSN) bounce formats.

RFC 3464 obsoletes 1894 which was the old DSN standard.  This module has not
been audited for differences between the two.
i(   t   typed_subpart_iterator(   t	   parseaddr(   t   StringIO(   t   Stopi   i    c         C   s  g  } xWt  |  d d  D]C} | j   s1 q n  x(| j   D]} | j d d  j   } | j d  ro t S| j d  p | j d  s q> n  g  } t } x d D] } xH | j g  |  D]4 \ } }	 | j   d
 k r t	 } q | j
 |  q W| r| j |  Pq xC | D]; }
 |
 j d  r|
 j d  r| j
 |
 d d ! qqWq Wq> Wq Wi  } x9 | D]1 } | d  k	 rmt |  \ } } t	 | | <qmqmW| j   S(   Nt   messages   delivery-statust   actiont    t   delayedt   failt   errors   original-recipients   final-recipientt   rfc822t   <t   >i   i(   s   original-recipients   final-recipient(   R    t   is_multipartt   get_payloadt   gett   lowert
   startswithR   t   Falset
   get_paramst   Truet   appendt   extendt   endswitht   NoneR   t   keys(   t   msgt   addrst   partt   msgblockR   t   paramst   foundpt   headert   kt   vt   paramt   rtnaddrst   at   realname(    (    s3   /export/web/mailman/mailman/Mailman/Bouncers/DSN.pyt   process&   s:    	'N(   t   __doc__t   email.IteratorsR    t   email.UtilsR   t	   cStringIOR   t   Mailman.Bouncers.BouncerAPIR   R   R   t	   NameErrorR'   (    (    (    s3   /export/web/mailman/mailman/Mailman/Bouncers/DSN.pyt   <module>   s   
