1

我有一个 python 脚本,它发送带有文本、html 和 ics 附件的多部分电子邮件。这个想法是现代电子邮件客户端将呈现 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 的标题以要求 Microsoft 漂亮请不要将我的 HTML 转换为 RTF?

4

1 回答 1

1

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

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

于 2013-07-25T23:59:59.370 回答