使用VBA永久删除Outlook中的MailMessage?

时间:2009-07-10 16:33:48

标签: vba outlook message outlook-vba

我正在寻找一种使用VBA代码永久删除Outlook 2000中的MailMessage的方法。我想这样做,而不必做第二个循环来清空已删除的项目。

基本上,我正在寻找一个等同于点击消息的UI方法并点击 SHIFT + DELETE 的代码。

有这样的事吗?

5 个答案:

答案 0 :(得分:11)

先尝试移动它然后删除它(适用于2000年的某些补丁)或使用RDO或CDO为你完成这项工作(你必须安装它们)

  Set objDeletedItem = objDeletedItem.Move(DeletedFolder)
  objDeletedItem.Delete

CDO方式

Set objCDOSession = CreateObject("MAPI.Session")
objCDOSession.Logon "", "", False, False
Set objMail = objCDOSession.GetMessage(objItem.EntryID, objItem.Parent.StoreID)
objMail.Delete

RDO

set objRDOSession = CreateObject("Redemption.RDOSession")
objRDOSession.Logon 
set objMail = objRDOSession.GetMessageFromID(objItem.EntryID>)
objMail.Delete

您还可以在删除邮件之前先将邮件标记,然后循环显示已删除邮件文件夹,然后再次找到该邮件并再次删除该邮件。使用Userproperty标记它。

objMail.UserProperties.Add "Deleted", olText
objMail.Save
objMail.Delete

循环浏览已删除的项目以查找该userprop

 Set objDeletedFolder = myNameSpace.GetDefaultFolder(olFolderDeletedItems)
    For Each objItem In objDeletedFolder.Items
        Set objProperty = objItem.UserProperties.Find("Deleted")
        If TypeName(objProperty) <> "Nothing" Then
            objItem.Delete
        End If
    Next

答案 1 :(得分:2)

我知道这是一个旧线程,但由于我最近有理由编写一个执行此操作的宏,我想我会分享。我发现Remove方法似乎是永久删除。我正在使用这个代码段:

While oFilteredItems.Count > 0
    Debug.Print "   " & oFilteredItems.GetFirst.Subject
    oFilteredItems.Remove 1
Wend

我首先列出了按某些条件过滤的项目列表。然后,我一次只删除一个,直到它消失。

HTH

答案 2 :(得分:1)

您可以使用以下方法,基本上您正在删除当前正在执行的所有电子邮件,然后调用此行以清空已删除邮件文件夹。代码在jscript中,但如果你真的需要我,我可以翻译:)

var app = GetObject("", "Outlook.Application"); //use new ActiveXObject if fails

app.ActiveExplorer().CommandBars("Menu Bar").Controls("Tools").Controls('Empty "Deleted Items" Folder').Execute();

答案 3 :(得分:1)

最简单的解决方案,类似于第一种方式:

  FindID = deleteme.EntryID
  deleteme.Delete
  set deleteme = NameSpace.GetItemFromID(FindID)
  deleteme.Delete

做两次,它会永远消失,没有性能杀戮循环。 (NameSpace可以是特定的命名空间变量,如果不在默认存储中。)请注意,这仅适用于您不跨商店删除,这可以更改EntryID或完全删除它。

答案 4 :(得分:0)

最近我不得不永久删除所有联系人。这对我有用(Outlook 2016)。您已经在垃圾箱文件夹中获得了对该项目的新引用,否则将显示“已删除”或类似内容。从头开始,最近移动的项目就在那里。然后调用Delete即可实现永久删除。该代码段可以循环使用。

    myContacts(i).Move (trashFolder)
    trashCount = trashFolder.Items.Count
    For j = trashCount To 1 Step -1
        Set trashItem = trashFolder.Items(j)
        If trashItem.MessageClass = "IPM.Contact" Then
            trashItem.Delete
        Else
            Exit For
        End If
    Next