2012-09-20 15 views
6

Outlookからアイテムを送信するときに何らかの処理を行うには、ApplicationEvents_11_ItemSendEventHandlerhttp://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook.applicationevents_11_itemsendeventhandler.aspxを参照)を使用しています。Outlookの「アイテム送信済み」イベント

しかし、私は、このような送信者として、特定の情報を取得できませんよ、むしろ「送信さ」よりも、「送信」でこのイベントが発生すると、代替イベントことがあり、時間など

を送っ火災の後にアイテムが実際に送信されましたか?私はこのブログ記事を読んだ。 http://easyvsto.wordpress.com/2010/07/27/how-to-save-mail-content-when-a-mail-is-sent-from-outlook/ですが、ユーザーがこの機能を無効にできることを考慮して、送信済みアイテムフォルダに表示されるアイテムには注意が払われています。

編集:私は私が実際に「送信済みアイテムフォルダを見る」アプローチを試みているとItemAddイベントが唯一の私は、Outlookを再起動するまで、その後はない、再び、私が送っ最初の電子メールのために解雇するらしいことに気づいたことを追加する必要があります。私のコードは以下の通りです。

var sentMail = Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail); 
sentMail.Items.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(Items_ItemAdd); 

そして、私の方法...

void Items_ItemAdd(object item) 
{ 
    MessageBox.Show(((Outlook.MailItem)item).Subject); 
} 
+0

あなたがアイテムを保持する必要があります(クラス変数で)生きているオブジェクトイベントが発生するために。あなたの場合、コンパイラは、sentMail.Itemsオブジェクトを保持するための一時変数を作成します。その変数がガベージコレクトされると、イベントは起動を停止します。 –

答えて

4

あなたがモーダルダイアログ(WPF/WinformsのMessageBox)を使用する場合は、最初のイベントトリガーを取得します。 ノンブロッキングイベントハンドラ、おそらくアイテムキューイングストラテジ)を実装する必要があります。

ブロッキングUIコールモーダルダイアログを使用しないでください - OutlookはUIがブロックされていることを認識し、後続の割り込みをトリガーするのを無視します。

this form post for referenceを参照してください。


あなたが送信済みアイテムストレージを制御するためのユーザの嗜好を心配している場合は、単に次のスニペットを使用してそれらを無効に...

MailItem.DeleteAfterSubmit = false; // force storage to sent items folder (ignore user options) 
Outlook.Folder sentFolder = ThisAddIn.Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail); 
if (sentFolder != null) 
    MailItem.SaveSentMessageFolder = sentFolder; // override the default sent items location 
MailItem.Save(); 
+0

@ SilverNinja - あなたの答えをありがとう、フォーラムポストはItemAddイベントに関するいくつかの非常に有益な情報を持っています。乾杯。 –

関連する問題