У меня есть Outlook, написанный на C#.Получить адрес электронной почты текущего пользователя в Outlook 2007
Мне было интересно, как или получить адрес электронной почты текущего пользователя?
Благодаря
У меня есть Outlook, написанный на C#.Получить адрес электронной почты текущего пользователя в Outlook 2007
Мне было интересно, как или получить адрес электронной почты текущего пользователя?
Благодаря
Использование 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;
Почему бы не сократить его до var emailAddress = this.Application.Session.CurrentUser.AddressEntry.Address? Вам также необходимо проверить, что AddressEntry.GetExchangeUser действителен - для пользователя без Exchange в профиле GetExchangeUser вернет значение null. –
@DmitryStreblechenko, я намеренно написал его в длинной форме, чтобы было очевидно, откуда оно взялось. В то же время я сознательно ответил на него минимальным количеством строк кода. Я оставляю это в OP, чтобы написать защитный код в контексте его/ее приложения. –
Работал отлично;) –
Попробуйте outlookObject.ActiveExplorer().Session.CurrentUser.Address
. Работал для меня на VS10, Outlook 2007, .NET 4.0
Любой проходя мимо, я бы настоятельно совет, используя Application.Session.CurrentUser.AddressEntry.Address
вместо чего-либо с помощью Application.ActiveExplorer().Session
, как ActiveExplorer()
может возвращать NullReferenceException
, например, при открытии электронной почты через Перспективы.
Если вы используете обычный сервер POP/IMAP, вы получаете адрес электронной почты: Application.Session.CurrentUser.AddressEntry.Address;
С Exchange Server вы получаете адрес электронной почты: Application.Session.CurrentUser.AddressEntry.GetExchangeUser(). PrimarySmtpAddress;
Зависит от определения «текущий адрес пользователя».
Appication.Session.CurrentUser
(возвращается Recipient
объекта). Используйте Recipient.Address
property. Однако обратите внимание, что для учетной записи 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-адресами, включая все адреса прокси (псевдоним)).
В случае нескольких учетных записей в профиле электронное письмо может быть отправлено или получено через несколько учетных записей. В этом случае используйте 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
.В случае, если в календаре создается запись, существует ли способ использовать OOM, чтобы узнать, какая учетная запись электронной почты будет связана с ней? То есть для сопоставления календаря с учетной записью, когда у нас есть несколько учетных записей в профиле. – Alex
Не в этом убедиться, ознакомьтесь с назначением родительского свойства, отбросьте его до объекта Folder, прочитайте свойство Folder.Store. Прокрутите список Namespace.Accounts и сравните значение свойства Account.DeliveryStore.EntryID с идентификатором записи идентификатора родительского хранилища записи. –
Спасибо! Тем временем я обнаружил, что только что созданный AppointmentItem уже содержит один Получатель в своей коллекции получателей, и у этого получателя есть письмо, которое мне нужно (чтобы организатор уже был инициализирован). Похож на более простой метод (для этой конкретной задачи). Или есть ли недостатки такого подхода? При условии, что соответствующие вопросы создаются моим собственным кодом, поэтому мне не нужно иметь дело с тем случаем, когда назначение уже существует, а список получателей может быть недействительным и на него нельзя положиться. – Alex
Thats VBA, хотя и не C#. Я не могу найти, что в C# – electricsheep
вы можете попробовать «myEmailAddress = this.ActiveExplorer(). Session.CurrentUser.EmailAddress; или попробовать другие решения здесь: http://social.msdn.microsoft.com/forums/en- US/vsto/thread/d2d9bf23-e27f-4f30-9199-42833d6919a4/ – acconrad