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