ó
Oü½cc           @   sx   d  Z  d d l Z d d l m Z d d l m Z e j d e j ƒ Z e j d e j ƒ Z	 e j d ƒ Z
 d „  Z d S(	   s  Yale's mail server is pretty dumb.

Its reports include the end user's name, but not the full domain.  I think we
can usually guess it right anyway.  This is completely based on examination of
the corpse, and is subject to failure whenever Yale even slightly changes
their MTA. :(

iÿÿÿÿN(   t   StringIO(   t   getaddressess&   Message not delivered to the followings   Error Details   \s+(?P<addr>\S+)\s+c         C   sÎ  |  j  ƒ  r d  SyI t |  j d d ƒ g ƒ d d } | s@ d  S| j d d ƒ \ } } Wn t t f k
 rs d  SX| j ƒ  d k rŠ d  S| j d ƒ } | j ƒ  x- t	 | d ƒ D] \ } } | | k r³ d  Sq³ Wi  } t
 |  j ƒ  ƒ } d }	 x— | j ƒ  }
 |
 s
Pn  |	 d k r.t j |
 ƒ r.d }	 qô |	 d k rMt j |
 ƒ rMPqô |	 d k rô t j |
 ƒ } | r‡d | | j d
 ƒ <q‡qô qô Wg  } x6 | j ƒ  D]( } | j | d ƒ | j | d ƒ qžW| S(   Nt   fromt    i    i   t   @s   mailer-daemont   .t   edut   yalet   addrs	   @yale.edus   @cs.yale.edu(   R   R   (   t   is_multipartt   NoneR   t   gett   splitt
   IndexErrort
   ValueErrort   lowert   reverset   zipR    t   get_payloadt   readlinet   scret   searcht   ecret   acret   groupt   keyst   append(   t   msgt   whofromt   usernamet   domaint   partst   part1t   part2t   namest   bodyt   statet   linet   mot   addrst   name(    (    s4   /export/web/mailman/mailman/Mailman/Bouncers/Yale.pyt   process$   sH    #
	(   t   __doc__t   ret	   cStringIOR    t   email.UtilsR   t   compilet
   IGNORECASER   R   R   R)   (    (    (    s4   /export/web/mailman/mailman/Mailman/Bouncers/Yale.pyt   <module>   s   