我需要将 Outlook 电子邮件保存为 MHTML (MHT) 格式。我有一个测试应用程序,它通过 EntryID 找到一封电子邮件并将其成功保存为 MHT 格式。
我的目标是指定显示发送时间的时区。默认情况下,Outlook 对象模型使用写入 MHT 的计算机上的时区将时间写入 MHT 文件。我想指定一个任意时区和夏令时遵守。
我正在使用 Outlook 2010、Windows XP SP2、Visual Studio 2008 Professional。
我不希望更改处理计算机上的时间,以避免计算机上可能同时发生的其他事情可能出现问题。但是,我可能不得不走那条路。
我曾希望更改 Application 对象的时区,但该属性Application.TimeZones.CurrentTimeZone
是只读的。我还没有找到 Set() 方法。尝试分配给会CurrentTimeZone
导致此错误:Property or indexer 'Microsoft.Office.Interop.Outlook._TimeZones.CurrentTimeZone' cannot be assigned to -- it is read only
//strPst = @"D:\aaa.pst";
//strEntryId = "0000000007840E169496284E947388623A8A9F48C4012000";
//Prepare Session
Microsoft.Office.Interop.Outlook.Application objApplication = new Microsoft.Office.Interop.Outlook.Application();
Microsoft.Office.Interop.Outlook._NameSpace objNameSpace = null;
objNameSpace = objApplication.GetNamespace("MAPI");
objNameSpace.Logon(null, null, false, false);
objApplication.Session.AddStore(strPst);
//Get PST ID
string strPstId = "";
foreach (Store store in objNameSpace.Stores)
{
if (store.FilePath == strPst)
{
strPstId = store.StoreID;
}
}
try
{
//Get item
object xi = objNameSpace.GetItemFromID(strEntryId, strPstId);
//Get item as MailItem
MailItem mi = objNameSpace.GetItemFromID(strEntryId, strPstId) as MailItem;
if (mi != null)
{
//mi.Display(null);
//Get time zone UTC-1200
Microsoft.Office.Interop.Outlook.TimeZones tzs = objApplication.TimeZones;
Microsoft.Office.Interop.Outlook.TimeZone tz = tzs[1];
//Console.WriteLine(tz.Name);
//Set time zone
objApplication.TimeZones.CurrentTimeZone = tz;
//Save As MHT
mi.SaveAs(@"D:\test.mht", OlSaveAsType.olMHTML);
//...
}
}