【问题标题】:Use Python to modify an E-Mail (email.Message) and add an attachment使用 Python 修改电子邮件(email.Message)并添加附件
【发布时间】:2016-07-08 02:03:37
【问题描述】:

我正在使用标准输入读取邮件

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

并想添加一个文本文件附件。我尝试了以下方法:

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)

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

但是,我在~/mail 中收到一条消息,其中包含两个附件ForwardedMessage.emlmy_attachment.txt

我的目标是获得原始消息(具有相同的标题),但附加文本文件。

编辑让我举个例子。原文:

To: foo@bar.com
From: User <user@mydomain.net>
Message-ID: <56F2AAD2.7030408@mydomain.net>
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

使用我的代码:

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

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

To: foo@bar.com
From: User <user@mydomain.net>
Message-ID: <56F2AAD2.7030408@mydomain.net>
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==--

这就是 Thunderbird 给我的(也是我想要的):

To: foo@bar.com
From: User <user@mydomain.net>
Message-ID: <56F2AAD2.7030408@mydomain.net>
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--

【问题讨论】:

    标签: python email attachment mime multipart


    【解决方案1】:

    我刚刚试用了您的代码,它运行良好,我将提供可行的解决方案。我认为最好将所需的模块类导入为代码中使用的唯一类。如图所示

    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)
    

    如果邮箱不存在,我还传递了一个额外的关键字 arg 来创建邮箱。 创建=真

    运行上述并检查邮件目录给我以下我希望这是你想要的。

    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==--
    

    【讨论】:

    • 是的,代码给了我一条消息,就像你的一样。但是,mutt 和 Thunderbird 都会显示带有 两个 附件的消息:原始消息和文本文件。
    猜你喜欢
    • 1970-01-01
    • 2021-10-31
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2015-03-06
    • 2011-02-03
    • 1970-01-01
    相关资源
    最近更新 更多