python MIME将多个附件附加到多部分消息

Posted

技术标签:

【中文标题】python MIME将多个附件附加到多部分消息【英文标题】:python MIME attaching multiple attachments to a multipart message 【发布时间】:2018-03-19 03:18:08 【问题描述】:

我正在尝试将多个附件附加到 email.mime.multipart 对象:

from smtplib import SMTP
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

message = MIMEMultipart('alternative')
message['Subject'] = 'test'

for i in range(10):
    title="<h2></h2>".format(i)
    message.attach(MIMEText(title,"html",_charset="utf-8"))

在这里我可以检查负载是否包含 10 个元素:message.get_payload() 我可以看到 10 个元素的列表,这似乎是正确的。

但是,当我使用以下代码发送电子邮件时:

MAIL_HOST = 'smtp.gmail.com:587'
MAIL_USER = 'xxx@gmail.com'
MAIL_PASSWORD = 'xxx'
MAIL_REPICIENTS = ['xxx@gmail.com']

smtp = SMTP(MAIL_HOST)
smtp.ehlo()
smtp.starttls()
smtp.login(MAIL_USER, MAIL_PASSWORD)
smtp.sendmail(MAIL_USER, MAIL_REPICIENTS, message.as_string())
smtp.close()

电子邮件仅包含列表的最后一个元素。

谁能帮我解决这个问题?

【问题讨论】:

【参考方案1】:

那是因为您要附加 10 条不同的消息。为什么要附加一条消息。将您的代码更改为:

from smtplib import SMTP
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

message = MIMEMultipart('alternative')
message['Subject'] = 'test'
html = ''

for i in range(10):
    title="<h2></h2>".format(i)
    html += title

message.attach(MIMEText(html,"html",_charset="utf-8"))

【讨论】:

嗨,谢谢,是的,谢谢!但是,如果只能附加 1 个附件,为什么还要将其称为 multipart 呢?我的方法似乎与我在文档中找到的一致:docs.python.org/3.4/library/… 之所以称为多方,是因为您可以附加多个版本的消息,例如:纯文本和html。假定最后附加的消息是首选消息。因此,当您附加多条 html 消息时,它所做的只是显示最后一条。

以上是关于python MIME将多个附件附加到多部分消息的主要内容,如果未能解决你的问题,请参考以下文章

将 MIME 中的附加数据嵌入到电子邮件的 HTML 部分。未链接到附件

如何将 msg 中的附件附加到 Mime 以在 Python 中作为电子邮件发送?

将一些文件附加到 MIME 多部分电子邮件

更改附件标题 MIME python

我可以将 S/MIME 作为多部分/混合消息的一部分吗?

使用 perl 在 MIME 中解码附件时出错