
 X                 @   s   d  Z  d d l Z d d l Z d d l Z d d l m Z d d l m Z d d l m	 Z	 d d l
 m Z Gd d   d e  Z d S)	zSMTP email backend class.    N)settings)BaseEmailBackend)sanitize_address)DNS_NAMEc                   sv   e  Z d  Z d Z d d d d d d d d d d   f d d 
 Z d d   Z d d	   Z d
 d   Z d d   Z   S)EmailBackendz=
    A wrapper that manages the SMTP network connection.
    NFc                sL  t  t |   j d |  | p% t j |  _ | p7 t j |  _ | d  k rR t j n | |  _	 | d  k rp t j
 n | |  _ | d  k r t j n | |  _ | d  k r t j n | |  _ | d  k r t j n | |  _ |	 d  k r t j n |	 |  _ |
 d  k rt j n |
 |  _ |  j r0|  j r0t d   n  d  |  _ t j   |  _ d  S)Nfail_silentlyz^EMAIL_USE_TLS/EMAIL_USE_SSL are mutually exclusive, so only set one of those settings to True.)superr   __init__r   Z
EMAIL_HOSThostZ
EMAIL_PORTportZEMAIL_HOST_USERusernameZEMAIL_HOST_PASSWORDpasswordZEMAIL_USE_TLSuse_tlsZEMAIL_USE_SSLuse_sslZEMAIL_TIMEOUTtimeoutZEMAIL_SSL_KEYFILEssl_keyfileZEMAIL_SSL_CERTFILEssl_certfile
ValueError
connection	threadingRLock_lock)selfr
   r   r   r   r   r   r   r   r   r   kwargs)	__class__ L/home/ubuntu/projects/ifolica/build/django/django/core/mail/backends/smtp.pyr	      s    	zEmailBackend.__init__c             C   sR  |  j  r d S|  j r t j n t j } i t j   d 6} |  j d k	 rZ |  j | d <n  |  j r | j i |  j	 d 6|  j
 d 6 n  y | |  j |  j |  |  _  |  j r |  j r |  j  j   |  j  j d |  j	 d |  j
  |  j  j   n  |  j r"|  j r"|  j  j |  j |  j  n  d SWn$ t j k
 rM|  j sI  n  Yn Xd S)z
        Ensures we have a connection to the email server. Returns whether or
        not a new connection was required (True or False).
        FZlocal_hostnameNr   keyfilecertfileT)r   r   smtplibZSMTP_SSLSMTPr   Zget_fqdnr   updater   r   r
   r   r   ehlostarttlsr   r   loginSMTPExceptionr   )r   connection_classZconnection_paramsr   r   r   open%   s,    			
	zEmailBackend.openc             C   s   |  j  d k r d Szg y |  j  j   WnO t j t j f k
 rT |  j  j   Yn% t j k
 rx |  j rq d S  Yn XWd d |  _  Xd S)z*Closes the connection to the email server.N)	r   quitsslSSLErrorr   ZSMTPServerDisconnectedcloser%   r   )r   r   r   r   r+   I   s    	zEmailBackend.closec          
   C   s   | s
 d S|  j  j |  j   } |  j s- d Sd } x0 | D]( } |  j |  } | r: | d 7} q: q: W| ry |  j   n  Wd QX| S)zo
        Sends one or more EmailMessage objects and returns the number of email
        messages sent.
        Nr      )r   r'   r   _sendr+   )r   Zemail_messagesZnew_conn_createdZnum_sentmessageZsentr   r   r   send_messages\   s    
	zEmailBackend.send_messagesc                s   | j    s d S| j p t j   t | j    }   f d d   | j    D } | j   } y& |  j j | | | j	 d d   Wn( t
 j k
 r |  j s   n  d SYn Xd S)z-A helper method that does the actual sending.Fc                s   g  |  ] } t  |     q Sr   )r   ).0addr)encodingr   r   
<listcomp>x   s   	 z&EmailBackend._send.<locals>.<listcomp>linesepz
T)
recipientsr2   r   DEFAULT_CHARSETr   
from_emailr.   r   sendmailas_bytesr   r%   r   )r   Zemail_messager7   r5   r.   r   )r2   r   r-   r   s    &		zEmailBackend._send)	__name__
__module____qualname____doc__r	   r'   r+   r/   r-   r   r   )r   r   r      s   $r   )r=   r   r)   r   Zdjango.confr   Zdjango.core.mail.backends.baser   Zdjango.core.mail.messager   Zdjango.core.mail.utilsr   r   r   r   r   r   <module>   s   