我正在尝试将最后一次从Outlook发送到我的桌面的邮件保存为.msg格式。 但是我在代码的最后一行中出现代码错误,如下所示:
((Microsoft.Office.Interop.Outlook.MailItem)mail).SaveAs(mydesktop+ "\\Myapplication\\" + subject.Replace(":", "").Replace("/", "").Replace("|", "") + ".msg", Microsoft.Office.Interop.Outlook.OlSaveAsType.olMSG);
错误:System.Runtime.InteropServices.COMException:“该项目已被移动或删除。”
string mailto = labelControl53.Text + ";" + labelControl56.Text ;
string cc = "myaccount@mymail.com";
string subject= labelControl7.Text + "-" + comboBoxEdit1.Text + "-" + textEdit6.Text + " Yüklemesi hk.";
string mydesktop= Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
Microsoft.Office.Interop.Outlook.Application mailat = new Microsoft.Office.Interop.Outlook.Application();
Microsoft.Office.Interop.Outlook.MailItem mail = (Microsoft.Office.Interop.Outlook.MailItem)mailat.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem);
mail.To = mailto;
mail.CC = cc;
mail.Subject = subject;
mail.Importance = Microsoft.Office.Interop.Outlook.OlImportance.olImportanceHigh;
mail.BodyFormat = Microsoft.Office.Interop.Outlook.OlBodyFormat.olFormatHTML;
mail.HTMLBody = getHTMLupload();
((Microsoft.Office.Interop.Outlook.MailItem)mail).Send();
((Microsoft.Office.Interop.Outlook.MailItem)mail).SaveAs(mydesktop+ "\\Myapplication\\" + subject.Replace(":", "").Replace("/", "").Replace("|", "") + ".msg", Microsoft.Office.Interop.Outlook.OlSaveAsType.olMSG);
System.Runtime.InteropServices.COMException:'该项目已被移动或删除。
答案 0 :(得分:1)
此邮件对象在发送后被释放,因此您无权访问。 您可能必须添加一个事件处理程序。这样的事情可能会起作用。
((Outlook.ItemEvents_10_Event)mail).Send += new Microsoft.Office.Interop.Outlook.ItemEvents_10_SendEventHandler(SaveSentMail);
static void SaveSentMail(ref bool Cancel)
{
mail.SaveAs(mydesktop+ ....);
}
答案 1 :(得分:0)
如果要在Outlook中保存最后发送的项目,则需要处理ItemAdd
文件夹中的Items
类的Sent Items
事件。通常,邮件在发送后立即放入Sent Items
文件夹中。但是,用户或其他加载项可以设置DeleteAfterSubmit属性,该属性设置一个布尔值,如果在发送邮件时未保存该邮件的副本,则设置为True;如果将副本保存在中,则设置为False。已发送邮件文件夹。
或者只需在SaveAs
方法之前在Outlook中提交项目之前调用Send
。