
    df                     z    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	e          ZdS )
zSMTP email backend class.    N)settings)BaseEmailBackendsanitize_address)DNS_NAME)cached_propertyc                   |     e Zd ZdZ	 	 	 	 	 	 	 	 	 	 d fd	Zed             Zed             Zd Z	d Z
d	 Zd
 Z xZS )EmailBackendz=
    A wrapper that manages the SMTP network connection.
    NFc                 6   t                                          |           |pt          j        | _        |pt          j        | _        |t          j        n|| _        |t          j	        n|| _
        |t          j        n|| _        |t          j        n|| _        |t          j        n|| _        |	t          j        n|	| _        |
t          j        n|
| _        | j        r| j        rt+          d          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.)super__init__r   
EMAIL_HOSThost
EMAIL_PORTportEMAIL_HOST_USERusernameEMAIL_HOST_PASSWORDpasswordEMAIL_USE_TLSuse_tlsEMAIL_USE_SSLuse_sslEMAIL_TIMEOUTtimeoutEMAIL_SSL_KEYFILEssl_keyfileEMAIL_SSL_CERTFILEssl_certfile
ValueError
connection	threadingRLock_lock)selfr   r   r   r   r   r   r   r   r   r    kwargs	__class__s               ZD:\Python Project\djangoTemplates\venv\Lib\site-packages\django/core/mail/backends/smtp.pyr   zEmailBackend.__init__   s    	}555/H/	/H/	4<4D00(8@8H44h18x--g18x--g18x--g*5*=H&&; 	 ,8+?H''\ 	 < 	DL 	1   _&&


    c                 @    | j         rt          j        nt          j        S )N)r   smtplibSMTP_SSLSMTPr&   s    r)   connection_classzEmailBackend.connection_class7   s    #'<AwW\Ar*   c                     | j         s| j        rAt          j        t          j                  }|                    | j         | j                   |S t          j                    S )N)protocol)r    r   ssl
SSLContextPROTOCOL_TLS_CLIENTload_cert_chaincreate_default_context)r&   ssl_contexts     r)   r8   zEmailBackend.ssl_context;   s]     	0 0 	0.#2IJJJK''(94;KLLL-///r*   c                    | j         rdS dt          j                    i}| j        
| j        |d<   | j        r
| j        |d<   	  | j        | j        | j        fi || _         | j        s'| j	        r | j         
                    | j                   | j        r,| j        r%| j                             | j        | j                   dS # t          $ r | j        s Y dS w xY w)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.
        Flocal_hostnameNr   context)r;   T)r"   r   get_fqdnr   r   r8   r0   r   r   r   starttlsr   r   loginOSErrorr   )r&   connection_paramss     r)   openzEmailBackend.openD   s(    ? 	5 .x/@/B/BC<#+/<i(< 	<+/+;i(	3d3	49 (9 DO < CDL C((1A(BBB} D D%%dmT]CCC4 	 	 	%   	s   A?C CCc                 *   | j         dS 	 	 | j                                          nZ# t          j        t          j        f$ r | j                                          Y n$t          j        $ r | j        r
Y d| _         dS  w xY wd| _         dS # d| _         w xY w)z)Close the connection to the email server.N)	r"   quitr3   SSLErrorr,   SMTPServerDisconnectedcloseSMTPExceptionr   r/   s    r)   rF   zEmailBackend.closee   s    ?"F	#
$$&&&&L'"@A ( ( ( %%'''''(   %  #DOOO 
 #DOOOdDO""""s2   & B	 4A=B	 A=1B	 ;A==B	 		Bc                 R   |sdS | j         5  |                                 }| j        r|	 ddd           dS d}	 |D ]}|                     |          }|r|dz  }	 |r|                                  n# |r|                                  w w xY wddd           n# 1 swxY w Y   |S )zm
        Send one or more EmailMessage objects and return the number of email
        messages sent.
        r   N   )r%   rA   r"   _sendrF   )r&   email_messagesnew_conn_creatednum_sentmessagesents         r)   send_messageszEmailBackend.send_messagesx   s=   
  	1Z 	! 	!#yy{{? &6&> 	! 	! 	! 	! 	! 	! 	! 	! H!- & &G::g..D & A&
 $ !JJLLL $ !JJLLLL!	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! s-   BB!A4B4BBB #B c                    |                                 sdS |j        pt          j        t	          |j                  }fd|                                 D             }|                                }	 | j                            |||	                    d                     n# t          j        $ r | j        s Y dS w xY wdS )z-A helper method that does the actual sending.Fc                 0    g | ]}t          |          S  r   ).0addrencodings     r)   
<listcomp>z&EmailBackend._send.<locals>.<listcomp>   s1     
 
 
15T8,,
 
 
r*   z
)linesepT)
recipientsrV   r   DEFAULT_CHARSETr   
from_emailrN   r"   sendmailas_bytesr,   rG   r   )r&   email_messager[   rY   rN   rV   s        @r)   rJ   zEmailBackend._send   s    '')) 	5 )EX-E%m&>II

 
 
 
9F9Q9Q9S9S
 
 

  ''))	O$$J(8(8(8(H(H    $ 	 	 	% 55	 ts   50B& &C C)
NNNNNFNNNN)__name__
__module____qualname____doc__r   propertyr0   r   r8   rA   rF   rP   rJ   __classcell__)r(   s   @r)   r
   r
      s          "' "' "' "' "' "'H B B XB 0 0 _0  B# # #&  0      r*   r
   )rb   r,   r3   r#   django.confr   django.core.mail.backends.baser   django.core.mail.messager   django.core.mail.utilsr   django.utils.functionalr   r
   rS   r*   r)   <module>rj      s       



                 ; ; ; ; ; ; 5 5 5 5 5 5 + + + + + + 3 3 3 3 3 3T T T T T# T T T T Tr*   