Vb.net MailItem.Delete拒绝删除已删除邮件文件夹中的邮件

Vb.net MailItem.Delete拒绝删除已删除邮件文件夹中的邮件,vb.net,mailitem,Vb.net,Mailitem,不确定以下代码为什么没有从已删除邮件文件夹中永久删除邮件 MailItem当然会在Deleted Items文件夹中结束,但是Delete似乎什么也没做。放置第二个Delete会导致异常,正如您所期望的,因为它不在那里 我可以通过Outlook手动永久删除邮件项目 代码: 要永久删除邮件项目,您必须在已删除文件夹中的项目中循环 要执行此操作,请查看以下代码: Dim oApp As New Outlook.Application Dim oMapi As Outlook.NameSpace =

不确定以下代码为什么没有从
已删除邮件
文件夹中永久删除
邮件

MailItem
当然会在
Deleted Items
文件夹中结束,但是
Delete
似乎什么也没做。放置第二个
Delete
会导致异常,正如您所期望的,因为它不在那里

我可以通过Outlook手动永久删除
邮件项目

代码:


要永久删除
邮件项目
,您必须在
已删除
文件夹中的
项目
中循环

要执行此操作,请查看以下代码:

Dim oApp As New Outlook.Application

Dim oMapi As Outlook.NameSpace = oApp.GetNamespace("MAPI")
Dim oFolders As Outlook.Folders = oMapi.Folders
Dim oFolder As Outlook.MAPIFolder = oFolders(oMapi.DefaultStore.DisplayName).Folders("Deleted Items")

Dim oMailItem As Outlook.MailItem = CType(oApp.Session.OpenSharedItem("C:\sometestmail.msg"), Outlook.MailItem)
oMailItem.UserProperties.Add("DeleteMe", Outlook.OlUserPropertyType.olText)
oMailItem.Move(oFolder)
oMailItem = Nothing

For Each item As Outlook.MailItem In oFolder.Items
    Dim oProperty As Outlook.UserProperty = item.UserProperties.Find("DeleteMe")

    If oProperty IsNot Nothing Then
        item.Delete()
    End If
Next
我的代码将与您的代码不同,因为我已将选项严格设置为。我建议你也这样做。从长远来看,这将有所帮助

请注意,我正在将
UserProperty
设置为
MailItem
,然后将其移动到
Deleted
文件夹。这将有助于识别要永久删除的单个
邮件项。如果要永久删除
Deleted
文件夹中的所有
邮件
,则需要以下代码:

Dim oApp As New Outlook.Application

Dim oMapi As Outlook.NameSpace = oApp.GetNamespace("MAPI")
Dim oFolders As Outlook.Folders = oMapi.Folders
Dim oFolder As Outlook.MAPIFolder = oFolders(oMapi.DefaultStore.DisplayName).Folders("Deleted Items")

Dim oMailItem As Outlook.MailItem = CType(oApp.Session.OpenSharedItem("C:\sometestmail.msg"), Outlook.MailItem)
oMailItem.Move(oFolder)
oMailItem = Nothing

For i = oFolder.Items.Count To 1 Step -1
    CType(oFolder.Items(i), Outlook.MailItem).Delete()
Next
要使其正常工作,您需要向后遍历
已删除的
文件夹。查看文件,其中说明:

Delete方法删除集合中的单个项。若要删除文件夹的“项目”集合中的所有项目,必须从文件夹中的最后一个项目开始删除每个项目。例如,在文件夹AllItems的items集合中,如果文件夹中有n个项目,则从AllItems.item(n)开始删除该项目,每次递减索引,直到删除AllItems.item(1)


要永久删除
邮件项目
,您必须在
已删除
文件夹中的
项目
中循环

要执行此操作,请查看以下代码:

Dim oApp As New Outlook.Application

Dim oMapi As Outlook.NameSpace = oApp.GetNamespace("MAPI")
Dim oFolders As Outlook.Folders = oMapi.Folders
Dim oFolder As Outlook.MAPIFolder = oFolders(oMapi.DefaultStore.DisplayName).Folders("Deleted Items")

Dim oMailItem As Outlook.MailItem = CType(oApp.Session.OpenSharedItem("C:\sometestmail.msg"), Outlook.MailItem)
oMailItem.UserProperties.Add("DeleteMe", Outlook.OlUserPropertyType.olText)
oMailItem.Move(oFolder)
oMailItem = Nothing

For Each item As Outlook.MailItem In oFolder.Items
    Dim oProperty As Outlook.UserProperty = item.UserProperties.Find("DeleteMe")

    If oProperty IsNot Nothing Then
        item.Delete()
    End If
Next
我的代码将与您的代码不同,因为我已将选项严格设置为。我建议你也这样做。从长远来看,这将有所帮助

请注意,我正在将
UserProperty
设置为
MailItem
,然后将其移动到
Deleted
文件夹。这将有助于识别要永久删除的单个
邮件项。如果要永久删除
Deleted
文件夹中的所有
邮件
,则需要以下代码:

Dim oApp As New Outlook.Application

Dim oMapi As Outlook.NameSpace = oApp.GetNamespace("MAPI")
Dim oFolders As Outlook.Folders = oMapi.Folders
Dim oFolder As Outlook.MAPIFolder = oFolders(oMapi.DefaultStore.DisplayName).Folders("Deleted Items")

Dim oMailItem As Outlook.MailItem = CType(oApp.Session.OpenSharedItem("C:\sometestmail.msg"), Outlook.MailItem)
oMailItem.Move(oFolder)
oMailItem = Nothing

For i = oFolder.Items.Count To 1 Step -1
    CType(oFolder.Items(i), Outlook.MailItem).Delete()
Next
要使其正常工作,您需要向后遍历
已删除的
文件夹。查看文件,其中说明:

Delete方法删除集合中的单个项。若要删除文件夹的“项目”集合中的所有项目,必须从文件夹中的最后一个项目开始删除每个项目。例如,在文件夹AllItems的items集合中,如果文件夹中有n个项目,则从AllItems.item(n)开始删除该项目,每次递减索引,直到删除AllItems.item(1)


可能是因为delete就是这么做的。。。将其移动到已删除文件夹。如果outlook设置为关闭时删除。。当你关上它时,它们就会消失。否则,它们将留在那里。但您可能希望检查此链接或此链接,因为这可能是delete所做的。。。将其移动到已删除文件夹。如果outlook设置为关闭时删除。。当你关上它时,它们就会消失。否则,它们将留在那里。但您可能需要检查此链接或此链接