2013-07-25 54 views
1

我有一個python腳本,用於發送帶有文本,html和ics附件的多部分電子郵件。這個想法是,一個現代的電子郵件客戶端將呈現HTML部分,並提供將事件添加到用戶的日曆。發送到Exchange:如何禁用禁用HTML到RTF有損轉換?

代碼如下所示:

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郵件日曆。但是,HTML被破壞了。下面是在HTML中揭祕:

<meta name="Generator" content="Microsoft Exchange Server"> 
<!-- converted from rtf --> 

以下是我目前所知:

  • 如果我把日曆附件,HTML使它通過,無需轉換。
  • 如果我最後附加到郵件,我只能獲得日曆邀請。

所以,有關日曆邀請附件的事情導致Exchange搞亂我的HTML郵件。是否有可以添加到郵件或HTML的標題,讓Microsoft向美麗請勿將我的HTML轉換爲RTF?

回答

1

Outlook僅適用於約會,任務和聯繫人的RTF。如果會議邀請附帶HTML正文,則會將其轉換爲RTF。

更新:從Outlook 2016開始,這不再是這種情況:Outlook現在本身支持約會和任務的HTML。 HTML存儲在PR_HTML(或RTF包裝的HTML中的PR_RTF_COMPRERSSED)中,您可以像使用常規電子郵件一樣指定格式。它仍然沒有公開在Outlook對象模型級別 - 不存在AppointmentItem.HTMLBody屬性。

+0

你有這個引用嗎?想要閱讀更多關於此的信息,但無法在網上找到它。 – pkrish

+0

請參閱上面的更新。 –

+0

謝謝。我遇到的問題是交換服務器正在用自己的html替換掉我的html,這個註釋 <! - 從rtf - >轉換。任何想法如何防止這種干擾交換服務器設置。 – pkrish