我在Outlook中有一个单独的.Net应用程序。我想使用Office.Interop(避免redmeption.dll)发送并保存该应用程序发送的电子邮件。但是当我尝试在Send()函数之后保存电子邮件时,我得到了以下异常:"该项目已被移动或删除。"
似乎Outlook在发送后移动了电子邮件项目。
所以,任何人都可以建议我如何保存"已发送"电子邮件项目到磁盘?
我需要保存的msg文件状态为“已发送”。所以,保存Item_Send事件对我的情况不起作用。谢谢!
这是我的代码
public bool SendAndSavAs(Outlook.Account emailAccount, string toEmailAddress)
{
Outlook.MailItem mailItem = null;
try
{
mailItem = OutlookApp.CreateItem(Outlook.OlItemType.olMailItem) as Outlook.MailItem;
mailItem.Subject = "Test Subject";
mailItem.BodyFormat = Outlook.OlBodyFormat.olFormatPlain;
mailItem.Body = "Test Body";
// Add recipient using display name, alias, or smtp address
mailItem.Recipients.Add(toEmailAddress);
mailItem.Recipients.ResolveAll();
mailItem.SendUsingAccount = emailAccount;
// send email
mailItem.Send();
// save the Sent mail to local disk (****but have exception occurs ****)
mailItem.SaveAs(@"c:\temp\test.msg");
return true;
}
catch (Exception ex)
{
throw ex;
}
finally
{
ReleaseComObject(mailItem);
}
}
答案 0 :(得分:0)
您需要处理Sent Items
文件夹中的ItemAdd事件。在事件处理程序中,您可以调用SaveAs
方法。
此外,您可以考虑使用MailItem类的SaveSentMessageFolder属性,该属性允许设置一个Folder对象,该对象表示在发送后将保存电子邮件副本的文件夹。
答案 1 :(得分:0)
在您致电发送后,您可以对该消息做的唯一事情是释放您对它的引用 - 它现在属于传输提供商。
另请注意,“发送”是异步的 - 邮件将被发送,并且仅在发送邮件后才会填充其与发件人相关的属性。您有机会在该状态下访问该消息是Items.ItemAdd
事件触发已发送邮件文件夹的时间。