我正在使用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”部分作为正文文本并删除“文本”部分吗?
谢谢
答案 0 :(得分:4)
首先,请注意用户手册有一个错误。正确的代码段应如下所示:
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&#34; multipart / alternative&#34;信息。引自the relevant standard:
......每个身体部位都是&#34;替代&#34;版本相同 信息。
系统应该认识到各个部分的内容是 互换。系统应该选择最好的&#34;基于的类型 当地环境和偏好......
所以你看,你的电子邮件阅读器只显示一个的文字&#39;或者&#39; html&#39;。要向自己证明两个表单都已发送,请尝试查看电子邮件的来源。在Gmail中,查找&#34;显示原始文件&#34;菜单项。在Firefox中,尝试&#34;查看|消息来源&#34;或&#34;查看|消息正文为...&#34;。
作为邮件发件人,如果可能的话,您应该将您的邮件包含为“&text;&#39; 和&#39; html&#39;,具有相同的含义。像这样:
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>'''
您是否看到,无论用户看到哪个版本,他都会得到相同的含义,仅限于他查看消息的媒介?
另一方面,如果您选择不在两个文本中发送相同的消息&#39;和&#39; html&#39;,您只能在其中一个或另一个中发送。如果您只是在&#39; html&#39;中发送它,那么它将在大多数现代电子邮件阅读器上正确呈现,但在传统的电子邮件阅读器上将是乱码。如果您发送文字&#39;只有,它可以在所有电子邮件阅读器上阅读,但不会有任何富文本功能:粗体,斜体,内联图像等。