ó
Ú"wTc           @   s¼  d  Z  d d d d d d d d d	 d
 d g Z d d l Z d d l Z d d l Z d d l Z d d l Td d l Td d l Td d l	 Td d l
 Td e e f d „  ƒ  YZ d e e f d „  ƒ  YZ d e f d „  ƒ  YZ d e e f d „  ƒ  YZ d e e f d „  ƒ  YZ d e e f d „  ƒ  YZ d e e f d „  ƒ  YZ d e e f d „  ƒ  YZ d e e f d „  ƒ  YZ d	 e e f d „  ƒ  YZ d
 e e f d „  ƒ  YZ d e e f d „  ƒ  YZ d S(   s3  Classes implementing retrievers (message sources getmail can retrieve mail
from).

Currently implemented:

  SimplePOP3Retriever
  SimplePOP3SSLRetriever
  BrokenUIDLPOP3Retriever
  BrokenUIDLPOP3SSLRetriever
  MultidropPOP3Retriever
  MultidropPOP3SSLRetriever
  MultidropSDPSRetriever
  SimpleIMAPRetriever -- IMAP, as a protocol, is a FPOS, and it shows.
    The Python standard library module imaplib leaves much up to
    the user because of this.
  SimpleIMAPSSLRetriever - the above, for IMAP-over-SSL.
  MultidropIMAPRetriever
  MultidropIMAPSSLRetriever
t   SimplePOP3Retrievert   SimplePOP3SSLRetrievert   BrokenUIDLPOP3Retrievert   BrokenUIDLPOP3SSLRetrievert   MultidropPOP3Retrievert   MultidropPOP3SSLRetrievert   MultidropSDPSRetrievert   SimpleIMAPRetrievert   SimpleIMAPSSLRetrievert   MultidropIMAPRetrievert   MultidropIMAPSSLRetrieveriÿÿÿÿN(   t   *c           B   sõ   e  Z d  Z e d d d e ƒ e d d d e d d ƒ e d d d e d d ƒ e d d	 ƒ e d d
 d e d d ƒ e d d ƒ e d d d e d d ƒ e
 d d d e d e ƒ e
 d d d e d e ƒ f	 Z d Z d Z e ƒ  Z d „  Z d „  Z RS(   s4   Retriever class for single-user POP3 mailboxes.
    t   namet   configparsert   requiredt
   getmaildirt   defaults   ~/.getmail/t   timeouti´   t   servert   portin   t   usernamet   passwordt   use_apopt   delete_dup_msgidst   POP3c         C   sK   |  j  j ƒ  d |  j j d d ƒ |  j j d d ƒ |  j j d d ƒ f S(   Ns   SimplePOP3Retriever:%s@%s:%sR   R   R   (   t   logt   tracet   conft   get(   t   self(    (    s:   /usr/lib/python2.7/dist-packages/getmailcore/retrievers.pyt   __str__H   s
    c         C   s2   |  j  j ƒ  |  j  j d |  j ƒ  t j ƒ d  S(   Ns   SimplePOP3Retriever(%s)(   R   R   t   infot   _confstringt   ost   linesep(   R   (    (    s:   /usr/lib/python2.7/dist-packages/getmailcore/retrievers.pyt   showconfP   s    N(   t   __name__t
   __module__t   __doc__t   ConfInstancet   Falset   ConfDirectoryt   ConfIntt
   ConfStringt   ConfPasswordt   Nonet   ConfBoolt
   _confitemst   received_fromt   received_witht   localhostnamet   received_byR   R#   (    (    (    s:   /usr/lib/python2.7/dist-packages/getmailcore/retrievers.pyR    5   s   		c           B   s…  e  Z d  Z e d d d e ƒ e d d d e d d ƒ e d d d e d d ƒ e d d	 ƒ e d d
 d e d e ƒ e d d ƒ e	 d d d e d d ƒ e d d d e d e ƒ e d d d e d e ƒ e d d d e d d ƒ e d d d e d d ƒ e d d d e d d ƒ e d d d e d d ƒ e d d d e d d ƒ e d d d e d d ƒ f Z d Z d Z e ƒ  Z d „  Z d „  Z RS(   s=   Retriever class for single-user POP3-over-SSL mailboxes.
    R   R   R   R   R   s   ~/.getmail/R   i´   R   R   R   R   R   R   t   keyfilet   certfilet   ca_certst   ssl_fingerprintst   ssl_versiont   ssl_cipherss   POP3-SSLc         C   sK   |  j  j ƒ  d |  j j d d ƒ |  j j d d ƒ |  j j d d ƒ f S(   Ns   SimplePOP3SSLRetriever:%s@%s:%sR   R   R   (   R   R   R   R   (   R   (    (    s:   /usr/lib/python2.7/dist-packages/getmailcore/retrievers.pyR   o   s
    c         C   s2   |  j  j ƒ  |  j  j d |  j ƒ  t j ƒ d  S(   Ns   SimplePOP3SSLRetriever(%s)(   R   R   R   R    R!   R"   (   R   (    (    s:   /usr/lib/python2.7/dist-packages/getmailcore/retrievers.pyR#   w   s    N(    (   R$   R%   R&   R'   R(   R)   R*   R+   t   POP3_ssl_portR,   R-   R.   t   ConfFilet   ConfTupleOfStringsR/   R0   R1   R2   R3   R   R#   (    (    (    s:   /usr/lib/python2.7/dist-packages/getmailcore/retrievers.pyR   V   s*   		t   BrokenUIDLPOP3RetrieverBasec           B   s8   e  Z d  Z d Z e ƒ  Z d „  Z d „  Z d „  Z	 RS(   s  Retriever base class for single-user POP3 mailboxes on servers that do
    not properly assign unique IDs to messages.  Since with these broken servers
    we cannot rely on UIDL, we have to use message numbers, which are unique
    within a POP3 session, but which change across sessions.  This class
    therefore can not be used to leave old mail on the server and download only
    new mail.
    c         C   s   |  j  j ƒ  d S(   s|   Force list of old messages to be empty by making this a no-op, so
        duplicated IDs are always treated as new messages.N(   R   R   (   R   (    (    s:   /usr/lib/python2.7/dist-packages/getmailcore/retrievers.pyt   _read_oldmailfileˆ   s    c         K   s   |  j  j ƒ  d S(   s'   Short-circuit writing the oldmail file.N(   R   R   (   R   t   unusedt   kwargs(    (    s:   /usr/lib/python2.7/dist-packages/getmailcore/retrievers.pyt   write_oldmailfile   s    c         C   sÛ   |  j  j ƒ  y˜ |  j j ƒ  \ } } } xa | D]Y } t | j ƒ  d ƒ } t | j ƒ  d ƒ } | |  j | <| |  j | <| |  j | <q/ Wt	 |  j j
 ƒ  ƒ |  _ Wn& t j k
 rÍ } t d | ƒ ‚ n Xt |  _ d S(   s9   Don't rely on UIDL; instead, use just the message number.i    i   s   POP error (%s)N(   R   R   t   connt   listt   intt   splitt   msgnum_by_msgidt   msgid_by_msgnumt   msgsizest   sortedt   itemst   sorted_msgnum_msgidt   poplibt   error_protot   getmailOperationErrort   Truet
   gotmsglist(   R   t   responset   msglistt   octetst   linet   msgnumt   msgsizet   o(    (    s:   /usr/lib/python2.7/dist-packages/getmailcore/retrievers.pyt   _getmsglist‘   s    N(
   R$   R%   R&   R-   R0   R2   R3   R>   RA   RX   (    (    (    s:   /usr/lib/python2.7/dist-packages/getmailcore/retrievers.pyR=   }   s   			c           B   sÎ   e  Z d  Z e d d d e ƒ e d d d e d d ƒ e d d d e d d ƒ e d d	 ƒ e d d
 d e d d ƒ e d d ƒ e d d d e d d ƒ e
 d d d e d e ƒ f Z d Z d „  Z d „  Z RS(   s)   For broken POP3 servers without SSL.
    R   R   R   R   R   s   ~/.getmail/R   i´   R   R   in   R   R   R   R   c         C   sK   |  j  j ƒ  d |  j j d d ƒ |  j j d d ƒ |  j j d d ƒ f S(   Ns    BrokenUIDLPOP3Retriever:%s@%s:%sR   R   R   (   R   R   R   R   (   R   (    (    s:   /usr/lib/python2.7/dist-packages/getmailcore/retrievers.pyR   ²   s
    c         C   s2   |  j  j ƒ  |  j  j d |  j ƒ  t j ƒ d  S(   Ns   BrokenUIDLPOP3Retriever(%s)(   R   R   R   R    R!   R"   (   R   (    (    s:   /usr/lib/python2.7/dist-packages/getmailcore/retrievers.pyR#   º   s    N(   R$   R%   R&   R'   R(   R)   R*   R+   R,   R-   R.   R/   R1   R   R#   (    (    (    s:   /usr/lib/python2.7/dist-packages/getmailcore/retrievers.pyR   ¢   s   	c           B   s^  e  Z d  Z e d d d e ƒ e d d d e d d ƒ e d d d e d d ƒ e d d	 ƒ e d d
 d e d e ƒ e d d ƒ e	 d d d e d d ƒ e d d d e d e ƒ e d d d e d d ƒ e d d d e d d ƒ e d d d e d d ƒ e d d d e d d ƒ e d d d e d d ƒ e d d d e d d ƒ f Z d Z d „  Z d „  Z RS(   s&   For broken POP3 servers with SSL.
    R   R   R   R   R   s   ~/.getmail/R   i´   R   R   R   R   R   R4   R5   R6   R7   R8   R9   s   POP3-SSLc         C   sK   |  j  j ƒ  d |  j j d d ƒ |  j j d d ƒ |  j j d d ƒ f S(   Ns#   BrokenUIDLPOP3SSLRetriever:%s@%s:%sR   R   R   (   R   R   R   R   (   R   (    (    s:   /usr/lib/python2.7/dist-packages/getmailcore/retrievers.pyR   Ö   s
    c         C   s2   |  j  j ƒ  |  j  j d |  j ƒ  t j ƒ d  S(   Ns   BrokenUIDLPOP3SSLRetriever(%s)(   R   R   R   R    R!   R"   (   R   (    (    s:   /usr/lib/python2.7/dist-packages/getmailcore/retrievers.pyR#   Þ   s    N(    (   R$   R%   R&   R'   R(   R)   R*   R+   R:   R,   R-   R.   R;   R<   R/   R1   R   R#   (    (    (    s:   /usr/lib/python2.7/dist-packages/getmailcore/retrievers.pyR   À   s$   	c           B   sé   e  Z d  Z e d d d e ƒ e d d d e d d ƒ e d d d e d d ƒ e d d	 ƒ e d d
 d e d d ƒ e d d ƒ e d d d e d d ƒ e
 d d d e d e ƒ e d d ƒ f	 Z d Z d Z e ƒ  Z d „  Z d „  Z RS(   s3   Retriever class for multi-drop POP3 mailboxes.
    R   R   R   R   R   s   ~/.getmail/R   i´   R   R   in   R   R   R   t   envelope_recipientR   c         C   sK   |  j  j ƒ  d |  j j d d ƒ |  j j d d ƒ |  j j d d ƒ f S(   Ns   MultidropPOP3Retriever:%s@%s:%sR   R   R   (   R   R   R   R   (   R   (    (    s:   /usr/lib/python2.7/dist-packages/getmailcore/retrievers.pyR   ÷   s
    c         C   s2   |  j  j ƒ  |  j  j d |  j ƒ  t j ƒ d  S(   Ns   MultidropPOP3Retriever(%s)(   R   R   R   R    R!   R"   (   R   (    (    s:   /usr/lib/python2.7/dist-packages/getmailcore/retrievers.pyR#   ÿ   s    N(   R$   R%   R&   R'   R(   R)   R*   R+   R,   R-   R.   R/   R0   R1   R2   R3   R   R#   (    (    (    s:   /usr/lib/python2.7/dist-packages/getmailcore/retrievers.pyR   ä   s   		c           B   sy  e  Z d  Z e d d d e ƒ e d d d e d d ƒ e d d d e d d ƒ e d d	 ƒ e d d
 d e d e ƒ e d d ƒ e	 d d d e d d ƒ e d d d e d e ƒ e d d ƒ e d d d e d d ƒ e d d d e d d ƒ e d d d e d d ƒ e d d d e d d ƒ e d d d e d d ƒ e d d d e d d ƒ f Z d Z d Z e ƒ  Z d „  Z d „  Z RS(   s<   Retriever class for multi-drop POP3-over-SSL mailboxes.
    R   R   R   R   R   s   ~/.getmail/R   i´   R   R   R   R   R   RY   R4   R5   R6   R7   R8   R9   s   POP3-SSLc         C   sK   |  j  j ƒ  d |  j j d d ƒ |  j j d d ƒ |  j j d d ƒ f S(   Ns"   MultidropPOP3SSLRetriever:%s@%s:%sR   R   R   (   R   R   R   R   (   R   (    (    s:   /usr/lib/python2.7/dist-packages/getmailcore/retrievers.pyR     s
    c         C   s2   |  j  j ƒ  |  j  j d |  j ƒ  t j ƒ d  S(   Ns   MultidropPOP3SSLRetriever(%s)(   R   R   R   R    R!   R"   (   R   (    (    s:   /usr/lib/python2.7/dist-packages/getmailcore/retrievers.pyR#   &  s    N(    (   R$   R%   R&   R'   R(   R)   R*   R+   R:   R,   R-   R.   R;   R<   R/   R0   R1   R2   R3   R   R#   (    (    (    s:   /usr/lib/python2.7/dist-packages/getmailcore/retrievers.pyR     s*   		c           B   sæ   e  Z d  Z e d d d e ƒ e d d d e d d ƒ e d d d e d d ƒ e d d	 ƒ e d d
 d e d d ƒ e d d ƒ e d d d e d d ƒ e
 d d d e d e ƒ f Z d Z d Z e ƒ  Z d „  Z d „  Z d „  Z RS(   s„  Retriever class for multi-drop SDPS (demon.co.uk) mailboxes.

    Extend POP3 class to include support for Demon's protocol extensions, known
    as SDPS.  A non-standard command (*ENV) is used to retrieve the message
    envelope.  See http://www.demon.net/helpdesk/products/mail/sdps-tech.shtml
    for details.

    Support originally requested by Paul Clifford for getmail v.2/3.
    R   R   R   R   R   s   ~/.getmail/R   i´   R   R   in   R   R   R   t   SDPSc         C   sK   |  j  j ƒ  d |  j j d d ƒ |  j j d d ƒ |  j j d d ƒ f S(   Ns   MultidropSDPSRetriever:%s@%s:%sR   R   R   (   R   R   R   R   (   R   (    (    s:   /usr/lib/python2.7/dist-packages/getmailcore/retrievers.pyR   G  s
    c         C   s2   |  j  j ƒ  |  j  j d |  j ƒ  t j ƒ d  S(   Ns   MultidropSDPSRetriever(%s)(   R   R   R   R    R!   R"   (   R   (    (    s:   /usr/lib/python2.7/dist-packages/getmailcore/retrievers.pyR#   O  s    c         C   s½   |  j  j ƒ  t j |  | ƒ } y2 |  j | ƒ } |  j j d | ƒ \ } } } Wn& t j k
 ry } t	 d | ƒ ‚ n Xt
 | ƒ d k  rŸ t d | ƒ ‚ n  | d | _ | d | _ | S(   Ns   *ENV %is!   server does not support *ENV (%s)i   s   short *ENV response (%s)i   i   (   R   R   R    t   _getmsgbyidt   _getmsgnumbyidRB   t   _longcmdRL   RM   t   getmailConfigurationErrort   lenRN   t   sendert	   recipient(   R   t   msgidt   msgRU   t   respt   linesRS   RW   (    (    s:   /usr/lib/python2.7/dist-packages/getmailcore/retrievers.pyR[   T  s    #N(   R$   R%   R&   R'   R(   R)   R*   R+   R,   R-   R.   R/   R0   R1   R2   R3   R   R#   R[   (    (    (    s:   /usr/lib/python2.7/dist-packages/getmailcore/retrievers.pyR   ,  s   				c           B   sF  e  Z d  Z e d d d e ƒ e d d d e d d ƒ e d d d e d d ƒ e d d	 ƒ e d d
 d e d e j	 ƒ e d d ƒ e
 d d d e d d ƒ e d d d e d d d d ƒ e d d d e d e ƒ e d d d e d d ƒ e d d d e d e ƒ e d d d e d e ƒ f Z d Z d Z e ƒ  Z d „  Z d „  Z RS(   s6   Retriever class for single-user IMAPv4 mailboxes.
    R   R   R   R   R   s   ~/.getmail/R   i´   R   R   R   R   t	   mailboxess   ('INBOX', )t   allow_specialst   ALLt   use_peekt   move_on_deletet   use_cram_md5t   use_kerberost   IMAP4c         C   sK   |  j  j ƒ  d |  j j d d ƒ |  j j d d ƒ |  j j d d ƒ f S(   Ns   SimpleIMAPRetriever:%s@%s:%sR   R   R   (   R   R   R   R   (   R   (    (    s:   /usr/lib/python2.7/dist-packages/getmailcore/retrievers.pyR   €  s
    c         C   s2   |  j  j ƒ  |  j  j d |  j ƒ  t j ƒ d  S(   Ns   SimpleIMAPRetriever(%s)(   R   R   R   R    R!   R"   (   R   (    (    s:   /usr/lib/python2.7/dist-packages/getmailcore/retrievers.pyR#   ˆ  s    N(   Rh   (   R$   R%   R&   R'   R(   R)   R*   R+   t   imaplibt
   IMAP4_PORTR,   R-   t   ConfTupleOfUnicodeR.   RO   R/   R0   R1   R2   R3   R   R#   (    (    (    s:   /usr/lib/python2.7/dist-packages/getmailcore/retrievers.pyR   g  s&   		c           B   s¾  e  Z d  Z e d d d e ƒ e d d d e d d ƒ e d d ƒ e d d d e d e j	 ƒ e d d	 ƒ e
 d d
 d e d d ƒ e d d d e d d d d ƒ e d d d e d e ƒ e d d d e d d ƒ e d d d e d d ƒ e d d d e d d ƒ e d d d e d d ƒ e d d d e d d ƒ e d d d e d d ƒ e d d d e d d ƒ e d d d e d e ƒ e d d d e d e ƒ f Z d Z d Z e ƒ  Z d „  Z d „  Z RS(   s?   Retriever class for single-user IMAPv4-over-SSL mailboxes.
    R   R   R   R   R   s   ~/.getmail/R   R   R   R   Rf   s   ('INBOX', )Rg   Rh   Ri   Rj   R4   R5   R6   R7   R8   R9   Rk   Rl   s	   IMAP4-SSLc         C   sK   |  j  j ƒ  d |  j j d d ƒ |  j j d d ƒ |  j j d d ƒ f S(   Ns   SimpleIMAPSSLRetriever:%s@%s:%sR   R   R   (   R   R   R   R   (   R   (    (    s:   /usr/lib/python2.7/dist-packages/getmailcore/retrievers.pyR   ®  s
    c         C   s2   |  j  j ƒ  |  j  j d |  j ƒ  t j ƒ d  S(   Ns   SimpleIMAPSSLRetriever(%s)(   R   R   R   R    R!   R"   (   R   (    (    s:   /usr/lib/python2.7/dist-packages/getmailcore/retrievers.pyR#   ¶  s    N(   s   ALL(    (   R$   R%   R&   R'   R(   R)   R+   R*   Rn   t   IMAP4_SSL_PORTR,   R-   Rp   R.   RO   R;   R<   R/   R0   R1   R2   R3   R   R#   (    (    (    s:   /usr/lib/python2.7/dist-packages/getmailcore/retrievers.pyR   Ž  s0   		c           B   sR  e  Z d  Z e d d d e ƒ e d d d e d d ƒ e d d d e d d ƒ e d d	 ƒ e d d
 d e d e j	 ƒ e d d ƒ e
 d d d e d d ƒ e d d d e d d d d ƒ e d d d e d e ƒ e d d d e d d ƒ e d d d e d e ƒ e d d d e d e ƒ e d d ƒ f Z d Z d Z e ƒ  Z d „  Z d „  Z RS(   s5   Retriever class for multi-drop IMAPv4 mailboxes.
    R   R   R   R   R   s   ~/.getmail/R   i´   R   R   R   R   Rf   s   ('INBOX', )Rg   Rh   Ri   Rj   Rk   Rl   RY   Rm   c         C   sK   |  j  j ƒ  d |  j j d d ƒ |  j j d d ƒ |  j j d d ƒ f S(   Ns   MultidropIMAPRetriever:%s@%s:%sR   R   R   (   R   R   R   R   (   R   (    (    s:   /usr/lib/python2.7/dist-packages/getmailcore/retrievers.pyR   Ö  s
    c         C   s2   |  j  j ƒ  |  j  j d |  j ƒ  t j ƒ d  S(   Ns   MultidropIMAPRetriever(%s)(   R   R   R   R    R!   R"   (   R   (    (    s:   /usr/lib/python2.7/dist-packages/getmailcore/retrievers.pyR#   Þ  s    N(   s   ALL(   R$   R%   R&   R'   R(   R)   R*   R+   Rn   Ro   R,   R-   Rp   R.   RO   R/   R0   R1   R2   R3   R   R#   (    (    (    s:   /usr/lib/python2.7/dist-packages/getmailcore/retrievers.pyR	   ¼  s(   		c           B   sÊ  e  Z d  Z e d d d e ƒ e d d d e d d ƒ e d d ƒ e d d d e d e j	 ƒ e d d	 ƒ e
 d d
 d e d d ƒ e d d d e d d d d ƒ e d d d e d e ƒ e d d d e d d ƒ e d d d e d d ƒ e d d d e d d ƒ e d d d e d d ƒ e d d d e d d ƒ e d d d e d d ƒ e d d d e d d ƒ e d d d e d e ƒ e d d d e d e ƒ e d d ƒ f Z d Z d Z e ƒ  Z d „  Z d „  Z RS(    s>   Retriever class for multi-drop IMAPv4-over-SSL mailboxes.
    R   R   R   R   R   s   ~/.getmail/R   R   R   R   Rf   s   ('INBOX', )Rg   Rh   Ri   Rj   R4   R5   R6   R7   R8   R9   Rk   Rl   RY   s	   IMAP4-SSLc         C   sK   |  j  j ƒ  d |  j j d d ƒ |  j j d d ƒ |  j j d d ƒ f S(   Ns"   MultidropIMAPSSLRetriever:%s@%s:%sR   R   R   (   R   R   R   R   (   R   (    (    s:   /usr/lib/python2.7/dist-packages/getmailcore/retrievers.pyR     s
    c         C   s2   |  j  j ƒ  |  j  j d |  j ƒ  t j ƒ d  S(   Ns   MultidropIMAPSSLRetriever(%s)(   R   R   R   R    R!   R"   (   R   (    (    s:   /usr/lib/python2.7/dist-packages/getmailcore/retrievers.pyR#     s    N(   s   ALL(    (   R$   R%   R&   R'   R(   R)   R+   R*   Rn   Rq   R,   R-   Rp   R.   RO   R;   R<   R/   R0   R1   R2   R3   R   R#   (    (    (    s:   /usr/lib/python2.7/dist-packages/getmailcore/retrievers.pyR
   ä  s2   		(   R&   t   __all__R!   RL   Rn   t   typest   getmailcore.exceptionst   getmailcore.constantst   getmailcore.utilitiest   getmailcore.baseclassest   getmailcore._retrieverbasest   POP3RetrieverBaset   POP3initMixInR    t   POP3SSLinitMixInR   R=   R   R   t   MultidropPOP3RetrieverBaseR   R   R   t   IMAPRetrieverBaset   IMAPinitMixInR   t   IMAPSSLinitMixInR   t   MultidropIMAPRetrieverBaseR	   R
   (    (    (    s:   /usr/lib/python2.7/dist-packages/getmailcore/retrievers.pyt   <module>   s@   	




!'%$!';'.(