我正在尝试使用Outlook API删除mailitem。像下面这样
Dim objMail
For each objMail in objFolder.Items
objMail.Delete
Next
显然,立即删除项目很简单。 Outlook只是将其移动到“已删除邮件”文件夹中,而不是将其删除。我尝试使用以下方法获取“已删除邮件”文件夹
OutlookNameSpace.GetDefaultFolder(olDeletedItems)
并再次删除邮件,但是代码正在处理的PST不是默认邮箱,并且返回的文件夹是错误的已删除邮件文件夹。如何永久删除此邮件项?
我试图遍历当前商店中的所有文件夹,但是除了通过比较名称之外,无法告诉哪个文件夹是已删除项目文件夹,因为程序将以多种语言使用并且名称不同,所以我无法做到这一点每个版本。
PS:我不能使用第三方dll :(
救命!
最佳答案
您的代码的第一个问题是您使用的不合适的循环。如果要删除(VBA中几乎所有内容),则需要将集合从最后一个元素循环到第一个元素。如果不是,则更改集合的顺序-删除第一个元素>>第2个元素后,该元素将移动到第1个位置,并且不会被删除。
因此,此代码应删除DeltetedItems folder
中的所有项目:
Sub Delete_all_from_dust_bin()
Dim myFolder As Outlook.Folder
Set myFolder = Application.GetNamespace("MAPI"). _
GetDefaultFolder(olFolderDeletedItems)
Dim i As Long
For i = myFolder.items.Count To 1 Step -1
myFolder.items(i).Delete
Next i
End Sub
显然,您可以准备类似的代码以从任何其他文件夹中删除。您将运行两个删除循环以确保删除项目。
来自MSDN的
MailItem.Delete Method
的一些附加说明:Delete方法删除集合中的单个项目。删除全部
文件夹的“项目”集合中的项目,必须删除每个项目
从文件夹中的最后一项开始。例如,在项目中
文件夹的集合AllItems(如果其中包含n个项目)
文件夹,开始删除AllItems.Item(n)处的项目,递减
每次删除该索引,直到您删除AllItems.Item(1)。
由于OP的一些评论,请编辑。
即使您需要删除某些项目(不是全部),也要记住使用上面介绍的循环类型。
如果您需要在其他商店中引用任何其他
DeletedItems folder
,则可以通过以下方式找到此文件夹:'with index reference
Application.GetNamespace("MAPI").Stores(2).getdefaultfolder(olFolderDeletedItems)
'with name reference
Application.GetNamespace("MAPI").Stores("Business Mail").getdefaultfolder(olFolderDeletedItems)
我不知道这是否适用于所有Outlook版本,但适用于Outlook 2010。
关于vba - 在Outlook中永久删除邮件项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18111405/