
    Y~h                         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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D ]}
t          j                            |j        j         d| d|
           s4t/          |j        j         d| d|
                                           D ]y}|	rBt3          j        t          j                            |          t8          j                  |	k     rF|j                            d          ra|                    ||d           zt?          |dd           }|D ]}	 |d         }|d         }t
                              d|            tA          |          }|j!        }|j!        sdd"                    |j#        $                    d                    }d tK          |                    d!                    &                                z   }t          j'                            ||d"g#          }d}|sd$}t          '                    ||||j(        )                                |j        |j(        |j*        |j+        |j,        |j-        |j.        |j-        |j/        d|j0        |j1        %          }|2                    |j3        j                   |j4        |k    r.d$}t
                              d&|j4         d'|            ||_4        tk          |j6        |j7                  D ]}|d(         }t          j8                            ||d)d*g+          }|r%|j9        |d,         k    r|d,         d-z   |d(         z   }t          j8                            ||d,         d)g.          }|st          8                    |||d,         /          }|:                    |d0         dd1           |                                 |j;        j        <                    d2|j9         |j=        j                  |_;        |r|                                 t}                       # t~          $ r}t
                              d3| d4| d$5           t
                              t          jA                    d$5           t           B                    d6|t          |                     Y d }~d }~ww xY w|D ]}|                    d$7           |j                                         |                    d$7           d d d            d S # 1 swxY w Y   d S )8NzCmfMailbox2.process_mailbox:r   <   )timeoutblocking_timeout)r   r   r&   r!   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)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)DcmfutilCmfLockr=   r   r>   r   debugrf   r   run_offlineimaposlistdirr-   pathr   r[   r   decodeencoder@   r   set_nowappendr   iterdirr   fromtimestampgetmtimer   utc
startswithsortedMessager   joinrawget_allr   	hexdigestCmfMailr   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   )
mailbox_id_args_kwargsrE   folders_to_savenew_mail_filesfolder_name_rawr   folder_namer   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 b	) b	)(,, 'S 'S 'S - T TG GG\gl\\]]]' ?@@@b	) b	) b	) b	) b	) b	) b	) b	) GG6777##%%% ONGGWXXX#%::g.B.H#I#I ,R ,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... - 	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$ %)?@P@PQR@S@SX`Xd)e)e)ehq)q)q$6,,S11 %$&--a.P.PQQQQR	R $NEGdGdeeeN"0 V9 V9U9+H5F$2;$?MGG[M[[\\\&}55H!)!4J $. _ )+0D0DZ0P0P(Q(Q%-M4H4H4Q4Q0R0R0\0\0^0^%^
!>--&#- 01 .  D
 !&I H$(	%~~#*'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(((Eb	) b	) b	) b	) b	) b	) b	) b	) b	) b	) b	) b	) b	) b	) b	) b	) b	) b	)sF   A([:J[:K4X[:
Z A8Z[:Z  A[::[>[>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	          }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   Запускаем T)capture_outputcheckr   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_offlineimaph  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SSSDD):+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   5C: :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-)F)__name__
__module____qualname__r   r   rv   r   r   api_methodsr   r)   r2   r6   r@   rH   rL   r(   r   propertyrz   Loggerr   r   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*. . .  e) e) \e)NJ J J6 VWXXXL L L YX \L L L L Lr   r   c                   d    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
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$  r%  r&  _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$  r%  r&  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   r'  r   attach)r   r   r   mimetypeT<plaintext></plaintext>)+extract_msgr   openMsgr-  r   rf   r   r.  r/  r0  r   r1  r2  	messageIdr   r3  r   r   r   r   	enumerate	contendIdr   rb   r=  r   	inReplyTor   r   
recipientsbodyhtmlBodyr   	html2text	HTML2Textignore_imagesignore_linkshandler.   r   prepare_wiki_syntaxr   
html_clean)r   r   r@  msgr8  r9  ir<  r   attach_namerefhs               r   r*  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	   lenr   rsplitr.   r   print)r   sendersender_name_fromname_with_emailraw_name	raw_email
email_addrs           r   r-  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   r]  r	   r   r   )r]  to_jsonrF  	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   rq  s   ` r   r7  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   rp  s     r   _decode_subject_partzMessage._decode_subject_part/  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   r]  r	   r   r   rv  r   )r   r]  decodedr   rp  s        r   r4  zMessage._parse_subject7  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.   r\  r   )r   r   r   rs       r   r5  zMessage._parse_referencesC  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   rO  )r   s    r   rN  zMessage.prepare_wiki_syntaxU  sO     ||GU++33HfEE !!$4V4V4Vjoip!qqqr   c           	      F   g }| j                                         D ]f}|                                r|                                dk    r|                    d          r(|                    d                              d          sg|                    d                              |                    d                    	                                }|
                    d|d           |                                d	k    r|                    d          r(|                    d                              d          sV|                    d                              |                    d                    }|
                    d
|d           |                                dk    rW|                                }|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           |                                r$|                                }t          |          d         d         Gt          |          d         d                             t          |          d         d                   }|                    d          }|s|}n:|	                                	                    d          	                    d          }| j        
                    ||                    d          |                                |                                |d           (|                                dk    rBt/          d|                                            hd                    d |D                       | _        d                    d |D                       | _        | j        sRt5          j                    }dx|_        |_        |                    | j                  	                                | _        | j        sd| j         d | _        t>                               | j                  | _        tB          "                    | j                  | _        | j        s| j        st/          d!           d S )"Nz
text/plainzContent-Dispositionrj   T)r   r   r   )typecontentz	text/htmlhtmlimager   r   inline_attachmentr   0123456789abcdef   )ku   [^-a-zA-Zа-яА-Я0-9._ ]r   z
Content-IDrW  rY  )r   r   subtyper   )r   r   maintyper  r   zapplication/pgp-signaturez!!! UNKNOWN TYPE z

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   r>  r?  z????)#r   walkis_multipartget_content_typer>   r   get_payloadr   get_content_charsetr.   r   get_content_maintypeget_filenamer	   r   randomchoicesr.  subr   get_content_subtypeget_content_dispositionr   r`  r   r   rI  rJ  rK  rL  rM  r   rN  r   rO  )r   text_parts_listpart_parsed_content	_filenamer   rT  s          r   r6  zMessage._parse_bodya  sa    HMMOO 7	E 7	ED  "" %%''<77"788 8@DI^@_@_@j@jkw@x@x 8 #'"2"2$"2"?"?"F"FtG_G_`gGhGh"i"i"o"o"q"q&&?'S'STTTT''))[88"788 9@DI^@_@_@j@jkw@x@x 9 #'"2"2$"2"?"?"F"FtG_G_`gGhGh"i"i&&?'S'STTTT**,,77 !--//	 j$Y//215A$1)$<$<Q$?$B$I$I-XaJbJbcdJefgJh$i$i	  g 3bggfnM_cd>e>e>e6f6f fIF#@#yQQ	!XXl33
! J!*JJ!+!1!1!3!3!9!9#!>!>!D!DS!I!IJ&-- )#//t/<<#7799",	/ /     --// E --//	 ++A.q1= -i 8 8 ;A > E EmT]F^F^_`FabcFd e eI!XXl33
! J!*JJ!+!1!1!3!3!9!9#!>!>!D!DS!I!IJ '' )#//t/<< $ 9 9 ; ;#7799",) )     &&((,GGGC$*?*?*A*ACCDDDD%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   N)r  r  r  r:  r*  r-  r7  r  rv  r4  r5  rN  r6  rQ   r   r   r   r     s         !  !  !D0< 0< 0<d!# !# !#F5 5 5, ( ( \(
! 
! 
!2 2 2$ 	r 	r \	rK K K K Kr   r   )cmf.includer   r   r   r  pathlibr   
imapclientr   r   email.headerr	   	itertoolsr
   hashlibr   r  r.  r   rz   cmf.modules.logsr   rI  jinja2r   modules.mail2.fieldsr   r   r   rQ   r   r   <module>r     s       2 2 2 2 2 2 2 2 2 2                        & & & & & &              				      ' ' ' ' ' '           - - - - - -GL GL GL GL GL,* GL GL GLTK K K K K K K K K Kr   