16

私は C# で VSTO Outlook アドインを作成しています。指定された MailItem が着信か発信か (または下書きの場合はどちらでもない) を区別する必要があります。

これを行うための絶対確実な方法はありますか?私が今持っている最善の解決策は、受信者、cc、および bcc のリストを取得し、アクティブなアカウントから電子メール アドレスを読み込み、これら 2 つのリストが交差しているかどうかを確認することですが、これは私には非常に壊れやすいようです。より良い解決策があることを願っています.

ユースケース: メールに関連する日付 (ReceivedTime または SentOn のいずれか) を取得したいのですが、どちらを使用すべきかを知るには、メールが送信されたか受信されたかを知る必要があります。

アイデアをありがとう:)

4

10 に答える 10

23

私はVBAで同じ問題を抱えていたので、このページに来ました。親フォルダーの確認は面倒です。メッセージが複数のフォルダーの深さ (したがって、複数のフォルダーを繰り返し処理する必要があります) に保持されるか、ユーザーがフォルダーを変更した可能性があるためです。極端な例: 削除済みアイテム フォルダには、受信メール アイテムと送信メール アイテムの両方が含まれています。

上記の別の人 (Adi Kini) と同様の解決策を選択し、ReceivedByName を確認しました (彼は ReceivedEntryID を選択したと思います)。ReceivedByName プロパティは、送信されたメッセージの現在の場所に関係なく、常に Null ("") です。このメソッドは、受信トレイにドラッグされた送信済みアイテムを見つけることができます!. かなり信頼できるチェック方法のようです。

メールが受信されているか送信されているかを確認するという一見単純なことで、つまずくことがあるのは奇妙に思えます。

于 2011-07-19T15:39:53.463 に答える
2

私は同じ問題でここに来ました。ユーザーがメールをユースケース内のあるフォルダーに移動することを明示的に提案するので、Parentをチェックしても役に立ちません...

MailItem.Sentについて:MailItem.Sentがこのように機能することを確認しますか?InboxとSentItemsの両方を実行するための簡単なコードを記述しただけで、ほとんどすべてのSentがtrueです。これは実際にはメールが送信されたかどうかの単なる指標であると思います(=ドラフトではありません)...

于 2010-03-03T10:57:21.883 に答える
2

これは、メールの種類を確認する方法であり、メールがどのフォルダーに移動されても機能します。このソリューションは、Outlook 2007 で利用可能な PROPERTY ACCESSOR を使用します。以下はコードです。

string PR_MAIL_HEADER_TAG = "http://schemas.microsoft.com/mapi/proptag/0x007D001E";

Outlook.PropertyAccessor oPropAccessor = mItemProp.PropertyAccessor;

string strHeader = (string)oPropAccessor.GetProperty(PR_MAIL_HEADER_TAG);

if (strHeader == "")
{
    // MAIL IS OF TYPE SENTBOX
}
else
{
   // MAIL IS OF TYPE INBOX
}
于 2011-04-22T17:58:22.207 に答える
1

電子メールの送信後に新しい UserProperty を追加することで、この問題を解決しました。そのため、電子メールが送信されたかどうかを確認する必要がある場合は、このプロパティを確認します。これは、電子メールが送信済みフォルダーから移動された場合でも機能します。もちろん、これは新しく作成された電子メールに対してのみ機能しますが、最初の起動時に送信済みフォルダー内のすべての電子メールにこのプロパティを追加することができます。唯一のバグは、UserProperties がデフォルトで出力されることですが、これはオーバーライドできます。

于 2011-01-27T14:55:38.777 に答える
1

MailItem.sent は着信にも当てはまります。

MailItem.ReceivedByEntryID を確認してみてはどうでしょうか。しかし、Outlook Express または他の電子メール プログラムからインポートすると言うと、これは失敗すると確信しています (受信トレイのメールの ReceivedByEntryID は null になります)。

あなたが言ったように、メールアカウント/送信者メールを繰り返し使用すると役立つ場合がありますが、それはばかげた証拠ではありません(メールアドレスの名前を変更した場合など)

于 2010-05-06T06:25:40.277 に答える
0

MailItem の .Parent プロパティを見てください。フォルダーのプロパティを調べて、受信トレイ、送信トレイ、下書き、送信済みアイテムなどであるかどうかを判断します。

于 2009-08-17T00:34:32.587 に答える
0

Outlook.OlDefaultFolders.olFolderInboxまたは内にあるかolFolderOutboxどうかを確認できます。その後、これらのフォルダーのいずれかにあるかどうかを確認するために使用できる他の方法があるはずです!

Outlook.Application _application = new Outlook.Application();
Outlook.MAPIFolder folder = _application.GetNamespace("MAPI").GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);
于 2010-07-20T11:37:51.940 に答える
-4

MailItem.Sent プロパティを試しましたか?

着信の場合は true、発信の場合は false です。

于 2010-02-22T12:37:34.653 に答える