
    LȂi                         S r SSKrSSKrSSKrSSKrSSKJrJr  SSK	J
r
  SSKJr  SSKJr  SSKJrJr  SSKJr   " S	 S
\5      rg)zSMTP email backend class.    N)AddressAddressHeader)settings)BaseEmailBackend)DNS_NAME)	force_strpunycode)cached_propertyc                      ^  \ rS rSrSr          SU 4S jjr\S 5       r\S 5       r	S r
S rS rS	 rSS
 jrSrU =r$ )EmailBackend   z5
A wrapper that manages the SMTP network connection.
c                   > [         TU ]  US9  U=(       d    [        R                  U l        U=(       d    [        R
                  U l        Uc  [        R                  OUU l        Uc  [        R                  OUU l
        Uc  [        R                  OUU l        Uc  [        R                  OUU l        Uc  [        R                  OUU l        U	c  [        R"                  OU	U l        U
c  [        R&                  OU
U l        U R                  (       a  U R                  (       a  [+        S5      eS U l        [.        R0                  " 5       U l        g )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               OD:\sksbv-state-backend\venv\Lib\site-packages\django/core/mail/backends/smtp.pyr   EmailBackend.__init__   s    	}5/H//	/H//	4<4D00(8@8H44h18x--g18x--g18x--g*5*=H&&; 	 ,8+?H''\ 	 <<DLL1  __&
    c                 d    U R                   (       a  [        R                  $ [        R                  $ N)r   smtplibSMTP_SSLSMTPr)   s    r,   connection_classEmailBackend.connection_class9   s    #'<<wAW\\Ar.   c                    U R                   (       d  U R                  (       aJ  [        R                  " [        R                  S9nUR                  U R                   U R                  5        U$ [        R                  " 5       $ )N)protocol)r#   r!   ssl
SSLContextPROTOCOL_TLS_CLIENTload_cert_chaincreate_default_context)r)   ssl_contexts     r,   r>   EmailBackend.ssl_context=   sX     0 0..#2I2IJK''(9(94;K;KL--//r.   c                    U R                   (       a  gS[        R                  " 5       0nU R                  b  U R                  US'   U R                  (       a  U R
                  US'    U R                  " U R                  U R                  40 UD6U l         U R                  (       d4  U R                  (       a#  U R                   R                  U R
                  S9  U R                  (       aA  U R                  (       a0  U R                   R                  U R                  U R                  5        g! [         a    U R                  (       d  e  gf = f)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)rB   T)r%   r   get_fqdnr   r   r>   r5   r   r   r   starttlsr   r   loginOSErrorr   )r)   connection_paramss     r,   openEmailBackend.openF   s     ?? .x/@/@/BC<<#+/<<i(<<+/+;+;i(	"33		499(9DO <<DLL((1A1A(B}}%%dmmT]]C 	%% &	s   'CD, ,E
Ec                 b   U R                   c  g  U R                   R                  5         SU l         g! [        R                  [        R
                  4 a    U R                   R                  5          NH[        R                   a    U R                  (       a	   SU l         ge f = f! SU l         f = f)z)Close the connection to the email server.N)	r%   quitr9   SSLErrorr1   SMTPServerDisconnectedcloseSMTPExceptionr   r4   s    r,   rN   EmailBackend.closeg   s    ??"	#
$$& #DO LL'"@"@A ( %%'(( %% #DO 
 #DOs-   3 >B"1B% 3$B"B%  B""B% %	B.c                 ~   U(       d  gU R                      U R                  5       nU R                  (       a  Uc
   SSS5        gSn U H"  nU R                  U5      nU(       d  M  US-  nM$     U(       a  U R	                  5         SSS5        U$ ! U(       a  U R	                  5         f f = f! , (       d  f       W$ = f)zU
Send one or more EmailMessage objects and return the number of email
messages sent.
r   N   )r(   rH   r%   _sendrN   )r)   email_messagesnew_conn_creatednum_sentmessagesents         r,   send_messagesEmailBackend.send_messagesz   s    
 ZZ#yy{??&6&>  Z H!-G::g.Dt A  .
 $JJL   $JJL $ Z s/   &B-B-B&	B/B-B**B--
B<c                    UR                  5       (       d  gU R                  UR                  5      nUR                  5        Vs/ sH  o0R                  U5      PM     nnUR                  [        R
                  R                  S9n U R                  R                  X$UR                  5       5        gs  snf ! [        R                   a    U R                  (       d  e  gf = f)z-A helper method that does the actual sending.F)policyT)
recipientsprep_address
from_emailrW   emailr\   r3   r%   sendmailas_bytesr1   rO   r   )r)   email_messager_   addrr]   rW   s         r,   rS   EmailBackend._send   s    ''))&&}'?'?@
:G:R:R:TU:T$''-:T
U''u||/@/@'A	OO$$ZW=M=M=OP
  V $$ 	%%	s   B2*B7 7&C C c                 h   [        U5      n[        R                  " U5      n[        S UR                   5       5      nUR                  S5        U(       d  UR                  S5        U(       a!  [        SU< SSR                  U5       35      eUR                  n[        U5      S:w  a  [        SU< S35      eUS	   nU(       ab  UR                  (       aQ  UR                  R                  5       (       d2  [        UR                  5      n[        [        UR                  US
95      $ UR                   $ )aT  
Return the addr-spec portion of an email address. Raises ValueError for
invalid addresses, including CR/NL injection.

If force_ascii is True, apply IDNA encoding to non-ASCII domains, and
raise ValueError for non-ASCII local-parts (which can't be encoded).
Otherwise, leave Unicode characters unencoded (e.g., for sending with
SMTPUTF8).
c              3   6   #    U H  n[        U5      v   M     g 7fr0   )str).0defects     r,   	<genexpr>,EmailBackend.prep_address.<locals>.<genexpr>   s     C0Bfc&kk0Bs   z#addr-spec local part with no domainz)local-part contains non-ASCII characters)zInvalid address z: z; rR   z: must be a single addressr   )r   domain)r   r   value_parsersetall_defectsdiscardr$   joinall_mailboxeslenrm   isasciir	   rh   r   
local_part	addr_spec)r)   addressforce_asciiparseddefects	mailboxesmailboxrm   s           r,   r^   EmailBackend.prep_address   s     G$++G4C0B0BCC=> OOGH/{"TYYw=O<PQRR((	y>Q/{:TUVVA,7>>'..2H2H2J2Jgnn-Fw(:(:6JKK$$$r.   )r(   r%   r   r   r   r#   r!   r   r   r   r   )
NNNNNFNNNN)T)__name__
__module____qualname____firstlineno____doc__r   propertyr5   r
   r>   rH   rN   rY   rS   r^   __static_attributes____classcell__)r+   s   @r,   r   r      sw     "'H B B 0 0B#&0 %  %r.   r   )r   email.policyr`   r1   r9   r&   email.headerregistryr   r   django.confr   django.core.mail.backends.baser   django.core.mail.utilsr   django.utils.encodingr   r	   django.utils.functionalr
   r    r.   r,   <module>r      s5       
  7   ; + 5 3q%# q%r.   