2014-10-02 4 views
0

Я использую python mailgun-api, чтобы отправить электронное письмо с изображением, письмо и изображение приходят к получателю без проблем, но текст, который я отправляю в "text": "Testing some Mailgun awesomness!", нет, он выходы как основной текст "html": '<html>HTML version of the body</html>' часть.Mailgun отправляет встроенные изображения, но без текста. [Python + Mailgun-Api]

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» и удалить «текстовую» часть?

Спасибо

ответ

2

Во-первых, обратите внимание, что в руководстве пользователя есть ошибка. Правильный фрагмент кода должен выглядеть следующим образом:

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». Цитируя the relevant standard:

... каждая из частей тела, является «альтернативной» версии одного и того же информации.

Системы должны понимать, что содержание различных частей взаимозаменяемо. Системы должны выбрать «лучший» тип, основанный на местной окружающей среды и предпочтений ...

Итак, вы видите, ваш электронный читатель правильно вести себя, когда он только показывает один: либо " text 'или' html '. Чтобы убедиться, что обе формы отправляются, попробуйте просмотреть источник сообщения электронной почты. В Gmail найдите пункт меню «Показать оригинал». В Firefox попробуйте «View | Message Source» или «View | Message Body As ...».

В качестве почтового отправителя вы должны, если это вообще возможно, включать ваши сообщения как «текст» , так и «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», то он будет отображаться правильно на большинстве современных почтовых читателей, но будет тарабарщить на традиционных читателях электронной почты. Если вы отправляете его только в «тексте», он будет читабельным для всех читателей электронной почты, но не будет иметь никаких богатых текстовых функций: жирные, курсивные, встроенные изображения и т. Д.

+0

Rob спасибо вам большое за анализ I узнал что-то от вас, я ценю это, я видел источник своей электронной почты, и вы правы, что это действительно. –

+0

Большое спасибо. –