【发布时间】:2017-06-12 07:24:25
【问题描述】:
我创建了一个规则,它根据收到的电子邮件的主题启动一个 VBA 脚本(规则:主题“MY_SUBJECT”-> 启动脚本)。
然后 VBA 脚本正在做一些事情,然后它最终应该删除原始电子邮件。
这部分很简单:
Sub doWorkAndDeleteMail(Item As Outlook.MailItem)
' doSomething:
' delete email from inbox
Item.Delete
End Sub
现在电子邮件将位于已删除项目文件夹中。但我需要实现的是,还要从已删除项目文件夹中删除此邮件。因为我知道这封邮件的主题(因为这首先触发了我的规则),所以我尝试了以下方法:
Sub doWorkAndDeleteMail(Item As Outlook.MailItem)
' doSomething:
' delete email from inbox
Item.Delete
End Sub
' delete email from deleted items-folder
Dim deletedFolder As Outlook.Folder
Set deletedFolder = Application.GetNamespace("MAPI"). _
GetDefaultFolder(olFolderDeletedItems)
Dim i As Long
For i = myFolder.Items.Count To 1 Step -1
If (deletedFolder.Items(i).Subject) = "MY_SUBJECT" Then
deletedFolder.Items(i).Delete
Exit For
End If
Next if
End Sub
嗯,这基本上是可行的:具有此主题的邮件将在已删除项目文件夹中找到,并且将被删除,是的。
但遗憾的是它没有按预期工作:
这种永久删除仅在我第二次启动脚本后才有效。
因此,触发我的脚本的电子邮件将永远不会在此脚本的实际运行中被永久删除,而只会在下一次运行中被删除(一旦收到下一封带有我的规则的触发器主题的电子邮件 - 但接下来的这封电子邮件不会再次被删除)。
你知道我在这里做错了什么吗?不知何故,我似乎需要以某种方式刷新我的已删除项目文件夹。还是我必须以某种方式明确地提交我的第一个Item.Delete?
【问题讨论】:
-
我以前见过这个解决方案,是的。我没有安装 RDO 或 CDO(我也想要一个独立的解决方案)。那里的第三个方法(用属性标记邮件)对我来说看起来完全一样:我搜索主题或其他属性并不重要。在该线程的底部,有人声称有一种“删除”方法可以从一开始就永久删除邮件项目。但是对于“Outlook.MailItem”类型(这是脚本的输入)似乎不存在这种删除方法。无论如何:我想知道我的方法有什么问题。
-
我尝试了设置并搜索了一个主题:正如预期的那样,行为完全一样。删除仅在下次运行脚本时有效。
-
您是否尝试过该答案中的第一种方法 - 将项目移动到已删除文件夹,然后将其删除?
-
@TIm Williams 是的,但这只是将它移到那里。最后的删除没有发生 - 它的行为再次表现,好像它当时并不真正在该文件夹中......
标签: vba email outlook outlook-2010