2012-09-20 17 views
6

Sto utilizzando ApplicationEvents_11_ItemSendEventHandler (vedere http://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook.applicationevents_11_itemsendeventhandler.aspx) per eseguire alcune elaborazioni quando un articolo viene inviato da Outlook.Evento su "Elemento inviato" in Outlook

Tuttavia, come questo evento viene su "Invia", piuttosto che "inviato", sono in grado di ottenere alcune informazioni, come ad esempio il mittente, ha inviato il tempo ecc

C'è un evento alternativo che gli incendi dopo l' l'articolo è stato effettivamente inviato? Ho letto questo post sul blog; http://easyvsto.wordpress.com/2010/07/27/how-to-save-mail-content-when-a-mail-is-sent-from-outlook/ ma sono diffidente a seconda degli elementi visualizzati nella cartella degli articoli inviati, considerando che un utente può disabilitare questa funzionalità.

Edit: Vorrei aggiungere che io in realtà ho provato l'approccio "guardare la cartella posta inviata" e hanno notato che l'evento ItemAdd sembra solo di fuoco per la prima e-mail mando, quindi non di nuovo fino a quando ho riavviato Outlook . Il mio codice è il seguente;

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

E il mio metodo ...

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

È necessario mantenere gli elementi oggetto vivo (in una variabile di classe) per gli eventi da sparare. Nel tuo caso il compilatore crea una variabile temporanea per mantenere l'oggetto sendMail.Items. Quando quella variabile è raccolta dati inutili, gli eventi cesseranno di essere attivati. –

risposta

4

Se si utilizza una finestra di dialogo modale (WPF/WinForms MessageBox), si otterrà solo il primo trigger dell'evento. È necessario implementare un gestore eventi non bloccante (possibilmente una strategia di accodamento degli elementi).

Non utilizzare le finestre di dialogo modali di chiamata dell'interfaccia utente di blocco: Outlook noterà che l'interfaccia utente è bloccata e ignora l'attivazione degli interrupt successivi.

Vedere this form post for reference.


Se siete preoccupati per le preferenze degli utenti per il controllo di stoccaggio si Sent, semplicemente li modifichi utilizzando il seguente frammento ...

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

@ SilverNinja - grazie per la tua risposta, quel post sul forum ha alcune informazioni molto utili riguardanti l'evento ItemAdd. Saluti. –