如何将收件箱邮件移动到Outlook中的其他文件夹?

时间:2014-12-15 13:06:50

标签: c# outlook

是否有一个可以使用c#将邮件从收件箱移动到某个文件夹的功能? 我不想使用任何宏。

请不要用宏发布答案。我想创建一个服务,将收件箱邮件移动到其他文件夹。

3 个答案:

答案 0 :(得分:7)

Office的Visual Studio工具可以直接访问大型API(其中的大多数功能与VBA宏中的功能相同)。

您正在寻找的合适方法是MailItem.MoveMSDN解释了如何使用该方法:

Outlook.MAPIFolder destFolder = ((Outlook.MAPIFolder)this.Application.
    ActiveExplorer().Session.GetDefaultFolder
    (Outlook.OlDefaultFolders.olFolderInbox)).Folders["Test"];

//
// moveMail is a reference to the mail to move (Outlook.MailItem)
//
moveMail.Move(destFolder);

您必须创建Office Outlook加载项,并将此代码置于RibbonButton Click事件或类似事件之后。

另请注意one of my previous answers的说明:

  

如果您要求它在服务器上运行(例如使用ASP.NET),您应该从不使用VSTO / interop。

     

为什么?

     

This就是微软所说的。

     

Office互操作不是作为进程在服务器上运行而构建的。它太重了,取决于用于渲染的UI功能等......

在您的情况下,另一个选项可能是使用Exchange Web Services或其他邮件提供商提供的其他类似解决方案。

答案 1 :(得分:1)

 public Task MoveToArchive(MailItem selectedItem)
{
   //move the item
   selectedItem.Move(destinationFolderName);
}

答案 2 :(得分:0)

  

我想创建一个将收件箱邮件移动到其他文件夹的服务。

我担心,您无法使用VSTO或仅通过该服务自动执行任何Office应用程序。

Microsoft目前不建议也不支持从任何无人参与的非交互式客户端应用程序或组件(包括ASP,ASP.NET,DCOM和NT服务)自动化Microsoft Office应用程序,因为Office在此环境中运行Office时,可能会出现不稳定的行为和/或死锁。

您可以在Considerations for server-side Automation of Office文章中详细了解相关内容。作为解决方法,您可以使用低级API来访问Outlook电子邮件 - 扩展MAPI(或围绕该API的任何其他第三方包装)。