1

我正在使用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”部分用作正文并删除“文本”部分吗?

谢谢

4

1 回答 1

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参数必须是 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”形式发送它,那么它将在大多数现代电子邮件阅读器上正确呈现,但在传统电子邮件阅读器上会出现乱码。如果您仅以“文本”形式发送,它将在所有电子邮件阅读器上可读,但不会有任何富文本功能:粗体、斜体、内嵌图像等。

于 2014-10-02T23:12:47.917 回答