4

MailItem.Sender 経由でメール アドレスを取得しようとすると、AccessViolationException が発生しました。Outlook 2007 (Windows XP) のアドレス。Outlook 2010 (Windows 7) で同じコードを実行している場合、このエラーは発生しません。

Outlook.MailItem email = inbox.Items[i] as Microsoft.Office.Interop.Outlook.MailItem;
Outlook.MailItem email
Console.WriteLine("Subject: " + email.Subject);
Console.WriteLine("Sender: " + email.Sender); <-- Exception Here!
Console.WriteLine("Addr: " + email.Sender.Address);

コンソール: エラー: System.AccessViolationException: 保護されたメモリを読み書きしようとしました。メソッド: get_Sender()

4

2 に答える 2

2

これは、インターフェイスの以前のバージョンでは公開されていないプロパティを使用していることを示しています - MailItem.Sender プロパティは Outlook 2010 で追加されました。Outlook 2007 に対してコードを実行すると、呼び出しはオブジェクトの v-table を通過するため、アクセス違反。

http://schemas.microsoft.com/mapi/proptag/0x0C190102回避策は、 MailItem.PorpertyAccessor.GetProperty を使用してPR_SENDER_ENTRYID MAPI プロパティ (DASL 名) を読み取り、それを使用して Namespace.GetAddressEntryFromID を呼び出すことです。

于 2014-07-17T21:42:07.467 に答える
1

上記のように:

はい。私は回避策を得ました:email.SenderEmailAddress

参考文献

于 2014-07-17T19:03:39.767 に答える