vba - 在Outlook中永久删除邮件项

标签 vba outlook outlook-2010 outlook-2007 outlook-2003

我正在尝试使用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/

相关文章:

excel - 在VBA中使用字符串变量设置对象变量? (Excel 2013)

excel - 如何使用 Excel VBA 最大化特定显示器上的窗口?

python - 生成和发送 MS Outlook 任务

vba - 从 Outlook 宏运行 Excel 宏?

c# - Outlook 2010 中的命令栏

vba - 如何等到发送电子邮件并在 Outlook VBA 中关闭窗口?

VBA: undefined variable

winforms - 在不使用图像的情况下在 VBA 中创建更好看的按钮

c# - Outlook App for Office 任务 Pane

c# - 阻止 MailItem.Reply 在 Outlook 2010 中打开检查器窗口?