我使用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"部分吗?
感谢
首先,请注意用户手册中有一个错误。正确的代码片段应该如下所示:
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的形式发送电子邮件;"多部分/替代";消息引用相关标准:
每个身体部位都是一个";可供选择的";相同版本信息
系统应认识到各个部分的内容可交换的系统应该选择";最好的";基于当地环境和偏好。。。
因此,您可以看到,当您的电子邮件阅读器只向您显示一个"text"或"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"发送,那么它在大多数现代电子邮件阅读器上都会正确呈现,但在传统电子邮件阅读器上则会胡言乱语。如果你只以"文本"发送,它在所有电子邮件阅读器上都是可读的,但不会有任何丰富的文本功能:粗体、斜体、内联图像等。