2016-04-10 31 views
0

私の見通しのアドインについては、ユニークなハッシュを計算し、このハッシュをサーバー/データベースに格納する必要があります。たとえば:メールを送信した後にメッセージIDを取得する

ケース1:

ユーザー1User2のユーザー3にメールを送信します。 User2はメールハッシュサーバサイドを保存したいので、addinボタンをクリックします。ハッシュは次のようなコードで計算されます

var accessor = mailItem.PropertyAccessor; 
var subject = accessor.GetProperty(_PR_SUBJECT_W_TAG).ToString(); 
var messageId = accessor.GetProperty(_PR_INTERNET_MESSAGE_ID_W_TAG).ToString(); 
var hash = CalulateHash(subject + messageId); 

このハッシュはサーバーに保存されています。 User3がメールのハッシュも保存しようとすると、彼は同じハッシュを取得します(件名とメッセージIDが同じである必要があります==>rfc822)、サーバーは知っています。これは非常にうまくいく。

ケース2: ユーザー1User2のユーザー3randompersonにメールを送信したいです。原因ランダルマンは、その会社に属していません、ユーザー1は、SendAndStore()を使用します。メールが送信される前に、カスタムプロパティは、新しいアイテムがinboxfolderに追加された場合に通知を受ける可能性がある、

mailItem.UserProperties.Add("HandleAfterSent", MSOutlook.OlUserPropertyType.olText); 
var aasProp = mailItem.UserProperties.Find("HandleAfterSent"); 
if (aasProp != null) 
{ 
    aasProp.Value = "some_value"; 
} 
mailItem.Save(); 

SendMailItem(mailItem); 

また新しいメールに追加されます。だから、私はフォルダーを見た。

inbox = outlookNameSpace.GetDefaultFolder(MSOutlook.OlDefaultFolders.olFolderSentMail); 
items = inbox.Items; 
items.ItemAdd += OnInboxItemAdded; 

メールがSendMailItem(mailItem);を経由して送信された場合、ハンドラは(あまりにも正常に動作します)と呼ばれています。しかし、残念ながら私は送信メールのハッシュ計算に問題があります。このメールにはMessage-IDがありません。誰かが今すぐ送信されたメールのMessage-IDを取得する方法を考えていますか? 私は自分でMessage-IDを設定しようとしましたが、MS Exchangeサーバーからオーバーライドされています。

EDIT: Outlookはキャッシュモードです。このシナリオのMessage-IDも取得する必要があります。(コメントに加えて)

EDIT2: ケース3: randompersonユーザー1、とユーザー3ユーザー2にメールを送信したいです。原因ランダルアパートは、その会社に属していません、ユーザー1は、StoreFromInbox()機能を使用します。 3人のすべてのユーザーの受信ボックスにあるメールには同じMessage-IDがあります。しかし、それらは異なる_PR_SEARCH_KEY_を持つので、このプロパティは使用できません。

+1

これは関連性があります:http://stackoverflow.com/questions/19029082/pr-internet-message-id-returns-blank-when-sending-message –

+0

それは意味があります。キャッシュモードがなければ動作します。しかし、キャッシュモードでもIDを取得する可能性はありますか? – Kooki

答えて

1

PR_SEARCH_KEY MAPIプロパティを使用してください。メッセージが送信されて[送信済みアイテム]フォルダに移動さ​​れた後も同じままである必要があります。

+0

私はそれをハッシュコードの値として使うべきですか?より多くの償還機能を使用するようにコードを変更しました。しかし、現在、 'rdoSession.GetMessageFromID(outlookMailItem.EntryID、outlookMailItem.Parent.StoreID、0x200)をIRDOMail;として使用すると例外が発生します。キャッシュされたモードであっても、このコードでメッセージIDを取得することを希望しました – Kooki

+0

気になるOutlookキャッシュ。私がタイマーを使用し、メールを送信して約1分後に 'rdoSession.GetMessageFromID(outlookMailItem.EntryID、outlookMailItem.Parent.StoreID、0x200)をIRDOMail;と呼び出すと例外はありません。待機するのではなく、他の解決策がありますか? – Kooki

+0

確かに、私はなぜそうではないのですか?PR_SEARCH_KEYの値をハッシュするだけです。エントリIDでアイテムを再度開いているのはなぜですか? –

関連する問題