2012-09-20 5 views
6

Ich verwende ApplicationEvents_11_ItemSendEventHandler (siehe http://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook.applicationevents_11_itemsendeventhandler.aspx), um einige Verarbeitung zu tun, wenn ein Element aus Outlook gesendet wird.Ereignis auf "Artikel gesendet" in Outlook

jedoch, wie dieses Event Feuer auf „Senden“, sondern als „gesendet“, ich bin nicht in der Lage, bestimmte Informationen zu erhalten, wie Absender, schickte Zeit usw.

Gibt es ein Alternatives Ereignis, das ausgelöst nach hat der Artikel tatsächlich gesendet? Ich habe diesen Blogbeitrag gelesen. http://easyvsto.wordpress.com/2010/07/27/how-to-save-mail-content-when-a-mail-is-sent-from-outlook/, aber ich bin vorsichtig, abhängig von den im Ordner für gesendete Objekte angezeigten Elementen, wenn man bedenkt, dass ein Benutzer diese Funktion deaktivieren kann.

Edit: sollte ich hinzufügen, dass ich tatsächlich versucht, die „sehen den Ordner Gesendete Objekte“ -Ansatz und haben bemerkt, dass die ItemAdd Ereignis scheint nur für die erste E-Mail feuern ich senden, dann nicht wieder, bis ich Outlook neu starten . Mein Code ist wie folgt;

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

Und meine Methode ...

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

Sie müssen halten die Gegenstände lebendig Objekt (in einer Klassenvariablen) für die Ereignisse zu schießen. In Ihrem Fall erstellt der Compiler eine temporäre Variable, um das Objekt sentMail.Items zu behalten. Wenn diese Variable als Garbage Collection erfasst wird, werden die Ereignisse nicht mehr ausgelöst. –

Antwort

4

Wenn Sie einen modalen Dialog (WPF/WinForms MessageBox) verwenden, werden Sie nur den ersten Ereignis-Trigger erhalten. Sie müssen einen nicht blockierenden Ereignishandler implementieren (möglicherweise eine Artikelwarteschlangenstrategie).

Verwenden Sie nicht die modalen Dialogfelder zum Blockieren der Benutzeroberfläche - Outlook wird feststellen, dass die Benutzeroberfläche blockiert ist und die Ausführung nachfolgender Interrupts ignoriert.

Siehe this form post for reference.


Wenn Sie zur Steuerung Sent Artikel Speicher besorgt über die Benutzer-Einstellungen sind nur überschreiben sie die folgenden Ausschnitt mit ...

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 - vielen Dank für Ihre Antwort, dieser Forenbeitrag enthält einige sehr nützliche Informationen bezüglich des ItemAdd-Ereignisses. Prost. –

Verwandte Themen