B
    f                 @   s   d dl Z 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   d }tjr| r"td ttjdks6tjrdt	
t	j}ttjtjd|d}|j|d qt	 }ttjtj|d|d}n,| rtd ttjtjdd	}tjr|  | r|d
 td |  tjr| rtd |tjrtjntjtj |S )Nr   uA   Подключаемся к серверу с ssl (timeout=30)...iK     )timeoutlocal_hostname)context)r   r
   r   u:   Подключаемся к серверу (timeout=30)...)r
      u$   Отсылаем ehlo (smtp.ehlo)...uI   Проходим авторизацию по логину/паролю...)socketZgetfqdnsplitconfigEMAIL_USE_SSLprintint
EMAIL_PORTEMAIL_USE_TLSsslZ
SSLContextZPROTOCOL_TLSr   EMAIL_HOST_ADDRZstarttlsZcreate_default_contextr   Zset_debuglevelZehloEMAIL_PASSWORDZloginEMAIL_LOGIN
EMAIL_USER)debugZhostnamer   smtp r   ./modules/auth/models/email.pymake_client   s8    

r   c             C   sN   t | tr| nd| d }t }|j|dd ||d< tj|d< ||d< |S )N
Zhtml)ZsubtypeZSubjectFromTo)
isinstancestrjoinr   Zset_contentr   r   )msg_contentssubjectemailZbodymessager   r   r   make_message1   s    
r*   c       
      C   s   t | ||}y
t }W n0 tk
rF } ztt | d S d }~X Y nX d}xtdd| D ]}y"|||d |d  |  d S  t	k
r } zLt
d|| ||krt
d| |d| }	t
d|	 t|	 t }W d d }~X Y q\X q\W d S )	N   r   r!   r"   uO   Попытка отправки письма #%d из %d провалиласьuK   Не удалось отправить письмо за %d попыток.   u8   Попробуем снова через %d секунд)r*   r   OSErrorr   	traceback
format_excrangesend_messagequitr   ZloggingZ	exceptionerrorZwarningr   )
r&   r'   r(   r)   r   eZmax_attemptsZattempterrZretry_inr   r   r   
send_email;   s*    
r6   c             C   s   t ddt| d S )u   
    Удалить +subaddress из почты и раскодировать
    Долг - разбить эти задаче на отдельные функции и использовать отдельно.
    z\+.+@@r   )resubr   lower)r(   r   r   r   normalize_email_addressX   s    r;   c             C   s   t dtjtjtjtj t dtj tjrPt dtj	rDt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/ud   Письмо будет отправлено через сервер {}, порт {}, SSL {}, TLS {}u!   Имя отправителя: {}uD   С авторизацией по логину {} и паролю ...u   Без авторизацииu$   Создаем сообщение...u   Тестовое письмоT)r   u   Отсылаем email...r!   r"   u9   Отключаемся от сервера (smtp.quit)...u   Готово. Ошибок замечено не было. Проверьте, что на почту {} пришло письмоN)r   formatr   r   r   r   r   r   r   r   r*   r   r1   r2   )r(   r)   r   r   r   r   debug_email`   s    
r=   )F)r   r   r.   Zemail.messager   Zsmtplibr   r   r   Zurllib.parser   Ztimer   Zcmf.includer   r*   r6   r;   r=   r   r   r   r   <module>   s   
&
