【问题标题】:python MIME attaching multiple attachments to a multipart messagepython MIME将多个附件附加到多部分消息
【发布时间】: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()

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

谁能帮我解决这个问题?

【问题讨论】:

    标签: python mime


    【解决方案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 消息时,它所做的只是显示最后一条。
    猜你喜欢
    • 2019-04-06
    • 2013-10-30
    • 2020-06-30
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-10
    • 2012-07-02
    相关资源
    最近更新 更多