U
    ķcu                     @   s~   d dl Z d dlZd dlmZ d dlmZmZmZ d dlm	Z	 d dl
mZ d dlT ddd	Zd
d Zdd Zdd Zdd ZdS )    N)EmailMessage)SMTPSMTP_SSLSMTPServerDisconnected)unquote)sleep)*Fc                 C   s   t jrj| rtd tt jdkrLttj}tt j	t jdd}|j
|d qt }tt j	t j|dd}n| rvtd tt j	t jdd}| r|d td	 |  t jr| rtd
 |t jrt jnt jt j |S )Nu@   Подключаемся к серверу с ssl (timeout=5)...iK     )timeout)context)r   r
   u9   Подключаемся к серверу (timeout=5)...   u$   Отсылаем ehlo (smtp.ehlo)...uI   Проходим авторизацию по логину/паролю...)configEMAIL_USE_SSLprintint
EMAIL_PORTssl
SSLContextPROTOCOL_TLSr   EMAIL_HOST_ADDRstarttlscreate_default_contextr   set_debuglevelehloEMAIL_PASSWORDloginEMAIL_LOGIN
EMAIL_USER)debugr   smtp r    )/opt/account/modules/auth/models/email.pymake_client
   s0    
r"   c                 C   sN   t | tr| nd| d }t }|j|dd ||d< tj|d< ||d< |S )N
html)subtypeSubjectFromTo)
isinstancestrjoinr   set_contentr   r   )msg_contentssubjectemailbodymessager    r    r!   make_message(   s    
r2   c           
      C   s   t | ||}z
t }W n6 tk
rL } ztt | W Y d S d }~X Y nX d}tdd| D ]}z&|||d |d  |  W  d S  t	k
r } zLt
d|| ||krt
d| |d| }	t
d|	 t|	 t }W 5 d }~X Y q`X q`d S )	N   r   r'   r(   uO   Попытка отправки письма #%d из %d провалиласьuK   Не удалось отправить письмо за %d попыток.   u8   Попробуем снова через %d секунд)r2   r"   OSErrorr   	traceback
format_excrangesend_messagequitr   logging	exceptionerrorwarningr   )
r-   r.   r/   r1   r   eZmax_attemptsattempterrZretry_inr    r    r!   
send_email2   s*    
rB   c                 C   s   t ddt| d S )u   
    Удалить +subaddress из почты и раскодировать
    Долг - разбить эти задаче на отдельные функции и использовать отдельно.
    z\+.+@@r   )resubr   lower)r/   r    r    r!   normalize_email_addressO   s    rG   c                 C   s   t dtjtjtj t dtj tjrLt dtjr@tjntj nt d t d t	dd| }t
dd}t d	 |||d
 |d  t d |  t d|  dS )um   Функция для отладки отправки почты. Вызывается чеерез /opt/bin/u\   Письмо будет отправлено через сервер {}, порт {}, SSL {}u!   Имя отправителя: {}uD   С авторизацией по логину {} и паролю ...u   Без авторизацииu$   Создаем сообщение...u   Тестовое письмоT)r   u   Отсылаем email...r'   r(   u9   Отключаемся от сервера (smtp.quit)...u   Готово. Ошибок замечено не было. Проверьте, что на почту {} пришло письмоN)r   formatr   r   r   r   r   r   r   r2   r"   r9   r:   )r/   r1   r   r    r    r!   debug_emailW   s&      
rI   )F)r   r6   email.messager   smtplibr   r   r   urllib.parser   timer   cmf.includer"   r2   rB   rG   rI   r    r    r    r!   <module>   s   

