2016-10-06 4 views
0

Outlook 2013のアドインにItemSendイベントハンドラがあり、正しく動作させることができません。それは何送信アイテムフォルダにMailItemsが作成され、Outlook 2013の作成モードで表示されるのはなぜですか?

は次のとおりです。

  1. ループすべての受信者(に、CC、BCC)と受信者としてだけで電子メールをそれぞれに別々のコピーを作成し、それらを送信します。送信済みメールフォルダから削除します。これは正常に動作します。

  2. オリジナルのto、ccおよびbcc情報を持つもう1つのコピーを作成します。保存は送信トレイに格納されるため、移動メソッドを使用して[送信済みアイテム]フォルダに移動します。それは実際には送信されてはいけません。通常のように送信されるはずです。

  3. キャンセルをtrueに設定し、インスペクタウィンドウを破棄して閉じるので、元のメッセージも送信されません。これも機能します。

問題は保存されたコピーです。私がそれを開くと、それは作成モードにあります。基本的にはドラフトと同じです。私はそれが読まれたモードで送られてきたのを見たいと思う。

私はSent-propertyがどのモードを表示するかを決定しますが、SentOnはnullであり、モードが正しい場合でも問題になりますので、そのプロパティは読み取り専用です。これを回避する方法はありますか?

実際に送信された他のメールの1つを[送信済みアイテム]フォルダから取り出し、内容を編集して保存しようとしました。しかし、これは同じ挙動をもたらす。また、MailItemにはSent = FalseとSentOn = nullがあります。

私たちがまだEventHandlerを実行していて、実際にOutlookが別のスレッドでそれを送信しているとは思わないので、Send-が呼び出されてもまだ実際に送信されていない可能性があります。

とにかくこれは動作する回避策ではないようです。

この種の機能を実装する方法はありますか?

答えて

0

低レベル(拡張MAPI)レベルでは、MSGFLAG_UNSENTビットは、項目が初めて保存される(MAPIの制限)前にのみ、PR_MESSAGE_FLAGSプロパティから削除できます。

送信された状態で作成された唯一のOOMアイテムは、投稿アイテムです。投稿アイテムを作成し、MessageClassプロパティをIPM.Noteに変更して保存し、アイテムのエントリIDを覚えて、Marshal.ReleaseComObject(.Netの場合)を使用して投稿アイテムを解放してからNamespace.GetItemfromIdを使用して再度開く - 送信されたメッセージにMailItemオブジェクトがあります状態。 PR_ICON_INDEXプロパティを更新/削除して、アイコンが正しいことを確認する必要があります。

Redemptionを使用するオプションである場合、それはSent性(それが保存される前に)ならびにSentOn/ReceivedTime/Sender/SentOnBehalfOfプロパティを設定することを可能にします。私の頭の上オフ

RDOSession rdoSession = new RDOSession(); 
rdoSession.MAPIOBJECT = Globals.ThisAddIn.Application.Session.MAPIOBJECT; 
RDOFolder rdoFolder = rdoSession.GetDefaultFolder(rdoDefaultFolders.olFolderSentMail); 
RDOMail rdoItem = rdoInbox.Items.Add("IPM.Note"); 
rdoItem.Sent = true; 
rdoItem.Recipients.AddEx("Joe The User", "[email protected]", "SMTP"); 
rdoItem.Subject = "test"; 
rdoItem.Body = "test body"; 
rdoItem.UnRead = false; 
rdoItem.SentOn = rdoItem.ReceivedTime = new DateTime(2016, 10, 6, 8, 44, 0); 
rdoItem.Sender = rdoItem.SentOnBehalfOf = rdoSession.CurrentUser; 
rdoItem.Save(); 
+0

おかげで、私はそのPostItemのトリックを使用し、それが働きました。 – SamiR

+0

もう一度これに関する質問があります。 メールアイテムを作るために投稿アイテムを作成して保存します。次に、すべてのフィールド、件名、本文、などを更新します。 しかし、私はどのように受信者コレクションを再構築できますか? .Add(受信者の受信者)メソッドはありません.Add(文字列名) 同じ – SamiR

+0

オブジェクトの種類を追加します。私は名前を付けて追加するか、 "To"と "CC"フィールドに追加することができますが、それは受信者オブジェクトの種類が異なり、後でExchangeアドレスで問題を引き起こします。 、ou = Etc .... "アドレスのタイプ。 – SamiR

関連する問題