使用 C# 寄出紅色主旨 Outlook 郵件
| | 0 | |
收到冷門需求。
公司人資會寄一種很炫的通知信,在收信匣萬黑叢中一點紅,十分顯眼。業務單位看到了,舉手說他們也要,希望某系統的重要通知信也能比照變成紅色主旨並跳出提醒,力求從茫茫信海脫穎而出:(如下圖所示)
紅色主旨之前看過,但從沒去想是怎麼辦到的。研究後發現是個 Outlook 小技巧 - 寄信時為信件指定到期日,並且是過去的時間,例如: 14:00 寄出 13:00 到期的信件,則郵件在 Outlook 收信匣的寄信人與主旨便會以紅色呈現。參考:How To Send An Email With Subject Line In Red Color In Outlook?。
這個用 Outlook 手工操作很簡單,但查了半天找不到現成範例,花了點工夫才研究出如何用 C# 實現相同效果。
要動用 Exchange/Outlook 專屬功能,不能透過 SMTP 寄信,需改用 EWS (Exchange Web Service) 程式庫,EWS 可透過 NuGet 安裝:
程式範例如下:
class Program
{
private static string ewsUrl = "https://your-exchange-server/ews/Exchange.asmx";
static ExtendedPropertyDefinition PidTagFlagStatus =
new ExtendedPropertyDefinition(0x1090, MapiPropertyType.Integer);
static ExtendedPropertyDefinition PidTagToDoItemFlags =
new ExtendedPropertyDefinition(0x0E2B, MapiPropertyType.Integer);
static ExtendedPropertyDefinition PidLidTaskDueDate = new ExtendedPropertyDefinition(
DefaultExtendedPropertySet.Task, 0x8105, MapiPropertyType.SystemTime);
static void Main(string[] args)
{
var ews = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
//使用指定身分登入,密碼如需存於設定檔,需加密
//ews.Credentials = new WebCredentials("userid", "passwd", "domain");
ews.UseDefaultCredentials = true; //用目前執行程式的AD帳號登入EWS
ews.Url = new Uri(ewsUrl);
var msg = new EmailMessage(ews);
msg.ToRecipients.Add("user@mail.com");
msg.Subject = $"Outlook 郵件醒目標示測試(紅色標題+提醒視窗) {DateTime.Now:HHmmss}";
msg.Body = new MessageBody(BodyType.HTML, "<p style='color:blue'>Hello, world!</p>");
msg.IsReminderSet = true;
msg.Importance = Importance.High;
msg.SetExtendedProperty(PidTagFlagStatus, 2);
msg.SetExtendedProperty(PidLidTaskDueDate, DateTime.Now.AddDays(-1));
msg.SetExtendedProperty(PidTagToDoItemFlags, 1);
msg.Send();
}
}
程式看來很簡單,但沒找到現成的 C# 範例,只好由相關文件逐步縮小關鍵字範圍,費了點工夫總算拼湊出可用版本。最奧妙部分莫過 0x1090、0x0E2B、0x8105 等像咒語的參數。 它們是 Exchange 郵件的延伸屬性,我找到一份完整 PDF 文件:Exchange Server Protocols Master Property List ,本需求動用到以下三個:
- PidTagFlagStatus:1-Flagged Complete, 2-Flagged 參考
- PidTagToDoItemFlags:1-TimeFlagged, 8-RecipientFlagged 參考
- PidLidTaskDueDate:到期日 參考
學會一些 EWS 進階技巧,打完一個跨界小副本,收工。
Sample code of sending a email with red subject to Outlook. The effect is achieved by EWS and Exchange extended property.
Comments
Be the first to post a comment