首先,请注意用户手册有一个错误。正确的代码片段应如下所示:
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
参数必须是 a ,而dict
不是 a list
,并且 中的值dict
必须是包含文件名的元组。然后,您使用该文件名作为cid:
HTML 中的值。
至于您的问题,您需要了解 Mailgun 将电子邮件消息作为 MIME“多部分/替代”消息发送。引用相关标准:
...每个身体部位都是相同信息的“替代”版本。
系统应该认识到各个部分的内容是可以互换的。系统应根据当地环境和偏好选择“最佳”类型...
所以你看,当你的电子邮件阅读器只向你显示“文本”或“html”之一时,它的行为是正确的。要向自己证明两种表格都已发送,请尝试查看电子邮件消息的来源。在 Gmail 中,查找“显示原件”菜单项。在 Firefox 中,尝试“查看 | 消息源”或“查看 | 消息正文为 ...”。
作为邮件发件人,如果可能的话,您应该将您的邮件同时包含为“文本”和“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”形式发送它,那么它将在大多数现代电子邮件阅读器上正确呈现,但在传统电子邮件阅读器上会出现乱码。如果您仅以“文本”形式发送,它将在所有电子邮件阅读器上可读,但不会有任何富文本功能:粗体、斜体、内嵌图像等。