2012-09-20 15 views
6

Bir öğeyi Outlook'tan gönderildiğinde işlem yapmak için ApplicationEvents_11_ItemSendEventHandler (bkz. http://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook.applicationevents_11_itemsendeventhandler.aspx) kullanıyorum.Outlook'ta "Öğe Gönderildi" Olayı

Ancak, böyle gönderici olarak, belirli bilgileri elde edemeyebiliriz değilim doğrusu "gönderildi" den, "gönder" bu olay yangınları gibi alternatif bir olay olduğunu var mı zamanı vb

gönderilen yangınlar 'dan sonra ürün gerçekten gönderildi? Bu blog yazısını okudum; http://easyvsto.wordpress.com/2010/07/27/how-to-save-mail-content-when-a-mail-is-sent-from-outlook/ Ancak, bir kullanıcının bu özelliği devre dışı bırakabileceğini düşünerek gönderilen öğeler klasöründe görünen öğelere bağlı kalmamaya özen gösteriyorum.

Düzenleme: Ben aslında "gönderilen öğeler klasörünü izlemek" yaklaşımı denedim ve ItemAdd olay sadece ben Outlook'u yeniden başlatana kadar yine mi o zaman, ben göndermek ilk e-posta için ateş gibi görünüyor olduğunu fark ettiğimi eklemek gerekir . Benim kodum şu şekildedir;

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

Ve yöntemi

...

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

Sen Öğeler (bir sınıf değişkeni olarak) canlı nesne tutmalısınız olaylar için ateş. Sizin durumunuzda derleyici, sentMail.Items nesnesini tutmak için geçici bir değişken oluşturur. Bu değişken çöp toplandığında olaylar durur. –

cevap

4

Eğer kalıcı bir iletişim kutusu (WPF/Win MessageBox) kullanıyorsanız, yalnızca ilk etkinlik tetikleyicisi alacak. engellenmeyen olay işleyicisi (muhtemelen bir öğe kuyruklandırma stratejisi) uygulamalısınız.

Bloke edilen UI çağrı modal iletişim kutularını kullanmayın - Outlook kullanıcı arabiriminin engellendiğini fark eder ve sonraki kesintileri tetiklemeyi göz ardı eder.

Bkz. this form post for reference.


Gönderilmiş Öğe depolama kontrol etmek için kullanıcıların tercihleri ​​hakkında endişe duyuyorsanız, sadece aşağıdaki parçacığını kullanarak bunları geçersiz ...

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 - cevabınız için teşekkürler, bu forum gönderisinde ItemAdd olayıyla ilgili çok yararlı bilgiler var. Şerefe. –

İlgili konular