2014-09-04 49 views
0

我嘗試從Outlook取消發送郵件。我需要從mailItem中獲取所有字段並關閉它,而無需發送。如何取消從Outlook發送郵件並關閉表單

在我的代碼我得到一個錯誤 - 無法在事件Item.Send執行命令Item.Close。

public partial class MyMainForm 
{ 
    Outlook.Application oApp; 
    Outlook.MailItem mailItem; 
    Timer timer_CloseMail; 

    private void Mail_in_outlook() 
    { 
     oApp = new Outlook.Application(); 
     mailItem = Outlook.MailItem)oApp.CreateItem(Outlook.OlItemType.olMailItem); 

     timer_CloseMail = new Timer(); 
     timer_CloseMail.Interval = 1000; 
     timer_CloseMail.Tick += timer_CloseMail_Tick; 

     mailItem.To = ""; 
     mailItem.Subject = ""; 
     mailItem.HTMLBody = ""; 

     oApp.ItemSend += oApp_ItemSend; 
     mailItem.DeleteAfterSubmit = true; 

     mailItem.Display(true); 

     // get mailItem.HTMLBody and other field.... 

    } 

void oApp_ItemSend(object Item,ref bool Cancel) 
    { 
     Cancel = true; 
     timer_CloseMail.Enabled = true; 
    } 

private void timer_CloseMail_Tick(object sender, EventArgs e) 
    { 
     mailItem.Close(Outlook.OlInspectorClose.olDiscard); 
     timer_CloseMail.Enabled = false; 
    } 
+0

@ user3666197,不要[粗體單詞](http://stackoverflow.com/review/suggested-edits/5699992)。 – gunr2171 2014-09-04 20:53:43

回答

0

某些MAilItem方法(例如發送或關閉)不能在該事件處理程序中調用。您可以使用計時器(使用來自Forms命名空間的計時器,因爲它在同一個線程上運行)並在ItemSEnd事件中啓用它。當計時器觸發時,禁用它並調用MailItem.Close - 到那時您將出現在ItemSent事件中。

+0

我試過了。但計時器事件「嘀嗒」劑量火甚至timeer.enabled = true; – 2014-09-05 05:10:47

+0

請顯示您的代碼 – 2014-09-05 05:39:19

+0

好的。我更新了代碼。 – 2014-09-06 08:56:47

相關問題