我有一个将图片发送到邮箱的功能

要求是,我只有两个图像,第一个我需要发送作为附件,另一个在身体.

在MIMEMultiPart中使用Alternative,它将两个图像作为一个文档发送,我try 使用两个MultiPart,这也没有帮助.让我知道如何处理这个问题,也让我知道这是否可能

任何 idea 都将不胜感激

推荐答案

根据HTML-Email with inline attachments and non-inline attachments,MIME的方法是构建一个内部MIME/相关消息,其中包含HTML文本和内联图像,而外部消息则包含MIME/相关消息和其他附件.

您的代码可能会变成

...
message_body = """<html>
<body><p>Please keep in touch and reach out to us for any help needed.</p>
<image src="cid:image"/></body></html>"""
msg = MIMEMultipart("mixed")

message_body = """<html>
<body><p>Please keep in touch and reach out to us for any help needed.</p>
<image src="cid:image"/></body></html>"""
msg = MIMEMultipart("mixed")
msg['From'] = username
msg['To'] = ','.join(to)
msg['Subject'] = subject

body = MIMEText(message_body, \
                'html', 'utf-8')

inner = MIMEMultipart("related")
inner.attach(body)
msg.attach(inner)
...
    image = MIMEImage(img_data, name=os.path.basename(x))
    image.add_header('Content-Id', 'image')
    inner.attach(image)
    
    image_1 = MIMEImage(img_data_1, name=os.path.basename(y))
    msg.attach(image_1)
    ...

在@triplee的 comments 之后,我try 了一下EmailMessageAPI.它附带了更多的black magic,所以事情要简单得多,尽管不那么明确:

from email.message import EmailMessage
from imghdr import what
...
message_body = """<html>
<body><p>Please keep in touch and reach out to us for any help needed.</p>
<image src="cid:image"/></body></html>"""
msg = EmailMessage()

message_body = """<html>
<body><p>Please keep in touch and reach out to us for any help needed.</p>
<image src="cid:image"/></body></html>"""
msg = MIMEMultipart("mixed")
msg['From'] = username
msg['To'] = ','.join(to)
msg['Subject'] = subject

msg.set_content(message_body, subtype='html')
...
    msg.add_related(img_data, 'image', what(x), cid='image')
    
    msg.add_attachment(img_data_1, 'image', what(y),
                       filename=os.path.basename(y))
    ...

Python相关问答推荐

拆分pandas列并创建包含这些拆分值计数的新列

点到面的Y距离

根据在同一数据框中的查找向数据框添加值

Pandas 都是(),但有一个门槛

发生异常:TclMessage命令名称无效.!listbox"

图像 pyramid .难以创建所需的合成图像

如何使用数组的最小条目拆分数组

基于字符串匹配条件合并两个帧

当从Docker的--env-file参数读取Python中的环境变量时,每个\n都会添加一个\'.如何没有额外的?

如何使用Python以编程方式判断和检索Angular网站的动态内容?

连接一个rabrame和另一个1d rabrame不是问题,但当使用[...]'运算符会产生不同的结果

用砂箱开发Web统计分析

如何使用SentenceTransformers创建矢量嵌入?

具有相同图例 colored颜色 和标签的堆叠子图

需要帮助使用Python中的Google的People API更新联系人的多个字段'

裁剪数字.nd数组引发-ValueError:无法将空图像写入JPEG

极柱内丢失类型信息""

替换包含Python DataFrame中的值的<;

在不中断格式的情况下在文件的特定部分插入XML标签

我可以同时更改多个图像吗?