У меня есть Outlook, написанный на С#.
Мне было интересно, как или получить адрес электронной почты текущего пользователя?
Спасибо
У меня есть Outlook, написанный на С#.
Мне было интересно, как или получить адрес электронной почты текущего пользователя?
Спасибо
Используйте Namespace.CurrentUser: http://msdn.microsoft.com/en-us/library/bb220041(v=office.12).aspx
Протестировано в VS 2010,.NET 4.0, Outlook 2010:
var emailAddress = this.Application.ActiveExplorer().Session.CurrentUser.AddressEntry.GetExchangeUser().PrimarySmtpAddress;
Зависит от определения "текущего пользовательского адреса".
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, включая все адреса прокси (псевдоним)).
В случае нескольких учетных записей в профиле электронное письмо может быть отправлено или получено через несколько учетных записей. В этом случае используйте MailItem.SendUsingAccount (возвращает объект Account, может быть нулем - в этом случае используйте Application.Session.CurentUser). Это справедливо как для полученных, отправленных, так и для писем (Application.ActiveInspector.CurrentItem или Application.ActiveExplorer.ActiveInlineResponse).
Доступ к всем учетным записям в данном профиле можно получить с помощью коллекции Namespace.Accounts (Application.Session.Accounts). Доступ к адресу учетной записи можно получить с помощью свойства Account.SmtpAddress.
Обратите внимание, что объектная модель Outlook предоставляет только почтовые учетные записи. Некоторые учетные записи магазина (например, PST) не входят в коллекцию, поскольку у них нет встроенного идентификатора пользователя, даже если некоторые другие учетные записи (такие как POP3/SMTP) могут доставляться в этот магазин. Если вы хотите получить доступ ко всем учетным записям, вы можете использовать Redemption и RDOSession. Коллекция коллекций (RDOAccounts объект.)
На расширенном уровне MAPI аккаунты отображаются через интерфейс IOlkAccountManager. Вы можете играть с ним в OutlookSpy, если вы нажмете кнопку IOlkAccountManager.
Owner.Если вы используете обычный сервер POP/IMAP, вы получаете адрес электронной почты: Application.Session.CurrentUser.AddressEntry.Address;
В Exchange Server вы получаете адрес электронной почты: Application.Session.CurrentUser.AddressEntry.GetExchangeUser() PrimarySmtpAddress;.
Попробуйте outlookObject.ActiveExplorer().Session.CurrentUser.Address. Работала для меня на VS10, Outlook 2007,.NET 4.0
Проходя мимо, я бы настоятельно советовал использовать Application.Session.CurrentUser.AddressEntry.Address
вместо того, чтобы использовать
Application.ActiveExplorer().Session
поскольку ActiveExplorer() может вернуть NullReferenceException, например, при открытии электронной почты через Outlook.