我希望当用户发送邮件时,将其副本制作并发送给其他人以进行存档。用户使用关键字来指定是否应存档邮件。 (我需要在第二封邮件中添加一些数据,这些数据不应出现在第一封邮件中)
因此,我在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)进行归档,其中包含其他无法发送的数据出现在第一名
编辑解决方案: 当我将消息保存在目录中时,我通过在创建文件时添加一个事件来修改代码
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");
}
答案 0 :(得分:1)
创建一个计时器(在主线程上触发时,使用Forms命名空间中的Timer类)并在Application.ItemSend
事件中启用它。创建新消息,保存它,并将其条目ID存储在列表中。当计时器启动时,禁用计时器,使用列表中保存的条目ID打开消息(Namespace.GetItemfromID
),发送消息,清除列表。