B
    ©0H[¶  ã               @   sh   d Z ddl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 G dd„ deƒZdS )	zSMTP email backend class.é    N)Úsettings)ÚBaseEmailBackend)Úsanitize_address)ÚDNS_NAMEc            
       sN   e Zd ZdZd‡ fdd„	Zedd„ ƒZdd	„ Zd
d„ Zdd„ Z	dd„ Z
‡  ZS )ÚEmailBackendz=
    A wrapper that manages the SMTP network connection.
    NFc                sÚ   t ƒ j|d� |ptj| _|p"tj| _|d kr4tjn|| _|d krHtj	n|| _
|d kr\tjn|| _|d krptjn|| _|d kr„tjn|| _|	d kr˜tjn|	| _|
d kr¬tjn|
| _| jrÆ| jrÆtdƒ‚d | _t ¡ | _d S )N)Úfail_silentlyz^EMAIL_USE_TLS/EMAIL_USE_SSL are mutually exclusive, so only set one of those settings to True.)ÚsuperÚ__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__© úbC:\Users\HIRONO~1\AppData\Local\Temp\pip-install-6bm3nxem\django\django\core\mail\backends\smtp.pyr	      s    zEmailBackend.__init__c             C   s   | j rtjS tjS )N)r   ÚsmtplibZSMTP_SSLÚSMTP)r   r   r   r   Úconnection_class&   s    zEmailBackend.connection_classc          	   C   sÆ   | j r
dS dt ¡ i}| jdk	r*| j|d< | jrD| | j| jdœ¡ yX| j| j	| j
f|Ž| _ | js|| jr|| j j| j| jd� | jrš| jrš| j  | j| j¡ dS  tjtjfk
rÀ   | js¼‚ Y nX dS )z½
        Ensure an open connection to the email server. Return whether or not a
        new connection was required (True or False) or None if an exception
        passed silently.
        FZlocal_hostnameNr   )ÚkeyfileÚcertfileT)r   r   Zget_fqdnr   r   Úupdater   r   r   r
   r   r   Ústarttlsr   r   Úloginr   ÚSMTPExceptionÚsocketÚerrorr   )r   Zconnection_paramsr   r   r   Úopen*   s&    

zEmailBackend.openc          	   C   sv   | j dkrdS zZy| j  ¡  W nF tjtjfk
rD   | j  ¡  Y n" tjk
rd   | jr^dS ‚ Y nX W dd| _ X dS )z)Close the connection to the email server.N)	r   ÚquitÚsslÚSSLErrorr   ZSMTPServerDisconnectedÚcloser%   r   )r   r   r   r   r,   L   s    
zEmailBackend.closec          	   C   sl   |sdS | j �T |  ¡ }| jr&|dkr*dS d}x"|D ]}|  |¡}|r4|d7 }q4W |r^|  ¡  W dQ R X |S )zm
        Send one or more EmailMessage objects and return the number of email
        messages sent.
        Nr   é   )r   r(   r   Ú_sendr,   )r   Zemail_messagesZnew_conn_createdZnum_sentÚmessageÚsentr   r   r   Úsend_messages_   s    

zEmailBackend.send_messagesc                s‚   |  ¡ sdS |jptj‰ t|jˆ ƒ}‡ fdd„|  ¡ D ƒ}| ¡ }y| j |||j	dd�¡ W n t
jk
r|   | jsx‚ dS X dS )z-A helper method that does the actual sending.Fc                s   g | ]}t |ˆ ƒ‘qS r   )r   )Ú.0Úaddr)Úencodingr   r   ú
<listcomp>{   s    z&EmailBackend._send.<locals>.<listcomp>z
)ÚlinesepT)Ú
recipientsr4   r   ÚDEFAULT_CHARSETr   Ú
from_emailr/   r   ZsendmailÚas_bytesr   r%   r   )r   Zemail_messager9   r7   r/   r   )r4   r   r.   u   s    zEmailBackend._send)
NNNNNFNNNN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r	   Úpropertyr   r(   r,   r1   r.   Ú__classcell__r   r   )r   r   r      s     "r   )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   