2

C#winformsアプリケーションからOutlookで特定の電子メールを開きたい。

現時点では、次のコードがあります。

//...Get Folder & Entry ID for last Email in Sent Box

Outlook.Application myApp = new Outlook.ApplicationClass();
Outlook.NameSpace mapiNameSpace = myApp.GetNamespace("MAPI");
Outlook.MAPIFolder mySentBox = mapiNameSpace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail);                
Outlook.MailItem myMail = ((Outlook.MailItem)mySentBox.Items[1]);
string guid = myMail.EntryID;
string folderEntryID = mySentBox.EntryID;
string folderStoreID = mySentBox.StoreID;
string mailAddressee = myMail.To;
MessageBox.Show(mailAddressee);

//...Attempt to Open that Email at a later date

Outlook.MAPIFolder getFolder = (Outlook.MAPIFolder)mapiNameSpace.GetFolderFromID(folderEntryID, folderStoreID);
Outlook.MailItem getItem = (Outlook.MailItem)getFolder.Items.Find("[EntryID] = " + guid);
getItem.Display();

コードの最初の2番目の部分は異なる時間に実行されますが、現時点では同じメソッドでテストされています。

最初の部分は、Outlookから最近送信された電子メールに関連するIDを取得します。この部分は、私が組み込んだメッセージボックスの証拠としてうまく機能しているようです。

ただし、2番目の部分は機能せず、最初の部分でIDとフォルダーの場所を取得した特定のmailItemにアクセスして開くための適切なコードを見つけるのに苦労しています。

私のためにこの小さなプロジェクトを完了することができる人は誰でもお願いします。

4

2 に答える 2

5

次のコード行を置き換えることによって、ついにそれを行いました。. .

Outlook.MAPIFolder getFolder = (Outlook.MAPIFolder)mapiNameSpace.GetFolderFromID(folderEntryID, folderStoreID);
Outlook.MailItem getItem = (Outlook.MailItem)getFolder.Items.Find("[EntryID] = " + guid);

これとともに 。. .

Outlook.MailItem getItem = (Outlook.MailItem)mapiNameSpace.GetItemFromID(guid, folderStoreID);
于 2012-12-18T12:01:43.233 に答える
0

EntryIdメソッドでは使用できません_Items.Find。MSDN リファレンスはこちらです。

あなたのプロジェクトにとって興味深いかもしれない発言もあります:

「エントリ ID は、たとえば、受信トレイから Microsoft Exchange Server パブリック フォルダに、または 1 つの個人用フォルダ (.pst) ファイルから別の .pst ファイルに、アイテムが別のストアに移動されると変更されます。ソリューションは、項目が移動されない場合を除き、EntryID プロパティは一意である必要があります。」

MailItem.EntryID プロパティ (Outlook) .

于 2012-12-18T11:50:54.107 に答える