Mailgun изпраща вградени изображения, но не и текст. [Python+Mailgun-Api]

Използвам python mailgun-api за изпращане имейл с изображение, имейлът и изображението пристигат до получателя без проблеми, но текстът, който изпращам в "text": "Testing some Mailgun awesomness!", не го прави, той извежда като основен текст частта "html": '<html>HTML version of the body</html>'.

data={"from": "Excited User <[email protected]>",
      "to": "[email protected]",
      "subject": "Hello",
      "text": "Testing some Mailgun awesomness!",
      "html": '<html>Inline image here: <img src="cid:test.jpg"></html>'})

Как мога да поправя това?, разбира се, ако добавя в html реда текста, който искам, изглежда добре, но не знам дали това е правилният начин да го направя. Трябва ли да използвам като основен текст частта "html" и да премахна частта "текст"?

Благодаря ти


person Nick Zagoris    schedule 02.10.2014    source източник


Отговори (1)


Първо имайте предвид, че Ръководството на потребителя има грешка. Правилният кодов фрагмент трябва да изглежда така:

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": "[email protected]",
              "to": ["[email protected]"],
              "subject": "Hello",
              "text": "Testing some Mailgun awesomness!",
              "html": '<html>Inline image here: <img src="cid:image"></html>'})

Параметърът files трябва да бъде dict, а не list, а стойността в dict трябва да бъде кортеж, който включва името на файла. След това използвате това име на файл като стойност cid: във вашия HTML.

Що се отнася до вашия въпрос, трябва да разберете, че Mailgun изпраща имейл съобщенията като MIME „multipart/alternative“ съобщение. Цитирайки от съответния стандарт:

... всяка от частите на тялото е "алтернативна" версия на същата информация.

Системите трябва да разпознават, че съдържанието на различните части е взаимозаменяемо. Системите трябва да изберат "най-добрия" тип въз основа на местната среда и предпочитания ...

Така че виждате, вашият имейл четец се държи правилно, когато ви показва само едно от „текст“ или „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>'''

Виждате ли как, без значение коя версия вижда потребителят, той ще получи същото значение, ограничено само от средата, в която гледа съобщението?

Като алтернатива, ако изберете да не изпращате едно и също съобщение и в „текст“, и в „html“, можете да го изпратите само в едното или другото. Ако го изпратите само в „html“, тогава той ще бъде изобразен правилно на повечето съвременни четци на имейл, но ще бъде безсмислен на традиционните четци на имейл. Ако го изпратите само като „текст“, той ще може да се чете от всички четци на имейли, но няма да има функции за обогатен текст: получер, курсив, вградени изображения и т.н.

person Robᵩ    schedule 02.10.2014
comment
Роб, много ти благодаря за анализа. Научих нещо от теб, оценявам го, видях източника на моя имейл и ти си прав, че пристига. - person Nick Zagoris; 03.10.2014