Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用C在Outlook加载项中调用SaveAs之前,将邮件项设置为已发送#_C#_Email_Outlook_Outlook Addin_Outlook 2010 - Fatal编程技术网

C# 使用C在Outlook加载项中调用SaveAs之前,将邮件项设置为已发送#

C# 使用C在Outlook加载项中调用SaveAs之前,将邮件项设置为已发送#,c#,email,outlook,outlook-addin,outlook-2010,C#,Email,Outlook,Outlook Addin,Outlook 2010,我正在构建一个Outlook 2010加载项以将其与一些业务软件集成,并捕获了ItemSend事件。我检查它是否是邮件项,如果是,我调用SaveAs函数将其另存为.msg到文件系统(在users temp文件夹中) 我继续读取文件内容,并使用webservices将文件发送到服务器。一切都很好 我遇到的问题是,如果我打开它保存的文件,Outlook会将其作为仍在编写的邮件打开,用户可以很容易地再次单击“发送”按钮 是否有一种方法可以标记该项目在保存前已发送,以便在该项目以可读电子邮件而不是合成电

我正在构建一个Outlook 2010加载项以将其与一些业务软件集成,并捕获了ItemSend事件。我检查它是否是邮件项,如果是,我调用SaveAs函数将其另存为.msg到文件系统(在users temp文件夹中)

我继续读取文件内容,并使用webservices将文件发送到服务器。一切都很好

我遇到的问题是,如果我打开它保存的文件,Outlook会将其作为仍在编写的邮件打开,用户可以很容易地再次单击“发送”按钮

是否有一种方法可以标记该项目在保存前已发送,以便在该项目以可读电子邮件而不是合成电子邮件的形式打开后再打开该项目?

请查看(以及该页面上的最后一个答案),这可能会对您有所帮助

(利用事件)

看一看(以及该页上的最后一个答案),这可能会对您有所帮助


(利用事件)

那么,在它移动到已发送的项目时捕获它,然后保存它?我没想到。谢谢。:)换句话说:您可以使用“已发送邮件”文件夹上的“项目”添加事件,而不是使用Application.ItemSend事件-到那时,邮件将处于“已发送”状态。因此,在邮件移动到“已发送邮件”时捕获它,然后保存它?我没想到。谢谢。:)换句话说:您可以在“已发送邮件”文件夹中使用Items.ItemAdd事件,而不是使用Application.ItemSend事件-此时邮件将处于“已发送”状态。
void Application_ItemSend(object Item, ref bool Cancel)
{
    if(Item is Outlook.MailItem)
    {
        Outlook.MailItem mailitem = (Outlook.MailItem)Item;
        string filename = "somefilename.msg";
        string path = System.IO.Path.GetTempPath();
        string fullPathName = path+filename;
        mailitem.SaveAs(fullPathName, Outlook.OlSaveAsType.olMSG);
    }
}