2011-01-21 26 views

Respuesta

12

Probado en VS 2010, .NET 4.0, Outlook 2010:

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

¿Por qué no acortarlo a var emailAddress = this.Application.Session.CurrentUser.AddressEntry.Address? También debe verificar que AddressEntry.GetExchangeUser sea válido: para un usuario sin Exchange en el perfil, GetExchangeUser devolverá null. –

+1

@DmitryStreblechenko, deliberadamente lo escribí en formato largo para que fuera obvio de dónde viene. Al mismo tiempo, respondí deliberadamente con la mínima cantidad de líneas de código. Dejo en manos del OP escribir un código defensivo en el contexto de su aplicación. –

+0

Funcionó perfecto;) –

0

Trate outlookObject.ActiveExplorer().Session.CurrentUser.Address. Trabajado para mí en VS10, Outlook 2007, .NET 4.0

0

Cualquiera que pase por, me gustaría fuertemente consejos usando Application.Session.CurrentUser.AddressEntry.Address en lugar de cualquier cosa usando Application.ActiveExplorer().Session, como ActiveExplorer() podría producir una NullReferenceException, por ejemplo al abrir un correo electrónico a través de Panorama.

2

Si está utilizando el servidor POP/IMAP normal, obtiene la dirección de correo electrónico con: Application.Session.CurrentUser.AddressEntry.Address;

Con Exchange Server, obtiene la dirección de correo electrónico con: Application.Session.CurrentUser.AddressEntry.GetExchangeUser(). PrimarySmtpAddress;

5

Depende de la definición de "la dirección de usuario actual".

  1. La dirección de la cuenta principal en Outlook se puede recuperar a partir de Appication.Session.CurrentUser (retornos Recipient objeto). Use la propiedad Recipient.Address. Sin embargo, tenga en cuenta que para una cuenta de Exchange (Recipient.AddressEntry.Type == "EX") recibirá una dirección de tipo EX. Para recuperar la dirección SMTP, use Recipient.AddressEntry.GetExchangeUser().PrimarySmtpAddress. Esté preparado para manejar nulos/excepciones en caso de errores.

En el nivel MAPI extendido (C++ o Delphi), utilice IMAPISession::QueryIdentity (que puede probarlo en OutlookSpy - IMAPISession botón de clic, a continuación, QueryIdentity). A continuación, puede leer la propiedad PR_ADDRTYPE ("EX" frente a "SMTP") y PR_EMAIL_ADDRESS (cuando PR_ADDRTYPE = "SMTP") o (en caso de Exchange) PR_SMTP_ADDRESS (no está garantizado) y PR_EMS_AB_PROXY_ADDRESSES (propiedad multivaluada intercambiará direcciones, incluyendo todas las direcciones proxy (alias)).

  1. En el caso de varias cuentas en el perfil, un correo electrónico se puede enviar o recibir a través de varias cuentas. En ese caso, use MailItem.SendUsingAccount (devuelve el objeto Account, puede ser nulo, en ese caso use Application.Session.CurentUser). Esto es válido tanto para los recibidos, enviados o correos electrónicos que se componen (Application.ActiveInspector.CurrentItem o Application.ActiveExplorer.ActiveInlineResponse).

  2. Se puede acceder a todas las cuentas de un perfil determinado utilizando la colección Namespace.Accounts(Application.Session.Accounts). Se puede acceder a la dirección de la cuenta usando la propiedad Account.SmtpAddress. Tenga en cuenta que el Modelo de objetos de Outlook solo expone cuentas de correo. Algunas cuentas de tienda (como PST) no están en la colección ya que no tienen una identidad de usuario intrínseca, incluso si otras cuentas (como POP3/SMTP) pueden entregar a esa tienda. Si desea acceder a todas las cuentas, puede usar Redemption y su RDOSession.Recopilación de cuentas (objeto RDOAccounts).

En el nivel MAPI extendido, las cuentas están expuestos a través de la interfaz de IOlkAccountManager. Puede jugar con él en OutlookSpy si hace clic en el botón IOlkAccountManager.

  1. En el caso de delegar almacenes de Exchange, el propietario de la tienda no está expuesto a través del Modelo de objetos de Outlook. Puede usar MAPI extendido (tenga en cuenta que la propiedad PR_MAILBOX_OWNER_ENTRYID solo está expuesta en la tienda en línea, no está disponible en una tienda en caché). Puede analizar el ID de entrada de la tienda de Exchange y extraer la dirección de tipo EX de él. A continuación, puede construir el ID de entrada de objeto GAL dada la dirección EX. También puede acceder al propietario de la tienda usando Redemption y su objeto RDOExchangeMailboxStore y su propiedad Owner.
+0

En caso de que se cree una cita en el calendario, ¿hay alguna manera de utilizar OOM para saber qué cuenta de correo electrónico se asociará con ella? Es decir. para asignar el calendario a la cuenta cuando tenemos varias cuentas en el perfil. – Alex

+0

No está seguro, lea la propiedad Parent de la cita, ejecútelo en el objeto Folder, lea la propiedad Folder.Store. Haga un bucle a través del espacio de nombres. Acumula la recopilación y compare el valor de la propiedad Account.DeliveryStore.EntryID con el id de la entrada del ID de entrada de la tienda principal de la cita. –

+0

Gracias! Mientras tanto, descubrí que AppointmentItem recién creado ya contiene un Receptor en su colección de destinatarios y este destinatario tiene el correo electrónico que necesito (para que el organizador ya esté inicializado). Parece un método más fácil (para esta tarea en particular). ¿O hay algún inconveniente de este enfoque? Se establece que las citas en cuestión sean creadas por mi propio código, por lo que no tengo que ocuparme del caso cuando la cita ya haya existido y su lista de destinatarios no sea la predeterminada y no se pueda confiar en ella. – Alex

Cuestiones relacionadas