使用VB.net将邮件移动到Outlook中的其他文件夹时出现Mailitem移动错误

使用VB.net将邮件移动到Outlook中的其他文件夹时出现Mailitem移动错误,vb.net,outlook,com-interop,Vb.net,Outlook,Com Interop,使用VB.net将邮件移动到Outlook中的其他文件夹时出现Mailitem移动错误 在VB.net中尝试使用Outlook Com Interop移动邮件项目时,我在Outlook中不断遇到错误。我在访问邮件、阅读邮件或获取相关文件夹时没有遇到任何问题,只是在尝试间歇性移动邮件时出现了此错误 以下是应用程序报告的错误消息: `System.Runtime.InteropServices.COMException(0x80040107): The operation failed. at M

使用VB.net将邮件移动到Outlook中的其他文件夹时出现Mailitem移动错误

在VB.net中尝试使用Outlook Com Interop移动邮件项目时,我在Outlook中不断遇到错误。我在访问邮件、阅读邮件或获取相关文件夹时没有遇到任何问题,只是在尝试间歇性移动邮件时出现了此错误

以下是应用程序报告的错误消息:

 `System.Runtime.InteropServices.COMException(0x80040107): The operation failed. at Microsoft.Office.Interop.Outlook_Mailitem.Move(MAPIFolderDestFldr) at ApplicationName.MainWindow.EmailImport() at System.Threading....`
好吧,你明白了

以下是相关代码:

Dim OutlookAp As New Outlook.Application
Dim NS As Outlook.Namespace = OutlookAp.GetNamespace("MAPI")
Dim ObjFolder As Outlook.Folder
Dim Inbox As Outlook.Folder
Dim CEBFolder As Outlook.Folder
Dim DestinationFolder As Outlook.Folder
Dim Mesg As Outlook.Mailitem
以下是我获取文件夹的方式:

For Each ObjFolder in NS.Folders
    If ObjFolder.Name = "CEB Folder Name" Then
        CEBFolder = ObjFolder
        Exit For
    End If
Next ObjFolder
For Each ObjFolder in CEBFolder.Folders
    If ObjFolder.Name = "Inbox" then
        Inbox = ObjFolder
        Exit For
    End If
Next ObjFolder

For Each ObjFolder in Inbox.Folders
    If ObjFolder.Name = "Destination Folder" then
        DestinationFolder = ObjFolder
        Exit For
    End If
Next ObjFolder
编辑:包括其余文件夹:

For Each ObjFolder in NS.Folders
    If ObjFolder.Name = "CEB Folder Name" Then
        CEBFolder = ObjFolder
        Exit For
    End If
Next ObjFolder
For Each ObjFolder in CEBFolder.Folders
    If ObjFolder.Name = "Inbox" then
        Inbox = ObjFolder
        Exit For
    End If
Next ObjFolder

For Each ObjFolder in Inbox.Folders
    If ObjFolder.Name = "Destination Folder" then
        DestinationFolder = ObjFolder
        Exit For
    End If
Next ObjFolder
等等。下面是我如何传递信息的:

For Counter = Inbox.Items.Count to 1 Step -1
    If TypeName(Inbox.Items(Counter)) = "MailItem" then
        Mesg = Ctype(Inbox.Items(Counter), Outlook.MailItem)
        'Do some parsing of the message
        Mesg.Move(DestinationFolder)
    End If
Next Counter
差不多就是这样。这段代码似乎在大多数情况下都很成功,但Outlook偶尔会不让我移动一条消息,“句号”


一如既往,我们非常感谢您的任何想法。

看起来您从未分配过
DestinationFolder
,因此,您试图将邮件移动到
Null

您可能无法移动邮件项,这些邮件项是系统对未送达电子邮件的响应等。它们显示为邮件项类型,但不支持在文件夹之间移动-可能是虚拟邮件项。请参阅其他关于处理未送达消息的线程

我只是省略了该代码,因为它会重复,但如果您认为有帮助,我可以将其包括在内。但是,我已经设置了目标文件夹并验证了对象是否正确加载。我编辑了上面的问题,以明确我正在获取所有文件夹。很抱歉造成混淆。错误为MAPI\u E\u INVALID\u ENTRYID,这意味着该项目已消失(例如,新邮件已由规则或用户移动)