2016-10-11 15 views
0

で受信メールを処理していますが、停止することがあり、その理由を調べようとしています。Items_ItemAddプロシージャで処理されなかったメールを処理しています

一方で、私は受信トレイの上で、再び受信トレイにそれらを再送信する必要がなくてItems_ItemAdd手順で処理されなかったメールを処理できる方法を知っていただきたいと思います。

+0

私は同じ問題を抱えています。処理する電子メールを1つのフォルダに移動するルールを持つ2つのサブフォルダを作成しました。コードが実行されない場合は(私はいつもそうしているようです)、私は手動で2番目のフォルダにメールを移動して、もう一度やり直してから実行します。その後、受信トレイからそれらを選ぶ必要はありません。 :) –

答えて

0

"このイベントは、多数のアイテムが同時にフォルダに追加されたときには実行されません。 https://msdn.microsoft.com/en-us/library/office/ff869609.aspx

Sub ProcessUnprocessed 
' Counting backwards in case items are moved or deleted in ItemAdd code 
' Count backwards always. Never use For Each (Notes to self.) 
For i = ActiveExplorer.Selection.count to 1 step -1 

    watchedFolderItems_ItemAdd(ByVal ActiveExplorer.Selection(i) As Object) 

Next 
End Sub 
+0

ルールを使用してフォルダに移動したときに数秒で100以上の電子メールを処理するためにコードを使用したが、手動で移動しない限り動作を停止することにした。 –

0

Items.ItemAdd、ちょうどすべてのMAPIベースのイベントのように、それはメッセージ処理のいずれかの種類のために使用すべきではありません、UIの目的のために設計されました。

あなたのイベントハンドラができるだけ少ないことを確認してください。理想的なのは、新しい項目のエントリIDをリストに追加してすぐにイベントハンドラを終了することです。メッセージリストは別々に処理することができます。 OOMはOutlookアドレス空間内のセカンダリスレッドでは使用できません。そのためにはExtended MAPI(C++またはDelphi)またはRedemption(任意の言語のRDOオブジェクトファミリをセカンダリスレッドで使用できます)が必要です。

また、あまりにも多く(プロバイダに対しては「あまりにも多く」の定義)の通知があると、TABLE_CHANGEDまたはTABLE_RELOAD MAPI通知が発行されます。 Outlookオブジェクトモデルは、その通知を静かに逃します。 Redemptionがオプションである場合、RDOItems .CollectionModifiedイベントが公開されます。

Exchangeメールボックスの場合、ICS(Incremental Change Synchronization)APIを使用することもできます。これは、Outlook自体がOSTファイルフォルダをリモートメールボックスと同期させるために使用するAPIです。 APIは拡張MAPIなので、C++またはDelphiを使用する必要があります。 Redemptionは、そのAPIをRDOFolderSynchronizerオブジェクトを通じて公開します。

関連する問題