发送到Exchange:如何禁用HTML到RTF的禁用有损转换?

时间:2013-07-25 23:45:36

标签: python exchange-server mime rtf icalendar

我有一个python脚本,它发送带有text,html和ic附件的多部分电子邮件。我们的想法是,现代电子邮件客户端将呈现HTML部分并提供将事件添加到用户的日历中。

代码如下:

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中,要求微软好好请不要将我的HTML转换为RTF?

1 个答案:

答案 0 :(得分:1)

Outlook在约会,任务和联系人方面仅适用于RTF。如果会议邀请附带HTML正文,则会转换为RTF。

更新:从Outlook 2016开始,情况不再如此:Outlook现在本身支持约会和任务的HTML。 HTML存储在PR_HTML(或PR_RTF_COMPRERSSED中的RTF包装的HTML)中,您可以像使用常规电子邮件一样指定格式。不幸的是,它仍未在Outlook对象模型级别上公开 - 还没有AppointmentItem.HTMLBody属性。