
    0Pie                         d dl T d dlmZmZmZ d dlZd dlmZ d dlmZ d dl	Z	d dl
mZ d dlmZ d dlmZ d dlZd dlZd dlZd dlZd d	lmZ d dlZd d
lmZ d dlmZ  G d dej                  Z G d d          ZdS )    )*)	timedeltadatetimetimezoneN)Path)	imap_utf7)decode_header)chain)md5)
log_config)Template)cmf_mailbox2c                   :    e Zd Z ed          ZdZej        j        ddgz   Zd Z	d Z
d Z fdZ fd	Zd
d fd
Zd Zd Zd Zedej        fd            Zd Zed             Zedd            Zd Ze ed
d
dd          dd                        Z xZS )CmfMailbox2z/opt/eva-app/mailNprocess_mailboxesget_log_urlc                     | j         j        sd S | j         r-t          | j        | j          d| j         z            | _        d S d | _        d S )N_)email
is_changedstr_MAILDIR_BASE_PATHidmaildir_pathselfs    &./modules/mail2/models/cmf_mailbox2.py_calc_maildir_pathzCmfMailbox2._calc_maildir_pathE   s^    z$ 	F: 	% !$D$;>W>Wdg>W>W$W X XD $D    c                     | j         j        sV| j        j        sJ| j        j        s>| j        j        s2| j        j        s&| j        j        s| j        j        s| j        j        sd S | 	                    g d           | 
                                 d S )N)r   r   imap_server	imap_port
imap_cryptloginpassword)r   r   r   r!   r"   r#   r$   r%   load_from_dateload_fields_write_configr   s    r   _calc_offlineimap_configz$CmfMailbox2._calc_offlineimap_configQ   s    (
	z$
	 *
	 ~(	
	
 )
	 z$
	 }'
	 "-
	 Fqqqrrrr   c                 l    g d}|D ],}| |         }|j         r|r|j                                        }-d S )N)r   r$   r!   r"   smtp_server	smtp_port)r   valuestrip)r   paramsparamfields       r   _strip_paramszCmfMailbox2._strip_paramsa   sU    [[[ 	, 	,EKE ,E ,))++	, 	,r   c                 N    t                                                      ddgz   S )Nparentr&   )supersave_preload_fields)r   	__class__s    r   r6   zCmfMailbox2.save_preload_fieldsh   s$    ww**,,:J/KKKr   c                 Z   |                                   | j        j        rJ| j        rCt          j                            dd| j        gdd| j        gg          rt          dd           |                                  | 	                                  t                      j        |i |S )	Nr   =r   z!=filteru^   Почтовый ящик для данного email уже заведен в системе!T)abort)r2   r   r   modelsr   getr   	cmf_alertr   r)   r5   save)r   argskwargsr7   s      r   r@   zCmfMailbox2.savek   s    :  	HTZ 	H!%%wTZ.H4QUW[W^J_-`%aa Hz  CG  H  H  H  H!!!%%'''uww|T,V,,,r   T)	recursivec                    t           j                            dd| j        g          D ]} |j        |i |  t                      j        |d|i|S )Nmailboxr9   r:   rC   )r=   CmfMailHandlerlistr   deleter5   )r   rC   rA   rB   mail_handlerr7   s        r   rH   zCmfMailbox2.deletev   sj    "166y#tw>W6XX 	1 	1LL00000uww~tCyCFCCCr   c                 <    | j         dz  | j         d| j         dz  S )Nconfigsr   z.offlineimaprc)r   r   r   r   s    r   _config_pathzCmfMailbox2._config_path{   s*    &y0DJ1X1X1X1X1XXXr   c                 Z   t          t          | j                            }|                    dd           |                                 }| j        r| j        r| j        r| j        r| j        rd t          j
                            | ddg          D             }t          t          d                                                    }|                    | |          }|j                            dd           |                    |           dS |                    d           d S )	NT)parentsexist_okc                 &    g | ]}|j         j        S  )name_rawr-   ).0fs     r   
<listcomp>z-CmfMailbox2._write_config.<locals>.<listcomp>   s*     % % %%&
 % % %r   rR   )r4   disabledfieldsz9/opt/eva-app/modules/mail2/templates/offlineimaprc.jinja2)rE   disabled_folder_names)
missing_ok)r   r   r   mkdirrL   r   r!   r$   r%   r=   CmfMailboxFolderrG   r   	read_textrenderr4   
write_textunlink)r   r   config_pathrX   templatedatas         r   r(   zCmfMailbox2._write_config~   s>   C 122334$777'')) 
	0 
	00@ 
	0TZ 
	0TXTa 
	0% %*0*A*F*Fd]akujv*F*w*w% % %!  %` a a k k m mnnH??4G\?]]D$$TD$AAA""4(((4$/////r   c                     t           j                            | t          j        dg          }|rt          |d          S d S )Nurlr4   namerW   )r=   CmfAttachmentr>   r   LOG_NAMEgetattr)r   rA   rB   
attachments       r   r   zCmfMailbox2.get_log_url   sE     )--T
@S]b\c-dd
 	:u---4r   returnc                 r   | j         r| j         S t          j                            | t          j                  }|sd}t                              | t          j                  }|                                 |j        s|                    ddd           ddl	m
}m}m}  |t          j                    ||           t          j        d          | _         t	          j        | j         |j        t          j        |	           n+t	          j        |                                           | _         | j         S )
u{    Журнал логирования детектирования петель и срабатывания w/b lists email )r4   rf   zS[%(levelname)s] - %(asctime)s - %(module)s.%(funcName)s(%(lineno)d) - %(message)s 
r   Fbackupmake_previewr   ) set_library_log_activation_levelset_library_log_detail_levelEXTENDEDloop_detector)level	formatter)_CmfMailbox2__loggerr=   rg   r>   r   rh   r@   file_existsupload_fileldap3.utils.logrp   rq   rr   loggingERROR	getLoggerinit_loggerfull_path_fileINFO
get_loggerget_files_dir)r   rj   ru   rp   rq   rr   s         r   loggerzCmfMailbox2.logger   s5    = 	!= )--T
@S-TT
 	HnI--T
@S-TTJOO) N&&s5u&MMMpppppppppp,,W];;;((222#-o>>DM"4=*2KSZS_ktuuuuu&1$2D2D2F2FGGDM}r   c                 
   t           j        j        }|sd S d}t          j        }d| }|                    |          r-|                    |           |                    ||           d S |                    |d|           d S )N  loop_detector_   )ex)	gglobal_settingsemail_loop_detector_thresholdAPPREDIS_DBexistsincrexpireset)r   address	thresholdttlredis_dbloop_keys         r   detect_mail_loopszCmfMailbox2.detect_mail_loops   s    %C	 	F<-G--??8$$ 	.MM(###OOHc*****LL1L-----r   c                    t                               d| dd          5  t          j                            |g d          }t
                              d|j                    |j        s(t
                              d           	 d d d            d S t
                              d	           |	                                 g }g }t
                              d
           t                              |j        j                  D ](}|dv r|dk    rd}t          j                            |j        j         d| d          s@t          j                            ||dg          }|syt!          j        |                                          }	|	sd}	t
                              d|	            t                              |||	|          }|                                 |j        j        }
|j                                         |                    |           |
d }n'|j        r|
t1          |j        j                  z
  }n|
}dD ]}t          j                            |j        j         d| d|           s4t3          |j        j         d| d|                                           D ]y}|rBt7          j        t          j                            |          t<          j                  |k     rF|j                             d          ra|                    ||d           z*tC          |dd           }|D ]}	 |d         }|d         }t
                              d|            tE          |          }|j#        }|j#        sdd$                    |j%        &                    d                     }d!tO          |                    d"                    (                                z   }t          j)                            ||d#g$          }d}|sd%}| *                    |           t          )                    ||||j+        ,                                |j        |j+        |j-        |j.        |j/        |j0        |j1        |j0        |j2        d|j3        |j4        &          }|5                    |j6        j                   |j7        |k    r.d%}t
                              d'|j7         d(|            ||_7        tq          |j9        |j:                  D ]}|d)         }t          j;                            ||d*d+g,          }|r%|j<        |d-         k    r|d-         d.z   |d)         z   }t          j;                            ||d-         d*g/          }|st          ;                    |||d-         0          }|=                    |d1         dd2           |                                 |j>        j        ?                    d3|j<         |j@        j                  |_>        |r|                                 t                       # t          $ r}t
                              d4| d5| d%6           t
                              t          jD                    d%6           t           E                    d7|t          |                     Y d }~d }~ww xY w|D ]}|                    d%8           |j                                         |                    d%8           d d d            d S # 1 swxY w Y   d S )9NzCmfMailbox2.process_mailbox:r   <   )timeoutblocking_timeout)	r   r   r&   resync_prev_daysr!   r"   r#   r$   r%   )r   rW   u7   START Обработка почтового ящика z$DEV: ERROR. not mailbox.maildir_pathu   Синхронизация imapu@   Синхронизация структуры каталогов)newtmpcur /z/cur	last_sync)r4   rR   rW   u   Входящиеu   Создаем каталог )r4   rR   rf   tree_parent)days)r   r   )tz.)folder	mail_fileFc                     | d         j         S )Nr   )rf   )xs    r   <lambda>z-CmfMailbox2.process_mailbox.<locals>.<lambda>  s    QRS^Q_Qd r   )reversekeyr   r   u-   Обработка нового пиьсма ReceivedzNO_ID:utf-8mailbox_folder)r4   
message_idrW   T)r4   r   r   	mail_frommail_from_namemail_tomail_to_jsoncc_jsonrf   text	text_htmltext_searchimap_uidmail_headersreferences_rawin_reply_to_rawu2   Перемещаем письмо из папки u    в папку filenamerf   ext_idre   
content_idr   )r4   r   rW   )r4   rf   r   payloadrm   zcid:u-   Ошибка обработки письма : )forceu;   Ошибка обработки входящих писем	only_data)GcmfutilCmfLockr=   r   r>   r   debugrf   r   run_offlineimaposlistdirr-   pathr   r[   r   decodeencoder@   r   set_nowappendr   r   r   iterdirr   fromtimestampgetmtimer   utc
startswithsortedMessager   joinrawget_allr   	hexdigestCmfMailnormalize_subjectr   lowerr   r   subject	text_body	html_bodyr   
referencesin_reply_tor   r   r   r
   image_attachmentsattachmentsrg   r   rx   r   replacerd   commit_with_event	Exception	traceback
format_excadmin_alertr   )cls
mailbox_id_args_kwargsrE   folders_to_savenew_mail_filesfolder_name_rawr   folder_namer   cutoff_datesuffixrT   _new_mail_filenew_mail_filenew_mailr   mail_recievedmail	need_saverj   attach_filenameexistent_attachmentnew_attachmentes                             r   process_mailboxzCmfMailbox2.process_mailbox   s    __HJHHRWjl_mm p	) p	)(,, 'S 'S 'S - T TG GG\gl\\]]]' ?@@@p	) p	) p	) p	) p	) p	) p	) p	) GG6777##%%% ONGGWXXX#%::g.B.H#I#I 7R 7R"n44"e++&(Ow~~)=)C&[&[o&[&[&[\\ 044Gogrfs4tt ""+"2?3I3I3K3K"L"LK& 9&8GGJ[JJKKK#44&!0($+	 5  F KKMMM #,2	 ((***&&v... $"&KK- ,"+iW=U=[.\.\.\"\KK #,K - 	R 	RF7>>W-A-G*d*d/*d*d\b*d*dee ! !W%9%?"\"\/"\"\TZ"\"\]]eegg R R& %8+A"'BRBRSTBUBUZbZf+g+g+gju+u+u$6,,S11 %$&--a.P.PQQQQR	R $NEGdGdeeeN"0 Y9 Y9X9+H5F$2;$?MGG[M[[\\\&}55H!)!4J $. _ )+0D0DZ0P0P(Q(Q%-M4H4H4Q4Q0R0R0\0\0^0^%^
!>--&#- 01 .  D
 !&I H$(	--h777%~~#*'1+1&.n&:&:&<&<+3=$+M)1)>$,$4!)!1!)!3&.&8(0(:%-[)++3+>,4,@#  .    &  11$.2FGGG*f44$(	  !BUYUh  !B  !By  !B  !B  C  C  C.4+&+H,FH\&]&] D D
*4Z*@.4.B.F.F#'!0$*H#5 /G / /+
 / f3F3MQ[\hQi3i3i.8.F.LzZdOe.eO.4.B.F.F#'#-l#;$*8 /G / /+  3 
D-3-A-A'+%4'1,'? .B . .N
 +66z)7LUZin6ooo*//111 .2^-A-I-IJhQ_QfJhJhjxj|  kC  .D  .DDN  $		%''''  9 9 9GGaNaa^_aaimGnnnGGI022$G???''(e(/Q9 9 9 9 9 9 9 9	9 * , ,d++++ %%'''LL4L(((ap	) p	) p	) p	) p	) p	) p	) p	) p	) p	) p	) p	) p	) p	) p	) p	) p	) p	)sF   A(\;J2\;	L	Y\;
[!A8[\;[!!A\;;\?\?r   r   c                     t          | j                  dk    rG| j         d| j        z   | _        | j         d| j        z   | _        | j        d d         dz   | _        d S d S )N   

z<br><br>   z...)lenr   r   r   )r   s    r   r   zCmfMailbox2.normalize_subjectv  sw    x  3&&$,$4!:!:!:X=O!OH$,$4!>!>!>AS!SH'/5=H '&r   c           	         |                                  }t          t          | j                                                            r|                                sTt
                              d| j         d| j                    | 	                                st          j        d           d S dddt          |          g}	 t
                              d|            t          j        |dddd	
          }nv# t          j        t          j        f$ rX}t
                              d|j        |j        |j                   t'          d|j         d|j         d|j                   d }~ww xY w|j                                        }|j                                        }t
                              |           t
                              |           t
                              d           d S )Nz?CmfMailbox2.run_offlineimap(): WARNING init config and mailbox z, zBCmfMailbox2.run_offlineimap(): mailbox is not configured, skip runofflineimapz-1z-cu   Запускаем Ti  )capture_outputcheckr   r   z$FATAL. offlineimap: %s error: %s, %su;   CmfMailbox2.run_offlineimap(): Ошибка запуска r    u5   Запуск offlineimap прошел успешно.)rL   r   r   r   r   r   r   r   r   r(   rz   warning
subprocessrunTimeoutExpiredCalledProcessErrorcmdstdoutstderrCmfErrorr.   )r   r`   rA   procr   outputerrs          r   r   zCmfMailbox2.run_offlineimap}  s   ''))C)**++2244 	K<N<N<P<P 	GGmVZV`mmdhdkmmnnn%%''  deee tT3{+;+;<	yGG0$00111>$t4d\abbbDD):+HI 	y 	y 	yGG;QUAHahWWW wYZY^wwbcbjwwmnmuwwxxx	y ""$$k!!			HIIIIIs   6C; ;E.AE))E.z	@minutely   )	only_once
system_jobschedulepriorityFc                    t                               d           t          j        rt                               d           d S t          j                            g d          D ]j}| sm|j        rf|j        j        t          |j
        j                  z   |j                                        k    r$t                               d|j         d           rt                               d|j         d	|j                    d
|_        	 t          j                            |j        j                   n=# t"          $ r0}d| |_        t%          j        d|j                    Y d }~nd }~ww xY w|j                                         |                    d           t-                       t                               d|j                    lt                               d           d S )Nu9   START Обработка почтовых ящиков...uY   process_mailboxes: Обработка почтовых ящиков отключена...)r   r   sync_interval)rW   )minutesu&   Обработка пропущена z (sync_interval)u$   Обработка запущена r	  r   uH   Ошибка обработки входящих писем в Mailbox: uS   DEV: FATAL: Ошибка обработки входящих писем в Mailbox Tr   u&   Обработка закончена u7   FINISH Обработка почтовых ящиков)r   r   configDISABLE_INTEGRATIONr=   r   rG   r   r-   r   r  nowrf   r   sync_error_logr   r   r   rz   	exceptionr   r@   r   )r   rE   r   s      r   r   zCmfMailbox2.process_mailboxes  s   
 	
KLLL% 	GGpqqqF)..6]6]6].^^ 	M 	MG W. %+i@U@[.\.\.\\_f_p_t_t_v_vvv____```GGY7<YY'-YYZZZ%'G"H"227:3CDDDD H H H)wtu)w)w&!  #Gx  yE  #G  #G  H  H  H  H  H  H  H  HH %%'''LL4L(((GGKW\KKLLLL	JKKKKKs   	)D33
E-=&E((E-)r   r   )F)__name__
__module____qualname__r   r   rv   r   r   api_methodsr   r)   r2   r6   r@   rH   rL   r(   r   propertyrz   Loggerr   r   classmethodr   staticmethodr   r   cmf_deferred_jobr   __classcell__)r7   s   @r   r   r      s       122H*6:
 
KV
% 
% 
%   , , ,L L L L L	- 	- 	- 	- 	- '+ D D D D D D D
Y Y Y0 0 0$       X*. . ." s) s) [s)j > > > \>J J J6 VWXXXL L L YX \L L L L Lr   r   c                   |    e Zd Zd Zd Zd Zd Zed             Zd Z	d Z
ed             Zd	 Zd
 Zd Zd Zd ZdS )r   c                    ddl m}m}m} 	 |                     t          |                     d S # |||f$ r t          j        d           Y nw xY w|| _        t          j
        |                                          | _        |                                 \  | _	        | _        d | _        t!          j        d          }|                    t          |                    }|r't'          |                    d                    | _        | j                            d          | _        | j                            d          | _        |                                 | _        d | _        d | _        g | _        g | _        d | _        g | _        g | _         g | _!        | "                                 | #                                 | $                                 d S )Nr   )UnrecognizedMSGTypeErrorUnsupportedMSGTypeErrorInvalidFileFormatErroru    Это не Outlook письмо,U=(\d+)r   z
Message-IDDate)%extract_msg.utilsr/  r0  r1  _parse_outlook_msgr   rz   r
  r   r   message_from_bytes
read_bytesr   _parse_senderrf   r   recompilesearchintgroupr>   r   date_parse_subjectr   r   r   r   r   r   r   r   r   _parse_references_parse_body_parse_recipients)r   r   r/  r0  r1  re_uidmatchuidmatchs          r   __init__zMessage.__init__  s   oooooooooo	@##CMM222F')ACYZ 	@ 	@ 	@O>?????	@ !+H,?,?,A,ABB $ 2 2 4 4
DI j,,%%c(mm44 	-(..++,,DG(,,|44HLL((	**,,!#        s   "0 AAc           	         dd l }|| _        |                    |          5 }|                                 \  | _        | _        d | _        t          j        d          }|	                    t          |                    }|r't          |                    d                    | _        |j        | _        |j        | _        |j        | _        d | _        d | _        g | _        t)          |j                  D ]L\  }}|j        }d| }	|j        r|j        }	|s|	}| j                            |	|j        ||j        d           Mg | _        |j        | _        g | _        |j        D ]!}
| j                            |
j                   "|j        | _        |j                                         | _        d d d            n# 1 swxY w Y   | j        sRtC          j"                    }dx|_#        |_$        |%                    | j                  &                                | _        | j        sd| j         d| _        tN          (                    | j                  | _        tR          *                    | j                  | _        d S )	Nr   r2  r   attach)r   r   r   mimetypeT<plaintext></plaintext>)+extract_msgr   openMsgr8  r   rf   r   r9  r:  r;  r   r<  r=  	messageIdr   r>  r   r   r   r   	enumerate	contendIdr   rb   rH  r   	inReplyTor   r   
recipientsbodyhtmlBodyr   	html2text	HTML2Textignore_imagesignore_linkshandler.   r   prepare_wiki_syntaxr   
html_clean)r   r   rK  msgrC  rD  irG  r   attach_namerefhs               r   r5  zMessage._parse_outlook_msg  s      ** #	3c$($6$6$8$8!DJ	 DG*Z00K"))#h--88H 1hnnQ//00!mDODI;DL!DN!DN!D&s77  	6#-
*qll; ."(+K! -!,J ''$/#);&0#)?	) )     &(D""}D DO~ 2 2&&sy1111 XDN \0022DNG#	3 #	3 #	3 #	3 #	3 #	3 #	3 #	3 #	3 #	3 #	3 #	3 #	3 #	3 #	3H ~ 	>#%%A/33AOanXXdn55;;==DN~ 	HG4>GGGDN !44T^DD ++DN;;s   FF<<G G c                 (   | j                             d          s| j                             d          sd S d }| j                             d          rK| j         d                             dd          d         }|d         dk    r|d         dk    r
|dd         }|}|r|| j         d         v r`t          j                            | j         d                   }t          |          dk    r|d         d                             d	d                              d
d          }t          |                    dd                    dk    r|                    dd          \  }}n|x}}|	                                	                    d          	                    d          }|	                                	                    d          	                    d          }n2t          |          dk    r|\  }}|d         
                    |d         pd          }|d         
                    |d         pd          }|rv|	                                	                    d          	                    d          |	                                	                    d          	                    d          k    r[t          d           t          d|d|           |	                                	                    d          	                    d          }||fS )NzReturn-PathFromr	  r   r   <>
	r  r   u   WARNING: подозрительное письмо, разные значения отправителя в Return-Path и FromzWARNING: Return-PathzFrom:)r   r>   splitr   headerr	   r  r   rsplitr.   r   print)r   sendersender_name_fromname_with_emailraw_name	raw_email
email_addrs           r   r8  zMessage._parse_sender  s   x||M** 	48<<3G3G 	F8<<&& 	!Xm,223::1=FayCF2J#$5$5" K  	F(888L..tx/?@@E5zzQ"'(1+"5"5dC"@"@"H"Hc"R"R--c15566!;;*9*@*@a*H*H'Hii+::Hy&nn..44S99??DD"**0055;;C@@Uq&+#)&qk00!1GHH&q\0011HII
 F!1!1!3!3!9!9#!>!>!D!DS!I!IV\\^^MaMabeMfMfMlMlmpMqMq!q!q  \  ]  ]  ]0&':NNN'--//55c::@@EEF{""r   c                       fd} j                             d          r |d           _         j                             d          r |d           _        d S d S )Nc                 D   g }t           j                            j        |          g          }|D ]n}|\  }}|rE||k    r?t           j                            |          d         \  }}||                    |          }||k    rd}|                    ||d           o|S )Nr   r   )r   rf   )r   utilsgetaddressesr   rh  r	   r   r   )rh  to_jsonrQ  	recipientrecipient_namerecipient_emailencodingr   s          r   header_to_jsonz1Message._parse_recipients.<locals>.header_to_json/  s    G1148F3C2DEEJ' 	S 	S	2;/! In&G&G/4|/I/I./Y/YZ[/\,NH+)7)>)>x)H)H!_44%'N.QQRRRRNr   CcTo)r   r>   r   r   )r   r{  s   ` r   rB  zMessage._parse_recipients.  s}    	 	 	 	 	  8<< 	0)>$//DL8<< 	5 .t 4 4D	5 	5r   c                     |r)|                      |pd                                          S t          | t                    r|                                 S |                                                                  S )Nr   )r   r.   
isinstancer   )r   rz  s     r   _decode_subject_partzMessage._decode_subject_partD  si     	?>>("5g66<<>>>gs## 	#==??"~~%%'''r   c                 l   | j                             d          st          j        d| j                   d S t
          j                            | j         d                   }g }|D ];\  }}|dk    rd}|                    t          
                    ||                     <d                    |          S )NSubjectu7   В письме %s нет поля subject вообщеzunknown-8bitr   r	  )r   r>   rz   r
  r   r   rh  r	   r   r   r  r   )r   rh  decodedr   rz  s        r   r?  zMessage._parse_subjectL  s    x||I&& 	OUW[WdeeeF++DHY,?@@!' 	L 	LGX>))"NN777JJKKKKxx   r   c                 N   d | _         g | _        | j                            d          }|r|                                | _         | j                            d          }|rC|                                D ]0}| j                            |                                           /d S d S )NzIn-Reply-To
References)r   r   r   r>   r.   rg  r   )r   r   r   rs       r   r@  zMessage._parse_referencesX  s      hll=11 	3*0022DX\\,//
 	2%%'' 2 2&&qwwyy1111	2 	22 2r   c                     |                      dd                               dd          } t                              | g ddg          S )Nz<div>z<p>z</div>z</p>)tablethtdtrdivcid)tags_extendprotocols_extend)r   r   rZ  )r   s    r   rY  zMessage.prepare_wiki_syntaxj  sO     ||GU++33HfEE !!$4V4V4Vjoip!qqqr   c                    g }| j                                         D ]}|                                r|                                }|                    d          }|                     |          r|                     |           l|dk    r~|r|                    d          sg|                    d          	                    |
                    d                                                    }|                    d|d           |d	k    rm|r|                    d          sV|                    d          	                    |
                    d                    }|                    d
|d           c|                                dk    r|                     |           |r|                     |           |dk    rt!          d|            d                    d |D                       | _        d                    d |D                       | _        | j        sRt)          j                    }dx|_        |_        |                    | j                                                  | _        | j        sd| j         d| _        t2                              | j                  | _        t6                              | j                  | _        | j        s| j        st!          d           d S )NzContent-Dispositionz
text/plainrj   Tr   r   r   )typecontentz	text/htmlhtmlimagezapplication/pgp-signaturez!!! UNKNOWN TYPE r  c                 6    g | ]}|d          dk    |d         S )r  r   r  rQ   rS   cs     r   rU   z'Message._parse_body.<locals>.<listcomp>  ,    %a%a%aqqQWyZ`O`O`a	lO`O`O`r   c                 6    g | ]}|d          dk    |d         S )r  r  r  rQ   r  s     r   rU   z'Message._parse_body.<locals>.<listcomp>  r  r   rI  rJ  z????)r   walkis_multipartget_content_typer>   _is_embedded_message_handle_embedded_messager   get_payloadr   get_content_charsetr.   r   get_content_maintype_handle_image_attachment_handle_regular_attachmentrj  r   r   r   rT  rU  rV  rW  rX  r   rY  r   rZ  )r   text_parts_listpartcontent_typecontent_disposition_parsed_contentr_  s          r   rA  zMessage._parse_bodyv  s   HMMOO #	: #	:D  "" 0022L"&((+@"A"A ((.. --d333 ,,, -4G4R4RS_4`4` -"&"2"2$"2"?"?"F"FtG_G_`gGhGh"i"i"o"o"q"q&&?'S'STTTT+--, .4G4R4RS_4`4` ."&"2"2$"2"?"?"F"FtG_G_`gGhGh"i"i&&?'S'STTTT **,,77--d3333 % ://5555!<<< 8,889999%a%aO%a%a%abb%a%aO%a%a%abb~ 	>#%%A/33AOanXXdn55;;==DN~ 	HG4>GGGDN 44T^DD ++DN;;~ 	dn 	&MMMr   c                     |                                 }|                                }g d}||v rdS |r)|                                                    d          rdS dS )uV   Проверяет, является ли часть вложенным письмом)message/rfc822zapplication/ms-tnefzapplication/vnd.ms-outlookzapplication/octet-streamT).msg.emlF)r  get_filenamer   endswith)r   r  r  r   embedded_message_typess        r   r  zMessage._is_embedded_message  s}    ,,..$$&&"
 "
 "
 1114  	((112BCC 	4ur   c           	         |                                 }|rbt          |          d         d         Gt          |          d         d                             t          |          d         d                   }|sM|                                dk    rdt	          j        dd           d	}ndt	          j        dd           d
}t          j        dd|          }|                    d          }|s|}n:|	                                	                    d          	                    d          }| j
                            ||                    d          |                                |                                |dd           dS )uP   Обрабатывает вложенные письма как вложенияr   r   Nr  embedded_message_0123456789abcdef   kr  r     [^-a-zA-Zа-яА-Я0-9._ ]r   
Content-IDrb  rd  Tr  )r   r   maintypesubtyper   is_embedded_message)r  r	   r   r  randomchoicesr9  subr>   r.   r   r   r  r  get_content_subtyper   r  	_filenamer   s       r   r  z Message._handle_embedded_message  s   %%''	 	^y11!4Q7C%i003A6==mI>V>VWX>YZ[>\]]I 	^$$&&*:::]?QUV0W0W0W]]]		]?QUV0W0W0W]]]	 F8#yII	XXl++
 	B"JJ#))++11#66<<SAAJ!''t'441133//11$#'!
 !
 	 	 	 	 	r   c                    |                                 }|rbt          |          d         d         Gt          |          d         d                             t          |          d         d                   }|s,dd                    t	          j        dd                    z   }t          j        d	d
|          }|                    d          }|s|}n:|	                                	                    d          	                    d          }| j
                            ||                    d          |                                |d           dS )u/   Обрабатывает изображенияr   r   Ninline_attachmentr   r  r  r  r  r   r  rb  rd  Tr  )r   r   r  r   )r  r	   r   r   r  r  r9  r  r>   r.   r   r   r  r  r  s       r   r  z Message._handle_image_attachment  sX   %%''	 	bY''*1-9))44Q7:AA-PYBZBZ[\B]^_B`aa	 	_+bggfnEW[\6]6]6].^.^^IF8#yII	XXl++
 	B"JJ#))++11#66<<SAAJ%%!''t'44//11$	'
 '
 	 	 	 	 	r   c                 N   |                                 }|rbt          |          d         d         Gt          |          d         d                             t          |          d         d                   }|                    d          }|s|}n:|                                                    d                              d          }| j                            ||                    d          |                                |	                                |d	           dS )
u8   Обрабатывает обычные вложенияr   r   Nr  rb  rd  Tr  )r   r   r  r  r   )
r  r	   r   r>   r.   r   r   r  r  r  r  s       r   r  z"Message._handle_regular_attachment  s!   %%''	 	^y11!4Q7C%i003A6==mI>V>VWX>YZ[>\]]IXXl++
 	B"JJ#))++11#66<<SAAJ!''t'441133//11$!
 !
 	 	 	 	 	r   N)r#  r$  r%  rE  r5  r8  rB  r*  r  r?  r@  rY  rA  r  r  r  r  rQ   r   r   r   r     s         !  !  !D0< 0< 0<d!# !# !#F5 5 5, ( ( \(
! 
! 
!2 2 2$ 	r 	r \	r5 5 5n  ,  @  0    r   r   )cmf.includer   r   r   r  pathlibr   
imapclientr   r   email.headerr	   	itertoolsr
   hashlibr   r  r9  r   rz   cmf.modules.logsr   rT  jinja2r   modules.mail2.fieldsr   r   r   rQ   r   r   <module>r     s       2 2 2 2 2 2 2 2 2 2                        & & & & & &              				      ' ' ' ' ' '           - - - - - -\L \L \L \L \L,* \L \L \L~W W W W W W W W W Wr   