Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Outlook对象模型另存为MHT设置时区_C#_Outlook_Timezone_Outlook 2010_Outlook Object Model - Fatal编程技术网

C# Outlook对象模型另存为MHT设置时区

C# Outlook对象模型另存为MHT设置时区,c#,outlook,timezone,outlook-2010,outlook-object-model,C#,Outlook,Timezone,Outlook 2010,Outlook Object Model,我需要将Outlook电子邮件保存为MHTML(MHT)格式。我有一个测试应用程序,它通过EntryID查找一封电子邮件,并成功地将其保存为MHT格式 我的目标是指定显示发送时间的时区。默认情况下,Outlook对象模型使用写入MHT的计算机上的时区将时间写入MHT文件。我想指定一个任意时区和夏令时 我正在使用Outlook 2010、Windows XP SP2、Visual Studio 2008 Professional 我宁愿不更改处理计算机上的时间,以避免计算机上可能同时发生的其他问题

我需要将Outlook电子邮件保存为MHTML(MHT)格式。我有一个测试应用程序,它通过EntryID查找一封电子邮件,并成功地将其保存为MHT格式

我的目标是指定显示发送时间的时区。默认情况下,Outlook对象模型使用写入MHT的计算机上的时区将时间写入MHT文件。我想指定一个任意时区和夏令时

我正在使用Outlook 2010、Windows XP SP2、Visual Studio 2008 Professional

我宁愿不更改处理计算机上的时间,以避免计算机上可能同时发生的其他问题。然而,我可能不得不走这条路

我本来希望更改应用程序对象的时区,但是属性
Application.TimeZones.CurrentTimeZone
是只读的。我没有找到Set()方法。试图分配给
CurrentTimeZone
会导致以下错误:
属性或索引器“Microsoft.Office.Interop.Outlook.\u TimeZones.CurrentTimeZone”无法分配给它--它是只读的

//strPst=@“D:\aaa.pst”;
//strEntryId=“000000000 7840E169496284E947388623A8A9F48C4012000”;
//准备会议
Microsoft.Office.Interop.Outlook.Application objApplication=新的Microsoft.Office.Interop.Outlook.Application();
Microsoft.Office.Interop.Outlook.\u命名空间objNameSpace=null;
objNameSpace=objApplication.GetNamespace(“MAPI”);
Logon(null,null,false,false);
objApplication.Session.AddStore(strPst);
//获取PST ID
字符串strPstId=“”;
foreach(存储在objNameSpace.Stores中)
{
if(store.FilePath==strPst)
{
strPstId=store.StoreID;
}
}
尝试
{
//获取项目
对象席= ObjNeSePix.GetItemFromID(StruthyID,StrupSID);
//将项目作为邮件项目获取
mailitemi=objNameSpace.GetItemFromID(strEntryId,strPstId)作为MailItem;
如果(mi!=null)
{ 
//mi.显示(空);
//获取时区UTC-1200
Microsoft.Office.Interop.Outlook.TimeZones tzs=objApplication.TimeZones;
Microsoft.Office.Interop.Outlook.TimeZone tz=tzs[1];
//控制台写入线(tz.名称);
//设定时区
objApplication.TimeZones.CurrentTimeZone=tz;
//另存为MHT
mi.SaveAs(@“D:\test.mht”,OlSaveAsType.olMHTML);
//...
}
}

我一直在翻阅参考资料,我认为这是不可能的。这些值存储在UTC中,但在检索时会转换为计算机的本地时区。您必须通过编程更改计算机的时区,然后在完成后将其更改回原来的时区。这会产生严重的副作用,我相信这需要更高的权限。之后,您最好自己解析和重写MHT。