我使用python mailgun-api发送带有图像的电子邮件,电子邮件和图像到达收件人时没有问题,但是我在"text": "Testing some Mailgun awesomness!"中发送的文本没有问题,它输出为正文文本-- "html": '<html>HTML version of the body</html>'部分。
data={"from": "Excited User <example@mailgun.com>",
"to": "test@example.com",
"subject": "Hello",
"text": "Testing some Mailgun awesomness!",
"html": '<html>Inline image here: <img src="cid:test.jpg"></html>'})我如何解决这个问题?当然,如果我在html行中添加了我想要的文本,它看起来没问题,但我不知道这是否是正确的方法。我应该使用"html“部分作为正文文本并删除" text”部分吗?
谢谢
发布于 2014-10-02 23:12:47
首先,注意用户手册有一个错误。正确的代码片段应该如下所示:
def send_simple_message():
return requests.post(
"https://api.mailgun.net/v2/YOUR-DOMAIN/messages",
auth=("api", "YOUR-KEY"),
files={"inline":("image", open("/tmp/image.jpg"))},
data={"from": "rob@example.com",
"to": ["rob@example.com"],
"subject": "Hello",
"text": "Testing some Mailgun awesomness!",
"html": '<html>Inline image here: <img src="cid:image"></html>'})files参数必须是dict,而不是list,dict中的值必须是包含文件名的元组。然后在HTML中使用该文件名作为cid:值。
至于你的问题,你需要理解的是,Mailgun将电子邮件作为MIME的“多部分/替代”消息发送。引用相关标准
..。每个身体部分都是相同信息的“替代”版本。系统应该认识到各个部分的内容是可以互换的。系统应该根据本地环境和偏好选择“最佳”类型。
所以你看,你的电子邮件阅读器的行为是正确的,当它只给你一个‘’或'html‘。要向自己证明这两种形式都在发送,请尝试查看电子邮件消息的来源。在Gmail中,查找“显示原始”菜单项。在Firefox中,尝试“查看消息源”或“查看消息体为.”。
作为一个邮件发件人,如果有可能的话,你应该把你的邮件同时包含为'text‘和 'html',具有同等的含义。如下所示:
text='''Our sale prices are VERY LOW this weekend.
Visit http://sales.example.com.''',
html='''<html>
<img src="cid:logo.jpg"/>
Our sale prices are <b>very low</b> this weekend.
Visit <a href="http://sales.example.com">our website!</a>
</html>'''您看到了吗,不管用户看到了哪个版本,他都会得到相同的含义,仅受他查看消息的媒介的限制吗?
另外,如果您选择不以“text”和“html”发送相同的消息,则只能在其中一种或另一种中发送。如果你只发送'html',那么它将正确地呈现在大多数现代电子邮件阅读器,但将是胡说八道的传统电子邮件阅读器。如果你只发送“文本”,它将在所有电子邮件阅读器上可读,但不会有任何丰富的文本功能:粗体,斜体,内联图像,等等。
https://stackoverflow.com/questions/26165999
复制相似问题