
    oi                         d dl  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j6                        Z G d d      Zy)    )*)	timedeltadatetimetimezoneN)Path)	imap_utf7)decode_header)chain)md5)
log_config)Template)cmf_mailbox2c                   B    e Zd Z eej
                        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 )CmfMailbox2Nprocess_mailboxesget_log_urlc                     | j                   j                  sy | j                   r7t        | j                  | j                    d| j                   z        | _        y d | _        y )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   sN    zz$$:: !$D$;$;AdggY>W$W XD $D    c                    | j                   j                  s| j                  j                  s| j                  j                  so| j                  j                  sY| j
                  j                  sC| j                  j                  s-| j                  j                  s| j                  j                  sy | j                  g d       | j                          y )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    ((zz$$**~~(())zz$$}}''""--qrr   c                 x    g d}|D ]1  }| |   }|j                   s|s|j                  j                         }3 y )N)r   r$   r!   r"   smtp_server	smtp_port)r   valuestrip)r   paramsparamfields       r   _strip_paramszCmfMailbox2._strip_paramsa   s<    [ 	,EKEE))+	,r   c                 *    t         |          ddgz   S )Nparentr&   )supersave_preload_fields)r   	__class__s    r   r6   zCmfMailbox2.save_preload_fieldsh   s    w*,:J/KKKr   c                 X   | j                          | j                  j                  rU| j                  rIt        j                  j                  dd| j                  gdd| j                  gg      rt        dd       | j                          | j                          t        | ,  |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    ::  TZZ!!%%wTZZ.H4QUW[W^W^J_-`%az  CG  H!%%'w|T,V,,r   T)	recursivec                    t         j                  j                  dd| j                  g      D ]  } |j                  |i |  t        |   |d|i|S )Nmailboxr9   r:   rC   )r=   CmfMailHandlerlistr   deleter5   )r   rC   rA   rB   mail_handlerr7   s        r   rH   zCmfMailbox2.deletev   s_    "1166y#tww>W6X 	1LL00	1w~tCyCFCCr   c                 Z    | 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0DJJ<q	1XXXr   c                 |   t        t        | j                              }|j                  dd       | j	                         }| j                  r| j
                  r| j                  r| j                  r| j                  rt        j                  j                  | ddg      D cg c]  }|j                  j                   }}t        t        d      j                               }|j!                  | |      }|j"                  j                  dd       |j%                  |       y|j'                  d       y c c}w )NT)parentsexist_okname_raw)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   rP   r-   r   	read_textrenderr4   
write_textunlink)r   r   config_pathfrS   templatedatas          r   r(   zCmfMailbox2._write_config~   s   C 1 1234$7'')0@0@TZZTXTaTa*0*A*A*F*Fd]akujv*F*w%%&

  %! %  %` a k k mnH??4G\?]D$$TD$A""4($/%s   #D9c                     t         j                  j                  | t        j                  dg      }|rt        |d      S y )Nurlr4   namerR   )r=   CmfAttachmentr>   r   LOG_NAMEgetattr)r   rA   rB   
attachments       r   r   zCmfMailbox2.get_log_url   s>     ))--T
@S@S]b\c-d
:u--r   returnc                    | j                   r| j                   S t        j                  j                  | t        j
                        }|sd}t        j                  | t        j
                        }|j                          |j                  s|j                  ddd       ddl	m
}m}m}  |t        j                          ||       t        j                  d      | _         t	        j                   | j                   |j"                  t        j$                  |	       | j                   S t	        j&                  | j)                               | _         | j                   S )
u{    Журнал логирования детектирования петель и срабатывания w/b lists email )r4   rb   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=   rc   r>   r   rd   r@   file_existsupload_fileldap3.utils.logrl   rm   rn   loggingERROR	getLoggerinit_loggerfull_path_fileINFO
get_loggerget_files_dir)r   rf   rq   rl   rm   rn   s         r   loggerzCmfMailbox2.logger   s    ==== ))--T
@S@S-T
nI--T
@S@S-TJOO))&&s5u&Mpp,W]];(2#--o>DM""4==*2K2KSZS_S_ktu }} '11$2D2D2FGDM}}r   c                     t         j                  j                  }|sy d}t        j                  }d| }|j                  |      r$|j                  |       |j                  ||       y |j                  |d|       y )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   sk    %%CC	<<#G9-??8$MM(#OOHc*LL1L-r   c                    t         j                  d| dd      5  t        j                  j	                  |g d      }t
        j                  d|j                          |j                  st
        j                  d       	 d d d        y t
        j                  d	       |j                          g }g }t
        j                  d
       t        j                  |j                  j                        D ]C  }|dv r	|dk(  rd}t        j                  j                  |j                  j                   d| d      sJt        j                  j	                  ||dg      }|sht!        j"                  |j%                               }	|	sd}	t
        j                  d|	        t        j                  |||	|      }|j'                          |j(                  j                  }
|j(                  j+                          |j-                  |       |
d }n2|j.                  r$|
t1        |j.                  j                        z
  }n|
}dD ]  }t        j                  j                  |j                  j                   d| d|       s?t3        |j                  j                   d| d|       j5                         D ]z  }|rFt7        j8                  t        j                  j;                  |      t<        j>                        |k  rK|j                  jA                  d      rg|j-                  ||d       |  F tC        |dd       }|D ]*  }	 |d   }|d   }t
        j                  d|        tE        |      }|jF                  }|jF                  sUdjI                  |jJ                  jM                  d             }d!tO        |j%                  d"            jQ                         z   }t        jR                  j	                  ||d#g$      }d}|sd%}| jU                  |       t        jS                  ||||jV                  jY                         |j                  |jV                  |jZ                  |j\                  |j^                  |j`                  |jb                  |j`                  |jd                  d|jf                  |jh                  &      }|jk                  |jl                  j                         |jn                  |k7  r.d%}t
        j                  d'|jn                   d(|        ||_7        tq        |jr                  |jt                        D ]  }|d)   }t        jv                  j	                  ||d*d+g,      }|r |jx                  |d-   k7  r|d-   d.z   |d)   z   }t        jv                  j	                  ||d-   d*g/      }|rxt        jw                  |||d-   0      }|j{                  |d1   dd2       |j'                          |j|                  j                  j                  d3|jx                   |j                  j                        |_>         |r|j'                          t                - |D ]  }|j'                  d%8        |j(                  j+                          |j'                  d%8       d d d        y # t        $ rq}t
        j                  d4| d5| d%6       t
        j                  t        j                         d%6       t         j                  d7|t        |             Y d }~d }~ww xY w# 1 sw Y   y xY w)9NzCmfMailbox2.process_mailbox:r   <   )timeoutblocking_timeout)	r   r   r&   resync_prev_daysr!   r"   r#   r$   r%   )r   rR   u7   START Обработка почтового ящика z$DEV: ERROR. not mailbox.maildir_pathu   Синхронизация imapu@   Синхронизация структуры каталогов)newtmpcur /z/cur	last_sync)r4   rP   rR   u   Входящиеu   Создаем каталог )r4   rP   rb   tree_parent)days)r   r   )tz.)folder	mail_fileFc                      | d   j                   S )Nr   )rb   )xs    r   <lambda>z-CmfMailbox2.process_mailbox.<locals>.<lambda>  s    QRS^Q_QdQd r   )reversekeyr   r   u-   Обработка нового пиьсма ReceivedzNO_ID:utf-8mailbox_folder)r4   
message_idrR   T)r4   r   r   	mail_frommail_from_namemail_tomail_to_jsoncc_jsonrb   text	text_htmltext_searchimap_uidmail_headersreferences_rawin_reply_to_rawu2   Перемещаем письмо из папки u    в папку filenamerb   ext_idra   
content_idr   )r4   r   rR   )r4   rb   r   payloadri   zcid:u-   Ошибка обработки письма : )forceu;   Ошибка обработки входящих писем	only_data)GcmfutilCmfLockr=   r   r>   r   debugrb   r   run_offlineimaposlistdirr-   pathr   rV   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attachmentsrc   r   rt   r   replacer`   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suffixr\   _new_mail_filenew_mail_filenew_mailr   mail_recievedmail	need_saverf   attach_filenameexistent_attachmentnew_attachmentes                             r   process_mailboxzCmfMailbox2.process_mailbox   s    __;J<HRWjl_m p	)((,, 'S - TG GGMgll^\]''>@p	) p	) GG57##% ONGGVX#%::g.B.B.H.H#I 7R"n4"e+&(Oww~~)=)=)C)C(DAoEVVZ&[\0044Gogrfs4t"+"2"2?3I3I3K"LK&&8GG<[MJK#44&!0($+	 5 F KKM #,,22	  ((*&&v. $"&K--"+iW=U=U=[=[.\"\K #,K - 	RF77>>W-A-A-G-G,H/IZZ[\b[c*de !W%9%9%?%?$@/ARRSTZS["\]eeg R&8+A+A"''BRBRSTBUZbZfZf+gju+u$66,,S1$&--a.PQR	R]7Rt $NEGdeN"0 Y9X9+H5F$2;$?MGGKM?[\&}5H!)!4!4J $.. )+0D0DZ0P(Q%-M4H4H4Q0R0\0\0^%^
!>>--&#- 01 . D
 !&I$(	--h7%~~#*'1+1&.nn&:&:&<+3==$+MM)1)>)>$,$4$4!)!1!1!)!3!3&.&8&8(0(:(:%-[[)++3+>+>,4,@,@#  .  &  11$..2F2FG**f4$(	"TUYUhUhTiixy  yA  !B  C.4+&+H,F,FH\H\&] D
*4Z*@.4.B.B.F.F#'!0$*H#5 /G /+
 /3F3M3MQ[\hQi3i.8.F.LzZdOe.eO.4.B.B.F.F#'#-l#;$*8 /G /+  3-3-A-A'+%4'1,'? .B .N
 +66z)7LUZin6o*//1 .2^^-A-A-I-IDQ_QfQfPgJhjxj|j|  kC  kC  .DDN9D< !		%'gY9~ * ,d+,
 %%'LL4L(ap	) p	)~ ! 9GGKNK[[]^_]`aimGnGGI002$G?''(e(/Q9 9	9p	) p	)sG   A(]K]I8[
B-[7A]	]A&\=7]=]]]c                     t        | j                        dkD  rZ| j                   d| j                  z   | _        | j                   d| j                  z   | _        | j                  d d dz   | _        y y )N   

z<br><br>   z...)lenr   r   r   )r   s    r   r   zCmfMailbox2.normalize_subjectv  sv    x 3&$,$4$4#5T!:X=O=O!OH$,$4$4#5X!>ASAS!SH'//5=H 'r   c           	      
   | j                         }t        t        | j                              j	                         r|j	                         sUt
        j                  d| j                   d| j                          | j                         st        j                  d       y dddt        |      g}	 t
        j                  d|        t        j                  |dddd	
      }|j"                  j-                         }|j$                  j-                         }t
        j                  |       t
        j                  |       t
        j                  d       y # t        j                  t        j                  f$ r}t
        j                  d|j                   |j"                  |j$                         d}t&        j)                  |||        t+        d|j                    d|j"                   d|j$                         d }~ww xY w)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   Ошибка обработки входящих писем: ошибка запуска offlineimap, вероятно проблема с подключением к почтовому серверу)messagerb   obju;   CmfMailbox2.run_offlineimap(): Ошибка запуска r    u5   Запуск offlineimap прошел успешно.)rL   r   r   r   r   r   r   r   r   r(   rv   warning
subprocessrunTimeoutExpiredCalledProcessErrorcmdstdoutstderrr   r   CmfErrorr.   )r   r[   rA   procr   msgoutputerrs           r   r   zCmfMailbox2.run_offlineimap}  s   '')C))*+224K<N<N<PGGUVZV`V`Uaacdhdkdkclmn%%' de tT3{+;<
	yGG)$01>>$t4d\abD ""$kk!			GI )):+H+HI 	yGG:QUUAHHahhW ]C#4@XYZY^Y^X__abcbjbjakklmnmumulvwxx	ys   22E #H;BG==Hz	@minutely   )	only_once
system_jobschedulepriorityc                    t         j                  d       t        j                  rt         j                  d       y t        j
                  j                  g d      D ]I  }| s|j                  rv|j                  j                  t        |j                  j                        z   |j                  j                         kD  r$t         j                  d|j                   d       t         j                  d|j                   d	|j                          d
|_        	 t        j
                  j                  |j                   j                         |j                  j)                          |j+                  d       t-                t         j                  d|j                          L t         j                  d       y # t"        $ r6}d| |_        t%        j&                  d|j                          Y d }~d }~ww xY w)Nu9   START Обработка почтовых ящиков...uY   process_mailboxes: Обработка почтовых ящиков отключена...)r   r   sync_interval)rR   )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  nowrb   r   sync_error_logr   r   r   rv   	exceptionr   r@   r   )r   rE   r   s      r   r   zCmfMailbox2.process_mailboxes  s   
 	
KL%%GGoq))..6].^ 	MGW..%%++i@U@U@[@[.\\_f_p_p_t_t_vv@N^_`GG:7<<.'--YZ%'G"H""227::3C3CD
 %%'LL4L(GG<W\\NKL#	M$ 	
IK  H+stusv)w&!!$wx  yE  yE  xF  #G  H  HHs   3G	H 
,G;;H )r   r   )F)!__name__
__module____qualname__r   r  MAILDIR_BASE_PATHr   rr   r   r   api_methodsr   r)   r2   r6   r@   rH   rL   r(   r   propertyrv   Loggerr~   r   classmethodr   staticmethodr   r   cmf_deferred_jobr   __classcell__)r7   s   @r   r   r      s    f667H**66:
 
KV
% ,L	- '+ D
Y0$   *." s) s)j > >J: VWXL Y Lr   r   c                   n    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y)r   c                 V   ddl m}m}m} 	 | j	                  t        |             y # |||f$ r t        j                  d       Y nw xY w|| _        t        j                  |j                               | _        | j                         \  | _	        | _        d | _        t!        j"                  d      }|j%                  t        |            }|rt'        |j)                  d            | _        | j                  j+                  d      | _        | j                  j+                  d      | _        | j1                         | _        d | _        d | _        g | _        g | _        d | _        g | _        g | _         g | _!        | jE                          | jG                          | jI                          y )Nr   )UnrecognizedMSGTypeErrorUnsupportedMSGTypeErrorInvalidFileFormatErroru    Это не Outlook письмо,U=(\d+)r   z
Message-IDDate)%extract_msg.utilsr/  r0  r1  _parse_outlook_msgr   rv   r  r   r   message_from_bytes
read_bytesr   _parse_senderrb   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	@##CM2')ACYZ 	@OO>?	@ !++H,?,?,AB $ 2 2 4
DI jj,%%c(m4(..+,DG((,,|4HHLL(	**,!#  s   ' AAc           	      n   dd l }|| _        |j                  |      5 }| j                         \  | _        | _        d | _        t        j                  d      }|j                  t        |            }|rt        |j                  d            | _        |j                  | _        |j                  | _        |j                   | _        d | _        d | _        g | _        t)        |j&                        D ]f  \  }}|j*                  }d| }	|j
                  r|j
                  }	|s|	}| j&                  j-                  |	|j.                  ||j0                  d       h g | _        |j4                  | _        g | _        |j:                  D ]'  }
| j8                  j-                  |
j                         ) |j<                  | _        |j>                  jA                         | _        d d d        | j"                  sPtC        jD                         }dx|_#        |_$        |jK                  | j$                        jM                         | _        | j$                  sd| j"                   d| _        tN        jQ                  | j$                        | _        tR        jU                  | j"                        | _        y # 1 sw Y   xY w)	Nr   r2  r   attach)r   r   r   mimetypeT<plaintext></plaintext>)+extract_msgr   openMsgr8  r   rb   r   r9  r:  r;  r   r<  r=  	messageIdr   r>  r   r   r   r   	enumerate	contendIdr   r^   rH  r   	inReplyTor   r   
recipientsbodyhtmlBodyr   	html2text	HTML2Textignore_imagesignore_linkshandler.   r   prepare_wiki_syntaxr   
html_clean)r   r   rK  r  rC  rD  irG  r   attach_namerefhs               r   r5  zMessage._parse_outlook_msg  s-      * #	3c$($6$6$8!DJ	 DG**Z0K"))#h-8HhnnQ/0!mmDODI;;DL!DN!DN!D&s7 	6#--
 &qcl;;"(++K!!,J  ''$/#);;&0#)??	)  &(D""}}D DO~~ 2&&syy12 XXDN \\002DNG#	3H ~~##%A/33AOanXXdnn5;;=DN~~*4>>*:,GDN !44T^^D ++DNN;[#	3 #	3s   G J++J4c                    | j                   j                  d      s| j                   j                  d      sy d }| j                   j                  d      r9| j                   d   j                  dd      d   }|d   dk(  r|d   dk(  r|dd }|}|r| j                   d   v rt        j                  j                  | j                   d         }t        |      dk(  r|d   d   j                  d	d      j                  d
d      }t        |j                  dd            dk(  r|j                  dd      \  }}n|x}}|j                         j                  d      j                  d      }|j                         j                  d      j                  d      }||fS t        |      dk(  r|\  }}|d   j                  |d   xs d      }|d   j                  |d   xs d      }|r]|j                         j                  d      j                  d      |j                         j                  d      j                  d      k7  rGt        d       t        d|d|       |j                         j                  d      j                  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  sU   xx||M*488<<3G88<<&XXm,223:1=FayCF2J#$5" K (88LL..txx/?@E5zQ"'(1+"5"5dC"@"H"Hc"R--c156!;*9*@*@a*H'Hi+::Hy&nn.44S9??D"*005;;C@ {"" Uq&+#)&qk00!1GH&q\0011HI
!1!1!3!9!9#!>!D!DS!IV\\^MaMabeMfMlMlmpMq!q  \  ]0&':N'--/55c:@@EF{""r   c                       fd} j                   j                  d      r |d       _         j                   j                  d      r |d       _        y y )Nc                 2   g }t         j                  j                  j                  |    g      }|D ]a  }|\  }}|r=||k7  r8t         j                  j                  |      d   \  }}||j                  |      }||k(  rd}|j                  ||d       c |S )Nr   r   )r   rb   )r   utilsgetaddressesr   rg  r	   r   r   )rg  to_jsonrQ  	recipientrecipient_namerecipient_emailencodingr   s          r   header_to_jsonz1Message._parse_recipients.<locals>.header_to_json1  s    G11488F3C2DEJ' 	S	2;/!n&G/4||/I/I./YZ[/\,NH+)7)>)>x)H!_4%'N.QR	S Nr   CcTo)r   r>   r   r   )r   rz  s   ` r   rB  zMessage._parse_recipients0  sH    	  88<<)$/DL88<< .t 4D r   c                     |r#| j                  |xs d      j                         S t        | t              r| j                         S | j                         j                         S )Nr   )r   r.   
isinstancer   )r   ry  s     r   _decode_subject_partzMessage._decode_subject_partF  sN    >>("5g6<<>>gs#==?"~~%%''r   c                 d   | j                   j                  d      s!t        j                  d| j                         y t
        j                  j                  | j                   d         }g }|D ]1  \  }}|dk(  rd}|j                  t        j                  ||             3 dj                  |      S )NSubjectu7   В письме %s нет поля subject вообщеzunknown-8bitr   r  )r   r>   rv   r  r   r   rg  r	   r   r   r  r   )r   rg  decodedr   ry  s        r   r?  zMessage._parse_subjectN  s    xx||I&OOUW[WdWde++DHHY,?@!' 	LGX>)"NN777JK	L xx  r   c                 <   d | _         g | _        | j                  j                  d      }|r|j	                         | _         | j                  j                  d      }|r?|j                         D ]+  }| j                  j                  |j	                                - y y )NzIn-Reply-To
References)r   r   r   r>   r.   rf  r   )r   r   r   rs       r   r@  zMessage._parse_referencesZ  s      hhll=1*002DXX\\,/
%%' 2&&qwwy12 r   c                 |    | j                  dd      j                  dd      } t        j                  | 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_syntaxl  s@     ||GU+33HfE !!$4Vjoip!qqr   c                    g }| j                   j                         D ]q  }|j                         r|j                         }|j	                  d      }| j                  |      r| j                  |       Y|dk(  rf|r|j                  d      sS|j                  d      j                  |j                  d            j                         }|j                  d|d       |d	k(  rY|r|j                  d      sF|j                  d      j                  |j                  d            }|j                  d
|d       "|j                         dk(  r| j                  |       H|r| j                  |       ]|dk(  rdt!        d|        t dj#                  |D cg c]  }|d   dk(  s|d    c}      | _        dj#                  |D cg c]  }|d   d
k(  s|d    c}      | _        | j$                  sPt)        j*                         }dx|_        |_        |j1                  | j&                        j                         | _        | j&                  sd| j$                   d| _        t2        j5                  | j&                        | _        t6        j9                  | j$                        | _        | j$                  s| j&                  st!        d       y c c}w c c}w )NzContent-Dispositionz
text/plainrf   Tr   r   r   )typecontentz	text/htmlhtmlimagezapplication/pgp-signaturez!!! UNKNOWN TYPE r   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_attachmentri  r   r   r   rT  rU  rV  rW  rX  r   rY  r   rZ  )r   text_parts_listpartcontent_typecontent_disposition_parsed_contentcr^  s           r   rA  zMessage._parse_bodyx  s}   HHMMO #	:D  "002L"&((+@"A ((.--d3 ,,4G4R4RS_4`"&"2"2$"2"?"F"FtG_G_`gGh"i"o"o"q&&?'ST+-,4G4R4RS_4`"&"2"2$"2"?"F"FtG_G_`gGh"i&&?'ST **,7--d3 %//5!<< ),89G#	:J  O%aqqQWyZ`O`a	l%abO%aqqQWyZ`O`a	l%ab~~##%A/33AOanXXdnn5;;=DN~~*4>>*:,GDN 44T^^D ++DNN;~~dnn&M &b%as   !K/KK K c                     |j                         }|j                         }g d}||v ry|r |j                         j                  d      ryy)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  sT    ,,.$$&"
 11 (112BCr   c           	         |j                         }|r@t        |      d   d   /t        |      d   d   j                  t        |      d   d         }|sJ|j                         dk(  rdt	        j
                  dd       d	}ndt	        j
                  dd       d
}t        j                  dd|      }|j                  d      }|s|}n.|j                         j                  d      j                  d      }| j                  j                  ||j                  d      |j                         |j                         |dd       y)uP   Обрабатывает вложенные письма как вложенияr   r   Nr  embedded_message_0123456789abcdef   kr  r     [^-a-zA-Zа-яА-Я0-9._ ]r   
Content-IDra  rc  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!4Q7C%i03A6==mI>VWX>YZ[>\]I$$&*::/?QUV0W/XX\]	/?QUV0W/XX\]	 FF8#yI	XXl+
"J#))+11#6<<SAJ!''t'4113//1$#'!
 	r   c                 0   |j                         }|r@t        |      d   d   /t        |      d   d   j                  t        |      d   d         }|s)ddj                  t	        j
                  dd            z   }t        j                  d	d
|      }|j                  d      }|s|}n.|j                         j                  d      j                  d      }| j                  j                  ||j                  d      |j                         |d       y)u/   Обрабатывает изображенияr   r   Ninline_attachmentr   r  r  r  r  r   r  ra  rc  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  s   %%'	Y'*1-9))4Q7:AA-PYBZ[\B]^_B`a	+bggfnnEW[\6].^^IFF8#yI	XXl+
"J#))+11#6<<SAJ%%!''t'4//1$	'
 	r   c                    |j                         }|r@t        |      d   d   /t        |      d   d   j                  t        |      d   d         }|j                  d      }|s|}n.|j	                         j	                  d      j	                  d      }| j
                  j                  ||j                  d      |j                         |j                         |d	       y)
u8   Обрабатывает обычные вложенияr   r   Nr  ra  rc  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!4Q7C%i03A6==mI>VWX>YZ[>\]IXXl+
"J#))+11#6<<SAJ!''t'4113//1$!
 	r   N)r"  r#  r$  rE  r5  r8  rB  r*  r  r?  r@  rY  rA  r  r  r  r   r   r   r   r     sh     !D0<d!#F5, ( (
!2$ 	r 	r5n,@0r   r   )cmf.includer   r   r   r	  pathlibr   
imapclientr   r   email.headerr	   	itertoolsr
   hashlibr   r  r9  r   rv   cmf.modules.logsr   rT  jinja2r   modules.mail2.fieldsr   r   r   r  r   r   <module>r     s^     2 2      &    	   '   -^L,** ^LBW Wr   