2016-03-21 12 views
0

Ich lese eine Mail von stdin mitVerwenden Python eine E-Mail (email.Message) und fügen Sie eine Anlage

message = mailbox.email.message_from_file(sys.stdin) 

und möchte hinzufügen, um einen Textdateianhang zu ändern. Ich habe folgendes versucht:

new_msg = email.mime.multipart.MIMEMultipart('related') 

old_msg = email.mime.message.MIMEMessage(message) 
new_msg.attach(old_msg) 

att_msg = email.mime.text.MIMEText("Textfile attachment") 
att_msg.add_header('Content-Disposition', 'attachment', filename= 'my_attachment.txt') 
new_msg.attach(att_msg) 

maildir.add(new_msg) 

wo maildir = mailbox.Maildir('~/mail').

Ich bekomme jedoch eine Nachricht in ~/mail mit zwei Anlagen ForwardedMessage.eml und my_attachment.txt.

Mein Ziel ist es, die ursprüngliche Nachricht (mit den gleichen Überschriften), aber mit der Textdatei beigefügt.

EDIT Lassen Sie mich Ihnen ein Beispiel geben. Originaltext:

To: [email protected] 
From: User <[email protected]> 
Message-ID: <[email protected]> 
Date: Wed, 23 Mar 2016 15:40:18 +0100 
MIME-Version: 1.0 
Content-Type: text/plain; charset=utf-8; format=flowed 
Content-Transfer-Encoding: 7bit 

Testmessage 

Mit meinem Code:

Content-Type: multipart/related; boundary="===============7892775444970429949==" 
MIME-Version: 1.0 

--===============7892775444970429949== 
Content-Type: message/rfc822 
MIME-Version: 1.0 

To: [email protected] 
From: User <[email protected]> 
Message-ID: <[email protected]> 
Date: Wed, 23 Mar 2016 15:40:18 +0100 
MIME-Version: 1.0 
Content-Type: text/plain; charset=utf-8; format=flowed 
Content-Transfer-Encoding: 7bit 

Testmessage 

--===============7892775444970429949== 
Content-Type: text/plain; charset="us-ascii" 
MIME-Version: 1.0 
Content-Transfer-Encoding: 7bit 
Content-Disposition: attachment; filename="atach.txt" 

Textfile attachment 
--===============7892775444970429949==-- 

Und das ist, was Thunderbird gibt mir (und was ich will):

To: [email protected] 
From: User <[email protected]> 
Message-ID: <[email protected]> 
Date: Wed, 23 Mar 2016 15:40:18 +0100 
MIME-Version: 1.0 
Content-Type: multipart/mixed; boundary="------------010607020403070301060303" 

This is a multi-part message in MIME format. 
--------------010607020403070301060303 
Content-Type: text/plain; charset=utf-8; format=flowed 
Content-Transfer-Encoding: 7bit 

Testmessage 

--------------010607020403070301060303 
Content-Type: text/plain; charset="us-ascii" 
MIME-Version: 1.0 
Content-Transfer-Encoding: 7bit 
Content-Disposition: attachment; filename="atach.txt" 

Textfile attachment 
--------------010607020403070301060303-- 

Antwort

0

Ich habe Ihren Code einfach ausprobiert und es funktioniert perfekt Ich werde die Arbeitslösung bereitstellen. Ich denke, es ist besser, die benötigten Modulklassen als einzige Klassen für den Code zu importieren. Wie hier gezeigt

import sys 
import mailbox 
import email 
from email.mime.multipart import MIMEMultipart 
from email.mime.message import MIMEMessage 
from email.mime.text import MIMEText 

message = mailbox.email.message_from_file(sys.stdin) 
maildir = mailbox.Maildir('./mail',create=True) 
new_msg = MIMEMultipart('related') 

old_msg = MIMEMessage(message) 
new_msg.attach(old_msg) 

att_msg = MIMEText("Textfile attachment") 
att_msg.add_header('Content-Disposition', 'attachment',filename='atach.txt') 
new_msg.attach(att_msg) 

maildir.add(new_msg) 

Ich habe auch ein zusätzliches Schlüsselwort arg übergeben, um das Postfach zu erstellen, wenn es nicht existiert. create = Wahr.

läuft das oben und überprüfen Sie die Mail Dir gibt mir Folgendes Ich hoffe, dass ist, was Sie wünschen.

Content-Type: multipart/related; boundary="===============2731426334901210480==" 
MIME-Version: 1.0 

--===============2731426334901210480== 
Content-Type: message/rfc822 
MIME-Version: 1.0 


Hello trial 2 

--===============2731426334901210480== 
Content-Type: text/plain; charset="us-ascii" 
MIME-Version: 1.0 
Content-Transfer-Encoding: 7bit 
Content-Disposition: attachment; filename="atach.txt" 

Textfile attachment 
--===============2731426334901210480==-- 
+0

Ja, der Code gibt mir eine Nachricht wie Ihre. Mutt und Thunderbird zeigen jedoch eine Nachricht mit zwei Anhängen an: die ursprüngliche Nachricht und die Textdatei. – scus