a
    [fl                     @   sl   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 ddlmZ G dd	 d	eZdS )
zSMTP email backend class.    N)settings)BaseEmailBackendsanitize_address)DNS_NAME)cached_propertyc                
       sZ   e Zd ZdZd fdd	Ze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 u r4tjn|| _|d u rHtj	n|| _
|d u r\tjn|| _|d u rptjn|| _|d u rtjn|| _|	d u rtjn|	| _|
d u rtjn|
| _| jr| jrt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__ pC:\Users\91910\OneDrive\Desktop\vts_admin_rebuild-master\vts\Lib\site-packages\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_class6   s    zEmailBackend.connection_classc                 C   s:   | j s| jr.tjtjd}|| j | j |S t S d S )N)protocol)r   r   ssl
SSLContextPROTOCOL_TLS_CLIENTload_cert_chaincreate_default_context)r   ssl_contextr   r   r   r*   :   s
    zEmailBackend.ssl_contextc                 C   s   | j r
dS dt i}| jdur*| j|d< | jr:| j|d< zZ| j| j| jfi || _ | jsr| j	rr| j j
| jd | jr| jr| j | j| j W dS  ty   | js Y n0 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   context)r+   T)r   r   Zget_fqdnr   r   r*   r#   r   r   r   starttlsr   r   loginOSErrorr	   )r   Zconnection_paramsr   r   r   openC   s*    


zEmailBackend.openc              	   C   s   | j du rdS zfz| j   W nL tjtjfyB   | j   Y n* tjyj   | jrdY W d| _ dS  Y n0 W d| _ nd| _ 0 dS )z)Close the connection to the email server.N)	r   quitr%   SSLErrorr    ZSMTPServerDisconnectedcloseSMTPExceptionr	   r"   r   r   r   r2   d   s    

zEmailBackend.closec                 C   s   |sdS | j f |  }| jr&|du r6W d   dS d}|D ]}| |}|r>|d7 }q>|rf|   W d   n1 sz0    Y  |S )zm
        Send one or more EmailMessage objects and return the number of email
        messages sent.
        r   N   )r   r/   r   _sendr2   )r   Zemail_messagesZnew_conn_createdZnum_sentmessagesentr   r   r   send_messagesw   s    

&zEmailBackend.send_messagesc                    s   |  sdS |jptj t|j } fdd|  D }| }z| j|||j	dd W n t
jy|   | jsv Y dS 0 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)
recipientsr<   r   DEFAULT_CHARSETr   
from_emailr6   r   Zsendmailas_bytesr    r3   r	   )r   Zemail_messagerA   r?   r6   r   r;   r   r5      s"    
zEmailBackend._send)
NNNNNFNNNN)__name__
__module____qualname____doc__r   propertyr#   r   r*   r/   r2   r8   r5   __classcell__r   r   r   r   r      s(             $

!r   )rF   r    r%   r   Zdjango.confr   Zdjango.core.mail.backends.baser   Zdjango.core.mail.messager   Zdjango.core.mail.utilsr   Zdjango.utils.functionalr   r   r   r   r   r   <module>   s   