我尝试取消从Outlook发送邮件。我需要从mailItem获取所有字段并关闭它而不发送。
在我的代码中我收到错误 - 无法在事件Item.Send中执行命令Item.Close。
public partial class MyMainForm
{
Outlook.Application oApp;
Outlook.MailItem mailItem;
System.Threading.Timer timer_CloseMail;
private void Mail_in_outlook()
{
oApp = new Outlook.Application();
mailItem = Outlook.MailItem)oApp.CreateItem(Outlook.OlItemType.olMailItem);
TimerCallback tm = new TimerCallback(CloseMail);
timer_CloseMail = new Timer(tm);
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;
MailtimeTimer.Change(0, 0);
}
private void CloseMail(object sender)
{
mailItem.Close(Outlook.OlInspectorClose.olDiscard);
}
答案 0 :(得分:0)
无法在该事件处理程序中调用某些MAilItem方法(例如Send或Close)。您可以使用计时器(使用Forms命名空间中的计时器,因为它在同一个线程上运行)并在ItemSEnd事件中启用它。当计时器触发时,禁用它并调用MailItem.Close - 到那时你将离开ItemSent事件。