Подтвердить что ты не робот

Получить адрес электронной почты текущего пользователя в Outlook 2007

У меня есть Outlook, написанный на С#.

Мне было интересно, как или получить адрес электронной почты текущего пользователя?

Спасибо

4b9b3361

Ответ 2

Протестировано в VS 2010,.NET 4.0, Outlook 2010:

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

Ответ 3

Зависит от определения "текущего пользовательского адреса".

  • Адрес основной учетной записи в Outlook можно получить из Appication.Session.CurrentUser (возвращает Recipient объект). Используйте свойство Recipient.Address. Однако обратите внимание, что для учетной записи Exchange (Recipient.AddressEntry.Type == "EX") вы получите адрес типа EX. Чтобы получить SMTP-адрес, используйте Recipient.AddressEntry.GetExchangeUser().PrimarySmtpAddress. Будьте готовы обрабатывать нули/исключения в случае ошибок.

На расширенном уровне MAPI (С++ или Delphi) используйте IMAPISession::QueryIdentity (вы можете проверить его в OutlookSpy - нажмите кнопку IMAPISession, затем QueryIdentity). Затем вы можете прочитать свойство PR_ADDRTYPE ( "EX" и "SMTP" ) и PR_EMAIL_ADDRESS (когда PR_ADDRTYPE= "SMTP" ) или (в случае Exchange) PR_SMTP_ADDRESS (не гарантируется наличие) и PR_EMS_AB_PROXY_ADDRESSES (многозначное свойство будет иметь адреса Exchange, включая все адреса прокси (псевдоним)).

  1. В случае нескольких учетных записей в профиле электронное письмо может быть отправлено или получено через несколько учетных записей. В этом случае используйте MailItem.SendUsingAccount (возвращает объект Account, может быть нулем - в этом случае используйте Application.Session.CurentUser). Это справедливо как для полученных, отправленных, так и для писем (Application.ActiveInspector.CurrentItem или Application.ActiveExplorer.ActiveInlineResponse).

  2. Доступ к всем учетным записям в данном профиле можно получить с помощью коллекции Namespace.Accounts (Application.Session.Accounts). Доступ к адресу учетной записи можно получить с помощью свойства Account.SmtpAddress. Обратите внимание, что объектная модель Outlook предоставляет только почтовые учетные записи. Некоторые учетные записи магазина (например, PST) не входят в коллекцию, поскольку у них нет встроенного идентификатора пользователя, даже если некоторые другие учетные записи (такие как POP3/SMTP) могут доставляться в этот магазин. Если вы хотите получить доступ ко всем учетным записям, вы можете использовать Redemption и RDOSession. Коллекция коллекций (RDOAccounts объект.)

На расширенном уровне MAPI аккаунты отображаются через интерфейс IOlkAccountManager. Вы можете играть с ним в OutlookSpy, если вы нажмете кнопку IOlkAccountManager.

  1. В случае делегирования хранилища Exchange владелец магазина не открывается через объектную модель Outlook. Вы можете использовать Extended MAPI (обратите внимание, что свойство PR_MAILBOX_OWNER_ENTRYID доступно только в интернет-магазине, оно недоступно в кэшированном хранилище). Вы можете проанализировать идентификатор записи в хранилище Exchange и извлечь из него адрес типа EX. Затем вы можете создать идентификатор объекта объекта GAL с адресом EX. Вы также можете получить доступ к владельцу магазина с помощью Redemption и RDOExchangeMailboxStore и его свойство Owner.

Ответ 4

Если вы используете обычный сервер POP/IMAP, вы получаете адрес электронной почты: Application.Session.CurrentUser.AddressEntry.Address;

В Exchange Server вы получаете адрес электронной почты: Application.Session.CurrentUser.AddressEntry.GetExchangeUser() PrimarySmtpAddress;.

Ответ 5

Попробуйте outlookObject.ActiveExplorer().Session.CurrentUser.Address. Работала для меня на VS10, Outlook 2007,.NET 4.0

Ответ 6

Проходя мимо, я бы настоятельно советовал использовать Application.Session.CurrentUser.AddressEntry.Address вместо того, чтобы использовать Application.ActiveExplorer().Session  поскольку ActiveExplorer() может вернуть NullReferenceException, например, при открытии электронной почты через Outlook.