0
0 комментариев

Я проверяю вложения в письме через антивирусную систему, если вложение вредоносное или подозрительное его необходимо удалить из письма и добавить текст о том что это вложение было удалено.
Но я столкнулся с некоторыми сложностями, если письмо содержит inline вложение (например картинку встроенную в письмо) то добавление в конец информации ни к чему не приводит, эта информация просто не отображается почтовыми клиентами при просмотре письма.
Я использую письмо следующего содержания(удалено содержимое картинки):

To: nmikaev <nmikaev@tip.avsw.ru>
From: nmikaev <nmikaev@tip.avsw.ru>
Subject: test18
Message-ID: <5bf8356f-2cad-bb52-1644-344b25a6a3fe@tip.avsw.ru>
Date: Wed, 13 Dec 2017 16:39:47 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101
 Thunderbird/52.5.0
MIME-Version: 1.0
Content-Type: multipart/alternative;
 boundary="------------9D100498B76DCCA2302346E9"
Content-Language: en-US
 
This is a multi-part message in MIME format.
--------------9D100498B76DCCA2302346E9
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit
 
test18
 
test18
 
 
--------------9D100498B76DCCA2302346E9
Content-Type: multipart/related;
 boundary="------------F4FDF24DEF3F140B04A4F455"
 
 
--------------F4FDF24DEF3F140B04A4F455
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 7bit
 
<html>
  <head>
 
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <p>test18</p>
    <p><img src="cid:part1.FFAD31E9.10EFE63D@tip.avsw.ru" alt="python email добавить текст в письмо"></p>
    <p>test18</p>
  </body>
</html>
 
--------------F4FDF24DEF3F140B04A4F455
Content-Type: image/jpeg;
 name="oplpbkaaobmmkala.jpeg"
Content-Transfer-Encoding: base64
Content-ID: <part1.FFAD31E9.10EFE63D@tip.avsw.ru>
Content-Disposition: inline;
 filename="oplpbkaaobmmkala.jpeg"
 
HERE IMAGE CONTENT
 
--------------F4FDF24DEF3F140B04A4F455--
 
--------------9D100498B76DCCA2302346E9
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
 
Removed oplpbkaaobmmkala.jpeg with hash: 4b002716ede36b1f8da0ec3543cdb6996b50d943d1ba789a8fd39e3d467174e3
 
--------------9D100498B76DCCA2302346E9--

В конце информация добавлена уже.
Использую следующий код:

text = ''
if self.attachments_pool:
    for attachment in self.attachments_pool:
        text+='Removed ' + attachment.getFilename() +' with hash: ' + attachment.getHash() + '\n'
        text = MIMEText(text, 'plain')
    self.msg.attach(text)

Однако если письмо не содержит inline вложений, то информация корректно отображается.
Возможно проблема в том что test18 прописывается дважды в text/plain и в html. А между ними должно быть изображение, может надо выделять основной какой то объект email.Message в который добавлять новый текст. Как это сделать ? И я так понимаю что метод attach не совсем подходит для этих целей ?

И еще , как можно эффективно удалять вложения Content-Disposition: inline или Content-Disposition: attachment ? Обязательно ли собирать новое письмо (новый объект email.Message) и в него уже добавлять вложения ? Можно наверное как то изменить уже существующий обьект email.Message ? А если нельзя как можно сконструировать новое письмо которое может быть любой сложности(надо прокопировать все заголовки, все части письма например с помощью msg.walk) ?

Заранее огромное спасибо ! Я надеюсь что получу ответ на свой вопрос


Добавить комментарий