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

У меня есть надстройка Outlook, написанная на C #.

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

Спасибо

Ответы [ 6 ]

14 голосов
/ 12 мая 2012

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

var emailAddress = this.Application.ActiveExplorer().Session.CurrentUser.AddressEntry.GetExchangeUser().PrimarySmtpAddress;
7 голосов
/ 21 января 2011

Использование Namespace.CurrentUser: http://msdn.microsoft.com/en-us/library/bb220041(v=office.12).aspx

4 голосов
/ 05 сентября 2015

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

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

На уровне расширенного MAPI (C ++ или 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 collection (Application.Session.Accounts). Адрес учетной записи можно получить с помощью свойства Account.SmtpAddress. Обратите внимание, что объектная модель Outlook предоставляет только почтовые учетные записи. Некоторые учетные записи магазина (например, PST) отсутствуют в коллекции, поскольку у них нет внутренней идентификационной информации пользователя, даже если некоторые другие учетные записи (например, POP3 / SMTP) могут доставлять в это хранилище. Если вы хотите получить доступ ко всем учетным записям, вы можете использовать Redemption и его RDOSession .Accounts collection ( RDOAccounts object).

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

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

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

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

0 голосов
/ 11 февраля 2015

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

0 голосов
/ 04 сентября 2014

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...