【发布时间】:2019-02-15 09:15:45
【问题描述】:
我希望当用户发送他的邮件时,会制作一份副本并发送给另一个人,以便存档。用户使用关键字来指定是否应归档邮件。 (我需要在第二封邮件中添加一些数据,这些数据不应该出现在第一封邮件中)
所以我在 C# 中开发了一个插件,我在其中拦截单击“发送”事件以复制邮件并发送它。只是,在此事件中无法发送第二封电子邮件。所以我想为我的事件添加一个回调,这样一旦发送了第一封电子邮件,就发送了第二封,但是我无法实现对我的代码的回调(我不知道如何在事件上做到这一点,或者即使有可能)
Outlook.MailItem mailCopy; //Copy of my first mail
bool sndCopy = false;
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
this.Application.ItemSend += new Microsoft.Office.Interop.Outlook.ApplicationEvents_11_ItemSendEventHandler(Application_ItemSend); //event click send
}
private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
{
}
private void Application_ItemSend(object Item, ref bool Cancel)
{
Outlook.Application oApp;
Outlook._NameSpace oNS;
Outlook.MAPIFolder oFolder;
oApp = new Outlook.Application();
oNS = (Outlook._NameSpace)oApp.GetNamespace("MAPI");
Outlook.MailItem mail1 = (Outlook.MailItem)Item;
this.mailCopy = (Outlook.MailItem)Item;
Outlook.MailItem mail = (Outlook.MailItem)Item;
foreach(Outlook.Recipient rcp in mail.Recipients){
if(rcp.Address == "Robots"){
this.sndCopy = true;
break;
}
}
}
必须发送两封电子邮件,第一封可以发送给任何人,第二封必须发送给机器人以存档在电子邮件地址(例如robot@google.fr)以及其他无法发送的附加数据出现在1号
编辑解决方案: 当我将消息保存在目录中时,我通过在创建文件时添加一个事件来修改我的代码
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
FileSystemWatcher fileSystemWatcher = new FileSystemWatcher();
fileSystemWatcher.Path = path;
this.Application.ItemSend += new Microsoft.Office.Interop.Outlook.ApplicationEvents_11_ItemSendEventHandler(Application_ItemSend); //event click send
fileSystemWatcher.Created += FileSystemWatcher_Created;
fileSystemWatcher.EnableRaisingEvents = true;
}
private void Application_ItemSend(object Item, ref bool Cancel)
{
Outlook.Application oApp;
Outlook._NameSpace oNS;
oApp = new Outlook.Application();
oNS = (Outlook._NameSpace)oApp.GetNamespace("MAPI");
Outlook.MailItem mail = (Outlook.MailItem)Item;
mail.SaveAs(path + "\\files.msg", Microsoft.Office.Interop.Outlook.OlSaveAsType.olMSG);
}
private void FileSystemWatcher_Created(object sender, FileSystemEventArgs e)
{
Outlook.Application oApp = new Outlook.Application();
Outlook.MailItem msg = (Outlook.MailItem)oApp.CreateItemFromTemplate(path + "\\files.msg", Type.Missing);
msg.Send();
File.Delete(path + "\\files.msg");
}
【问题讨论】:
标签: c# callback outlook-addin