o a@s`dZddlZddlZddlZddlmZddlmZddlm Z ddl m Z GdddeZ dS) zSMTP email backend class.N)settings)BaseEmailBackendsanitize_address)DNS_NAMEcsTeZdZdZ   dfdd ZeddZdd Zd d Zd d Z ddZ Z S) EmailBackendz= A wrapper that manages the SMTP network connection. NFc  stj|d|p tj|_|ptj|_|durtjn||_|dur$tj n||_ |dur.tj n||_ |dur8tj n||_|durBtjn||_| durLtjn| |_| durVtjn| |_|jrc|j rctdd|_t|_dS)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_HOSThost EMAIL_PORTportEMAIL_HOST_USERusernameEMAIL_HOST_PASSWORDpassword EMAIL_USE_TLSuse_tls EMAIL_USE_SSLuse_ssl EMAIL_TIMEOUTtimeoutEMAIL_SSL_KEYFILE ssl_keyfileEMAIL_SSL_CERTFILE ssl_certfile ValueError connection threadingRLock_lock) selfr rrrrrrrrrkwargs __class__@/usr/lib/python3/dist-packages/django/core/mail/backends/smtp.pyr s    zEmailBackend.__init__cCs|jrtjStjS)N)rsmtplibSMTP_SSLSMTPr"r&r&r'connection_class%szEmailBackend.connection_classcCs|jrdSdti}|jdur|j|d<|jr"||j|jdz/|j|j |j fi||_|js@|j r@|jj |j|jd|j rO|jrO|j|j |jWdSty_|js\YdSw)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. Flocal_hostnameNr)keyfilecertfileT)rrget_fqdnrrupdaterrr,r rrstarttlsrrloginOSErrorr)r"connection_paramsr&r&r'open)s,      zEmailBackend.openc Cs|jdurdSz8z|jWn$tjtjfy!|jYntjy3|jr2YWd|_dSwWd|_dSWd|_dSd|_w)z)Close the connection to the email server.N) rquitsslSSLErrorr(SMTPServerDisconnectedclose SMTPExceptionrr+r&r&r'r;Ks"   zEmailBackend.closecCs|sdS|j=|}|jr|dur WddSd}|D] }||}|r-|d7}q |r<|Wd|SWd|S1sGwY|S)zm Send one or more EmailMessage objects and return the number of email messages sent. rN)r!r6r_sendr;)r"email_messagesnew_conn_creatednum_sentmessagesentr&r&r' send_messages^s,       zEmailBackend.send_messagescs|sdS|jp tjt|j}fdd|D}|}z|j|||j ddWdSt j y?|j s<YdSw)z-A helper method that does the actual sending.Fcsg|]}t|qSr&r).0addrencodingr&r' zsz&EmailBackend._send..z )linesepT) recipientsrHrDEFAULT_CHARSETr from_emailrBrsendmailas_bytesr(r<r)r" email_messagerMrKrBr&rGr'r>ts  zEmailBackend._send) NNNNNFNNNN) __name__ __module__ __qualname____doc__r propertyr,r6r;rDr> __classcell__r&r&r$r'r s "r) rTr(r8r django.confrdjango.core.mail.backends.baserdjango.core.mail.messagerdjango.core.mail.utilsrrr&r&r&r's