2012-09-20 16 views
6

estoy usando ApplicationEvents_11_ItemSendEventHandler (ver http://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook.applicationevents_11_itemsendeventhandler.aspx) para hacer algo de procesamiento cuando un artículo se envía desde Outlook.Evento en "artículo enviado" en Outlook

Sin embargo, como este evento se desencadena en "Enviar", en lugar de "enviado", soy incapaz de obtener cierta información, tales como el remitente, la hora, etc. enviado

¿Hay un evento alternativo que los incendios después de ¿el artículo ha enviado realmente? He leído esta publicación de blog; http://easyvsto.wordpress.com/2010/07/27/how-to-save-mail-content-when-a-mail-is-sent-from-outlook/, pero desconfío de los elementos que aparecen en la carpeta de elementos enviados, teniendo en cuenta que un usuario puede desactivar esta función.

Editar: debo añadir que en realidad he probado el enfoque de "ver la carpeta de los elementos enviados" y he notado que el evento ItemAdd sólo parece al fuego durante el primer correo electrónico que envío, entonces no otra vez hasta que reinicie Outlook . Mi código es el siguiente;

var sentMail = Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail); 
sentMail.Items.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(Items_ItemAdd); 

Y mi método ...

void Items_ItemAdd(object item) 
{ 
    MessageBox.Show(((Outlook.MailItem)item).Subject); 
} 
+0

Debe mantener los artículos Objeto vivo (en una variable de clase) para los eventos a disparar En su caso, el compilador crea una variable temporal para mantener el objeto sendMail.Items. Cuando esa variable es basura recolectada, los eventos dejarán de disparar. –

Respuesta

4

Si utiliza un cuadro de diálogo modal (WPF/WinForms MessageBox), sólo obtendrá el primer activador de eventos. Debe implementar un controlador de eventos no bloqueante (posiblemente un elemento cola estrategia).

No utilice el bloqueo de llamadas cuadros de diálogo modales UI - Perspectivas dará cuenta de la interfaz de usuario está bloqueado y no hacer caso de disparo interrupciones posteriores.

Ver this form post for reference.


Si usted está preocupado acerca de las preferencias de los usuarios para controlar el almacenamiento de artículos enviados, simplemente anularlos mediante el siguiente fragmento ...

MailItem.DeleteAfterSubmit = false; // force storage to sent items folder (ignore user options) 
Outlook.Folder sentFolder = ThisAddIn.Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail); 
if (sentFolder != null) 
    MailItem.SaveSentMessageFolder = sentFolder; // override the default sent items location 
MailItem.Save(); 
+0

@ SilverWinja - gracias por su respuesta, esa publicación en el foro tiene información muy útil sobre el evento ItemAdd. Aclamaciones. –

Cuestiones relacionadas