
     h                          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m	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      Zy)    N)
get_logger)find_user_home_path)get_oauth2_infoget_oauth_string)resolve_addresses)validate_email_with_regexhandle_password)prepare_message)make_addr_alias_userc                      e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 ddZd Zd Zed        Zed        Z	e
j                  dfdZ	 	 	 	 	 	 	 	 	 	 dd	Z	 	 	 	 	 	 	 	 	 	 	 dd
Zd Zd Zd Zd Zd Zed        Zed        Zd ZddZd Zy)SMTPzs :class:`yagmail.SMTP` is a magic wrapper around
    ``smtplib``'s SMTP connection, and allows messages to be sent.Nc                    t               | _        | j                          || _        |
t	        |
|      }||d   }|r|d}n|
t               }t        |      \  | _        | _        |rt        | j                         d | _
        || _        |t        |      n|rdnd| _        || _        || _        || _        || _        |	| _        || _        i | _        g | _        d| _        |
| _        |
|n| _        || _        y )Nemail_address 465587r   )r   logset_loggingsoft_email_validationr   r   r   user	useraliasr   	is_closedhoststrportsmtp_starttlssslsmtp_skip_login
debuglevelencodingkwargscacheunsentnum_mail_sentoauth2_filecredentialsdkim)selfr   passwordr   r   r   smtp_sslsmtp_set_debuglevelr   r!   r&   r   r(   r"   oauth2_infos                  N/var/www/api/v1/venv_getwork_v1/lib/python3.12/site-packages/yagmail/sender.py__init__zSMTP.__init__   s     <%:"")+t<K|"?3t|D\&(D$8$>!	4> %dii0	!%!1CIue	*.- 
&'2':8	    c                     | S N r)   s    r.   	__enter__zSMTP.__enter__D   s    r0   c                 <    | j                   s| j                          y)NF)r   close)r)   exc_typeexc_valexc_tbs       r.   __exit__zSMTP.__exit__G   s    ~~JJLr0   c                 Z    | j                   rt        j                  S t        j                  S r2   )r   smtplibSMTP_SSLr   r4   s    r.   
connectionzSMTP.connectionL   s    #'88w==r0   c                 R    | j                   | j                  rdS dS | j                   S )NFT)r   r   r4   s    r.   starttlszSMTP.starttlsP   s+    % HH5.$.!!!r0   c                 &    t        ||      | _        y)a  
        This function allows to change the logging backend, either output or file as backend
        It also allows to set the logging level (whether to display only critical/error/info/debug.
        for example::

            yag = yagmail.SMTP()
            yag.set_logging(yagmail.logging.DEBUG)  # to see everything

        and::

            yagmail.set_logging(yagmail.logging.DEBUG, 'somelocalfile.log')

        lastly, a log_level of :py:class:`None` will make sure there is no I/O.
        N)r   r   )r)   	log_levelfile_path_names      r.   r   zSMTP.set_loggingV   s     i8r0   c                 8   t        | j                  | j                  |||      }| j                  r|d   D ]  }t	        |        t        | j                  | j                  |||||| j                  ||	|
| j                        }|d   }|j                         }||fS )N
recipients)	r   r   r   r   r   r   r!   r(   	as_string)r)   tosubjectcontentsattachmentsccbccheadersprettify_html
message_idgroup_messages	addresses
email_addrmsgrF   msg_stringss                   r.   prepare_sendzSMTP.prepare_sendg   s     &diiRM	%%'5
)*5 6 IINNMMII
 |,
mmo;&&r0   c                     | j                          | j                  ||||||||	|
|
      \  }}|r||fS | j                  ||      S )z% Use this to send an email with gmail)loginrV   _attempt_send)r)   rH   rI   rJ   rK   rL   rM   preview_onlyrN   rO   rP   rQ   rF   rU   s                 r.   sendz	SMTP.send   sc     	

"&"3"3#

K {**!!*k::r0   c                    d}|dk  r[	 | j                   j                  | j                  ||      }| j                  j	                  d|       | xj
                  dz  c_        |S | j                  j                  ||f       y# t        j                  $ rB}| j                  j                  |       |dz  }t        j                  |dz         Y d }~nd }~ww xY w|dk  r׌})Nr      zMessage sent to %s   F)smtpsendmailr   r   infor%   r=   SMTPServerDisconnectederrortimesleepr$   append)r)   rF   rU   attemptsresultes         r.   rY   zSMTP._attempt_send   s    l)++DIIz;O2J?""a'"
 	J45 11 )q!A

8a<(() ls   AB C8CCc                     t        t        | j                              D ]2  }| j                  j                  |      \  }}| j	                  ||       4 y)z
        Emails that were not being able to send will be stored in :attr:`self.unsent`.
        Use this function to attempt to send these again
        N)rangelenr$   poprY   )r)   irF   rU   s       r.   send_unsentzSMTP.send_unsent   sC    
 s4;;'(A&*kkooa&8#Jz;7 )r0   c                     d| _         	 | j                  j                          y# t        t        t
        j                  f$ r Y yw xY w)z) Close the connection to the SMTP server TN)r   r_   quit	TypeErrorAttributeErrorr=   rb   r4   s    r.   r7   z
SMTP.close   s;    	IINN>7+I+IJ 		s   $ AAc                     | j                   | j                  | j                         y | j                  | j                         y r2   )r&   _login_oauth2r'   _loginr4   s    r.   rX   z
SMTP.login   s4    't//0KK(()r0   c                     | j                   | j                  | j                  fi | j                  | _        | j                  j                  | j                         | j                  r| j                  j                          | j                  du r| j                  j                          n& | j                  j                  di | j                   | j                  j                          d| _	        | j                  sB| j                  | j                  |      }| j                  j                  | j                  |       | j                  j                  d| j                  | j                  | j                         y)z
        Login to the SMTP server using password. `login` only needs to be manually run when the
        connection to the SMTP server was closed by the user.
        TFzConnected to SMTP @ %s:%s as %sNr3   )r?   r   r   r"   r_   set_debuglevelr    rA   ehlor   r   r
   r   rX   r   ra   )r)   r*   s     r.   rv   zSMTP._login   s    
 $DOODIItyyHDKKH			  1==IINN}}$		""$"		""3T]]3IINN##++DIIx@HIIOODIIx07DIItyyYr0   c                     t        | |      S r2   r	   )r   r*   s     r.   r
   zSMTP.handle_password   s    tX..r0   c                     t        | |      S r2   )r   )r   r-   s     r.   r   zSMTP.get_oauth_string   s    k22r0   c                    d|v r|j                  d        | j                  | j                  | j                  fi | j                  | _        	 | j
                  j                  | j                         | j                  | j                  |      }| j
                  j                  |d          | j                  du r| j
                  j                          | j
                  j                  dd|z          y # t        $ r Y w xY w)Nr   google_client_idTAUTHzXOAUTH2 )rm   r?   r   r   r"   r_   rx   r    rs   r   r   ry   rA   docmd)r)   r-   auth_strings      r.   ru   zSMTP._login_oauth2   s    k)OOO,#DOODIItyyHDKKH		II$$T__5 ++DII{C		{#567==D II 		
[ 89  		s   %C5 5	D Dc                 *    | j                  dd|       y)z6 Most important function. Please send me feedback :-) zkootenpv@gmail.comzYagmail feedbackN)r[   )r)   messages     r.   feedbackzSMTP.feedback   s    		&(:GDr0   c                 ^    	 | j                   s| j                          y y # t        $ r Y y w xY wr2   )r   r7   rs   r4   s    r.   __del__zSMTP.__del__  s.    	>>

 " 		s     	,,)NNzsmtp.gmail.comNNTr   Fzutf-8NTN)
NNNNNNNTNT)NNNNNNFNTNT)z8Awesome features! You made my day! How can I contribute?)__name__
__module____qualname____doc__r/   r5   r;   propertyr?   rA   loggingERRORr   rV   r[   rY   ro   r7   rX   rv   staticmethodr
   r   ru   r   r   r3   r0   r.   r   r      s   F
 ",\
 > > " "
 %,MM$ 9& $'P ;B8*Z( / / 3 3:Er0   r   )rd   r   r=   yagmail.logr   yagmail.utilsr   yagmail.oauth2r   r   yagmail.headersr   yagmail.validater   yagmail.passwordr
   yagmail.messager   r   r   r3   r0   r.   <module>r      s4       " - < - 6 , + 0u ur0   