U
     7~c                     @   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 Zd	d
 Zdd Zdd Zdd ZdS )    N)EmailMessage)SMTPSMTP_SSLSMTPServerDisconnected)unquote)sleep)*c                  C   s   t jr^tt jdkr@ttj} tt jt jdd}|j	| d qpt
 } tt jt j| dd}ntt jt jdd}|  t jr|t jt j |S )NK     timeoutcontextr   r   )configEMAIL_USE_SSLint
EMAIL_PORTssl
SSLContextPROTOCOL_TLSr   EMAIL_HOST_ADDRstarttlscreate_default_contextr   ehloEMAIL_PASSWORDlogin
EMAIL_USER)r   smtp r   ./modules/auth/models/email.pymake_client
   s    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_message   s    
r,   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$   uO   Попытка отправки письма #%d из %d провалиласьuK   Не удалось отправить письмо за %d попыток.   u8   Попробуем снова через %d секунд)r,   r!   OSErrorprint	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*    
r:   c                 C   s   t ddt| d S )u   
    Удалить +subaddress из почты и раскодировать
    Долг - разбить эти задаче на отдельные функции и использовать отдельно.
    z\+.+@@r.   )resubr   lower)r*   r   r   r    normalize_email_addressD   s    r?   c                 C   sZ  t dtjtjtj t dtj tjrDt dtjtj nt d t d tdd| }tjrt d t	tjdkrt
t
j}ttjtjd	d
}|j|d qt
 }ttjtj|d	d}nt d ttjtjd	d
}|d t d |  tjrt d |tjtj t d |||d |d  t d |  t d|  dS )um   Функция для отладки отправки почты. Вызывается чеерез /opt/bin/u\   Письмо будет отправлено через сервер {}, порт {}, SSL {}u!   Имя отправителя: {}uC   С авторизацией по логину {} и паролю {}u   Без авторизацииu$   Создаем сообщение...u   Тестовое письмоu@   Подключаемся к серверу с ssl (timeout=5)...r	   r
   r   r   r   u9   Подключаемся к серверу (timeout=5)...r.   u$   Отсылаем ehlo (smtp.ehlo)...uI   Проходим авторизацию по логину/паролю...u   Отсылаем email...r#   r$   u9   Отключаемся от сервера (smtp.quit)...u   Готово. Ошибок замечено не было. Проверьте, что на почту {} пришло письмоN)r1   formatr   r   r   r   r   r   r,   r   r   r   r   r   r   r   r   Zset_debuglevelr   r   r5   r6   )r*   r+   r   r   r   r   r    debug_emailL   sF       
rA   )r   r2   Zemail.messager   Zsmtplibr   r   r   Zurllib.parser   timer   Zcmf.includer!   r,   r:   r?   rA   r   r   r   r    <module>   s   
