Mailgun发送内联图像,但不发送文本.[Python+Mailgun Api]



我使用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"发送,那么它在大多数现代电子邮件阅读器上都会正确呈现,但在传统电子邮件阅读器上则会胡言乱语。如果你只以"文本"发送,它在所有电子邮件阅读器上都是可读的,但不会有任何丰富的文本功能:粗体、斜体、内联图像等。

相关内容

  • 没有找到相关文章

最新更新