U
    ĮwhQ                     @   s   d dl m Z  d dlZd dlT d dlmZ d dlZd dlZd dlZd dlm	Z	m
Z
 d dlmZ d dlmZ d dlmZ G d	d
 d
ejZdS )    )copyN)*fields)SMTPSMTP_SSL)MIMEMultipart)MIMEText)cmf_plugin_mailboxc                       s   e Zd Zejjddg Zedd Zdd Z fddZ	d	d
 fdd
Z
dd ZdddZeedddeeeedddZ  ZS )CmfPluginMailBoxget_local_mailboxsend_messagec                 C   s   | j ddgdS )NTplugin.ext_smtp)systemr   )get)cls r   %./common/models/cmf_plugin_mailbox.pyr      s    z"CmfPluginMailBox.get_local_mailboxc                 C   s    | j r
d S tj| jdd| _ d S )NZmail)nametype)pluginmodelsZ	CmfPluginr   selfr   r   r   _process_plugin   s    z CmfPluginMailBox._process_pluginc                    s   t   dg S )Nr   )supersave_preload_fieldsr   	__class__r   r   r       s    z$CmfPluginMailBox.save_preload_fieldsr   )depthc                   s   |    t j|d|i|S )Nr   )r   r   save)r   r   argskwargsr   r   r   r    #   s    zCmfPluginMailBox.savec              	   C   s  t j}z| jjjd\}}W n    | jjj}| jjj}Y nX | jjrR| jjj}| jjjrt|dksr| jj	jrt
t
j}t||d|d}|j|d qt
 }t|||d|d}n"t||d|d}| jj	jr|  |  | jjrt   || jjj| jj  W 5 Q R X |S )N:iK     )timeoutlocal_hostname)context)r'   r%   r&   
   )configAPP_FQDNr   ext_smtpvaluesplitZext_portZ
verify_sslintZuse_tlssslZ
SSLContextZPROTOCOL_TLSr   ZstarttlsZcreate_default_contextr   ZehlopasswordZcmfutilZdisable_aclloginZdecrypt)r   hostnameZserverportr'   smtpr   r   r   
_make_smtp(   s.    





$zCmfPluginMailBox._make_smtpN   Уведомлениеc              
   O   s  ddl m}
 td| d|  tjs^ttdd dkr^| jjdgdj	
d	s^td
 d S | dddddddg d}|r|}| jjjr| jjj}| jjjr| jjj}dd }||}||}||}|pg }t }||d< d||d< ||d< |
dd|d< |rd||d< |t|d |D ]}|| q,|| | }z:|  }||d ||  |  td|  W n~ tk
r } z$td| d  td!|  W 5 d }~X Y n< tk
r } ztd"t  d#|  W 5 d }~X Y nX d S )$Nr   )
formatdateu   Отправка email: to=z
, subject=r*   zbcrm.carbonsoft.rur+   r   z	.local:25u\   Отправка email отменена, т.к. сервер не в production-режимеzplugin.loginzplugin.passwordr   zplugin.ext_portzplugin.verify_sslzplugin.use_tlszplugin.send_email_fromzEvaTeam <noreply@evateam.ru>c                 S   s   | sg S t | tr| S | gS )N)
isinstancelist)r,   r   r   r   ensure_liste   s    z2CmfPluginMailBox.send_message.<locals>.ensure_listZFromz, ZToZSubjectT)	localtimeZDateZCcZhtmlu)   Email успешно отправлен: z!CmfPluginMailBox.send_message(to=z) erroru   Не удалось отправить сообщение. Проверьте параметры SMTP и попробуйте снова.
Ошибка: u<   Ошибка подключения к SMTP-серверу.

)Zemail.utilsr7   gdebugr)   Z
PRODUCTIONgetattrr   loadr+   endswithZload_fieldsr1   r,   Zsend_email_fromr   joinattachr	   r5   ZsendmailZ	as_stringquitOSErrorZlogging	exceptionZ	cmf_alert	Exception	traceback
format_exc)r   tomessageZ
from_loginsubjectZemail_attachmentsccbccr!   r"   r7   Z_fromr:   Zto_listmsgrC   Z
recipientsr4   er   r   r   r   H   sb    
	



zCmfPluginMailBox.send_messageu)   Отправка почты из bzpythonT)descriptionZ
system_job)rL   contentrM   rN   c                 C   s"   t j }|j| ||||d d S )N)rL   rM   rN   )r   r   r   r   )rJ   rL   rR   rM   rN   Zmail_boxr   r   r   send_email_job   s    
zCmfPluginMailBox.send_email_job)Nr6   NNN)__name__
__module____qualname__r
   r   Zapi_methodsclassmethodr   r   r   r    r5   r   staticmethodZcmf_deferred_jobstrr9   rS   __classcell__r   r   r   r   r      s$   
       
B
r   )r   ZasanaZcmf.includeZcmfr   rH   r/   ZsocketZsmtplibr   r   Zemail.mime.multipartr   Zemail.mime.textr	   Zcommon.fieldsr
   r   r   r   r   r   <module>   s   