web-dev-qa-db-ja.com

Outlook2007で現在のユーザーの電子メールアドレスを取得します

OutlookのアドインをC#で記述しています。

現在のユーザーのメールアドレスを取得するにはどうすればよいのでしょうか。

ありがとう

19
electricsheep
7
acconrad

VS 2010、.NET 4.0、Outlook 2010でテスト済み:

var emailAddress = this.Application.ActiveExplorer().Session.CurrentUser.AddressEntry.GetExchangeUser().PrimarySmtpAddress;
14
Lee Grissom

「現在のユーザーアドレス」の定義によって異なります。

  1. Outlookのプライマリアカウントのアドレスは、_Appication.Session.CurrentUser_から取得できます(Recipientオブジェクトを返します)。 _Recipient.Address_プロパティを使用します。ただし、Exchangeアカウント(_Recipient.AddressEntry.Type == "EX"_)の場合は、EXタイプのアドレスを受け取ることに注意してください。 SMTPアドレスを取得するには、Recipient.AddressEntry.GetExchangeUser().PrimarySmtpAddressを使用します。エラーが発生した場合にnull /例外を処理できるように準備してください。

拡張MAPIレベル(C++またはDelphi)では、_IMAPISession::QueryIdentity_を使用します( OutlookSpy --IMAPISessionボタンをクリックしてからQueryIdentityをクリックします)。次に、_PR_ADDRTYPE_プロパティ( "EX" vs "SMTP")および_PR_EMAIL_ADDRESS_(_PR_ADDRTYPE_ = "SMTP"の場合)または(Exchangeの場合)_PR_SMTP_ADDRESS_を読み取ることができます。 (存在することが保証されていません)および_PR_EMS_AB_PROXY_ADDRESSES_(複数値のプロパティは、すべてのプロキシ(エイリアス)アドレスを含むアドレスを交換します)。

  1. プロファイルに複数のアカウントがある場合、複数のアカウントを介して電子メールを送受信できます。その場合は_MailItem.SendUsingAccount_を使用します(Accountオブジェクトを返します。nullの場合もあります。その場合は_Application.Session.CurentUser_を使用してください)。これは、受信、送信、または作成中の電子メール(_Application.ActiveInspector.CurrentItem_または_Application.ActiveExplorer.ActiveInlineResponse_)の両方に有効です。

  2. 特定のプロファイル内のすべてのアカウントには、_Namespace.Accounts_コレクション_(Application.Session.Accounts_)を使用してアクセスできます。アカウントのアドレスには、_Account.SmtpAddress_プロパティを使用してアクセスできます。 Outlookオブジェクトモデルはメールアカウントのみを公開することに注意してください。一部のストアアカウント(PSTなど)は、他のアカウント(POP3/SMTPなど)がそのストアに配信できる場合でも、固有のユーザーIDを持たないため、コレクションに含まれていません。すべてのアカウントにアクセスする場合は、 Redemption とその RDOSession 。Accountsコレクション( RDOAccounts オブジェクト)を使用できます。

拡張MAPIレベルでは、アカウントは IOlkAccountManager インターフェイスを介して公開されます。 IOlkAccountManagerボタンをクリックすると、 OutlookSpy で遊ぶことができます。

  1. Exchangeストアを委任する場合、ストアの所有者はOutlookオブジェクトモデルを通じて公開されません。拡張MAPIを使用することもできます(PR_MAILBOX_OWNER_ENTRYIDプロパティはオンラインストアによってのみ公開され、キャッシュされたストアでは使用できないことに注意してください)。 ExchangeストアのエントリIDを解析し、そこからEXタイプのアドレスを抽出できます。次に、EXアドレスを指定してGALオブジェクトエントリIDを作成できます。 Redemption とその RDOExchangeMailboxStore オブジェクトを使用してストア所有者にアクセスすることもできます。およびそのOwnerプロパティ。

通常のPOP/IMAPサーバーを使用している場合は、次の電子メールアドレスを取得します。Application.Session.CurrentUser.AddressEntry.Address;

Exchange Serverでは、次のコマンドで電子メールアドレスを取得します。Application.Session.CurrentUser.AddressEntry.GetExchangeUser()。PrimarySmtpAddress;

2

通りすがりの人は、Application.ActiveExplorer().Sessionを使用する代わりに_Application.Session.CurrentUser.AddressEntry.Address_を使用することを強くお勧めします。たとえば、ActiveExplorer()NullReferenceExceptionを返す可能性があるためです。 Outlook経由の電子メール。

0
Romain Vergnory

outlookObject.ActiveExplorer().Session.CurrentUser.Addressを試してください。 VS10、Outlook 2007、.NET4.0で私のために働いた

0
Mangesh