Python 发送到Exchange:如何禁用HTML到RTF的有损转换?
我有一个python脚本,它发送一封包含文本、html和ics附件的多部分电子邮件。其想法是,现代电子邮件客户端将呈现HTML部分,并提供将事件添加到用户的日历中 代码如下所示: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
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有关。