2014-09-04 2 views
0

Я пытаюсь отменить отправку сообщения из Outlook. Мне нужно получить все поля из mailItem и закрыть его без отправки.Как отменить отправку сообщения из Outlook и закрыть форму

В моем коде я получаю сообщение об ошибке - Невозможно выполнить команду Item.Close во время события Item.Send.

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/spected-edits/5699992). – gunr2171

ответ

0

Некоторые методы MAILItem (такие как Send или Close) не могут быть вызваны в этом обработчике событий. Вы можете использовать таймер (используйте тот из пространства имен Forms, поскольку он работает в одном потоке) и включите его в событии ItemSEnd. Когда таймер срабатывает, отключите его и вызовите MailItem.Close - к тому времени вы выйдете из события ItemSent.

+0

Я попробовал. но событие таймера «галочка» добавляет огонь даже timeer.enabled = true; –

+0

Пожалуйста, введите код –

+0

ok. Я обновил код. –

Смежные вопросы