Outlook のメールを MHTML (MHT) 形式で保存する必要があります。EntryID で 1 つの電子メールを検索し、それを 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);
//...
}
}