Mailgun发送内嵌图像但没有文本。 [Python的+ Mailgun-API]

时间:2014-10-02 17:14:19

标签: python email mailgun inline-images

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

谢谢

1 个答案:

答案 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,而不是listdict中的值必须是包含文件名的元组。然后,您可以将该文件名用作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;只有,它可以在所有电子邮件阅读器上阅读,但不会有任何富文本功能:粗体,斜体,内联图像等。