2013-07-25 2 views
1

У меня есть скрипт python, который отправляет многостраничное электронное письмо с вложениями text, html и ics. Идея заключается в том, что современный почтовый клиент отобразит часть HTML и предложит добавить событие в календарь пользователя.Отправка на Exchange: как отключить отключение Lossy Преобразование HTML в RTF?

код выглядит следующим образом:

import smtplib 
from email.mime.multipart import MIMEMultipart 
from email.mime.text import MIMEText 
from icalendar import Calendar, Event, UTC, vText, vCalAddress 
# ... set up calendar invite, render text and html templates ... 
msg = MIMEMultipart('alternative') 
msg_text = MIMEText(body_text, 'plain', 'utf-8') 
msg_html = MIMEText(body_html, 'html', 'utf-8') 
meeting = MIMEText(cal.as_string(), 'calendar;method=REQUEST', 'utf-8') 
meeting.set_param('method', 'REQUEST') 
meeting.set_param('name', 'meeting.ics') 
meeting.add_header('Content-class', 'urn:content-classes:calendarmessage') 
# ... set up various message attributes: to/from/subject ... 
msg.add_header('Content-class', 'urn:content-classes:calendarmessage') 
msg.attach(msg_text) 
msg.attach(msg_html) 
msg.attach(meeting) 
s = smtplib.SMTP(smtp_server) 
s.sendmail(sender, send_to, msg.as_string()) 

Это работает: я получаю сообщение, оно отображается в виде HTML, и я легко могу добавить событие в свой календарь в Outlook, и Mac Mail. Однако HTML не работает. Вот предательский в HTML:

<meta name="Generator" content="Microsoft Exchange Server"> 
<!-- converted from rtf --> 

Вот что я знаю, до сих пор:

  • Если я бросаю календаря вложения, HTML, делает это через без преобразования.
  • Я могу получить приглашение только на календарь, если я приложу его к последнему сообщению.

Итак, что-то о том, что приглашение к календарю приглашено, приводит к тому, что Exchange испортит мое сообщение в формате HTML. Может быть, есть заголовок, который я могу добавить в сообщение или HTML, чтобы спросить Microsoft, пожалуйста, не конвертируйте мой HTML в RTF?

ответ

1

Outlook работает только с RTF, когда речь заходит о встречах, задачах и контактах. Если приглашение на собрание поставляется с телом HTML, оно преобразуется в RTF.

UPDATE: с Outlook 2016 это уже не так: Outlook теперь изначально поддерживает HTML для встреч и задач. HTML хранится в PR_HTML (или RTF-wrapped HTML в PR_RTF_COMPRERSSED), и вы можете указать формат, как и обычные сообщения электронной почты. К сожалению, он пока не отображается на уровне объектной модели Outlook, пока нет свойства AppointmentItem.HTMLBody.

+0

У вас есть ссылка на это? Хотите узнать больше об этом, но не можете найти его в сети. – pkrish

+0

См. Обновление выше. –

+0

Спасибо. Проблема, с которой я столкнулся, заключается в том, что обменный сервер заменяет мой html своим собственным, с этим комментарием . Любая идея, как предотвратить это, не мешая настройкам сервера Exchange. – pkrish