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

Python 发送到Exchange:如何禁用HTML到RTF的有损转换?,python,exchange-server,mime,rtf,icalendar,Python,Exchange Server,Mime,Rtf,Icalendar,我有一个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, vCalAddres

我有一个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?

Outlook仅在涉及约会、任务和联系人时使用RTF。如果会议邀请带有HTML正文,则会转换为RTF


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

Outlook仅在涉及约会、任务和联系人时使用RTF。如果会议邀请带有HTML正文,则会转换为RTF


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

您对此有引用吗?想了解更多信息,但在网上找不到。谢谢。我遇到的问题是,exchange server正在用自己的html替换我的html,并使用此注释。您知道如何在不干扰exchange服务器设置的情况下防止这种情况发生吗?请尝试使用PropertyAccessor.SetProperty显式设置PR_HTML属性。我正在使用javamail创建和发送邮件。javamail中是否有类似的东西可以做到这一点?您是否可以在javamail中发送MIME格式的消息?请发布一个新问题,这个问题是Outlook特有的。你对此有引用吗?想了解更多信息,但在网上找不到。谢谢。我遇到的问题是,exchange server正在用自己的html替换我的html,并使用此注释。您知道如何在不干扰exchange服务器设置的情况下防止这种情况发生吗?请尝试使用PropertyAccessor.SetProperty显式设置PR_HTML属性。我正在使用javamail创建和发送邮件。javamail中是否有类似的东西可以做到这一点?您是否可以在javamail中发送MIME格式的消息?请发布新问题,此问题与Outlook有关。