7

Outlookからアイテムが送信されるときに、処理を行うために使用していますApplicationEvents_11_ItemSendEventHandlerhttp://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook.applicationevents_11_itemsendeventhandler.aspxを参照)。

ただし、このイベントは「送信済み」ではなく「送信」で発生するため、送信者、送信時間などの特定の情報を取得できません。

アイテムが実際に送信されたに発生する代替イベントはありますか?このブログ投稿を読みました。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);
}
4

1 に答える 1

6

モーダルダイアログ(WPF / WinformsMessageBox)を使用する場合は、最初のイベントトリガーのみを取得します。非ブロッキングイベントハンドラー場合によってはアイテムキューイング戦略)を実装する必要があります。

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

参照用にこのフォームの投稿を参照してください


送信済みアイテムのストレージを制御するためのユーザー設定が心配な場合は、次のスニペットを使用してそれらをオーバーライドするだけです...

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(); 
于 2012-09-20T17:15:55.310 に答える