У меня есть 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.