Mailgun отправляет встроенные изображения, но не текст. [Python+Mailgun-Апи]

Я использую 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