Outlook 2010. Want to create a rule that moves all mail from my inbox to another folder:

  • Has been read
  • Is older than X days

I was looking at Auto-archiving, but it does not seem to let me be this specific with my criteria.

  • Could someone forward this to Microsoft Outlook team? – Jayan Mar 16 '17 at 6:18

The best way I've found to do this at the moment is to create a new Search Folder with custom criteria e.g with items modified on or before a certain date. I then right-click the folder and choose 'Delete All' which sends all items in the Search Folder to the bin.

  • This is not an answer, because the messages are not moved to a folder, they are only moved to the bin. – Pro Backup Dec 3 '16 at 12:22

The search folders are the answer, however the OP asked about mail older than a particular date. If you use "modified last week" then it shows everything within the last week and filters out things older than 1 week. For the inverse that, use language like:

  • 8 days ago
  • 1 week ago
  • etc...

enter image description here

  • Great, did not know that you can write natural language for the value! – RipperDoc Aug 7 '14 at 5:39

I had been looking for something similar. I have to use a macro as auto-archive is disabled for my installation. Here's what I came up with:

Option Explicit
Private Sub Application_MAPILogonComplete()
    ' this runs on app startup
    Const MSG_AGE_IN_DAYS = 7

    Dim oFolder As Folder
    Dim oFilteredItems As Outlook.Items
    Dim oItem As MailItem
    Dim oDate As Date

    oDate = DateAdd("d", -MSG_AGE_IN_DAYS, Now())
    oDate = Format(oDate, "mm/dd/yyyy")

    ' you can use this command to select a folder
    'Set oFolder = Application.Session.PickFolder

    Set oFolder = Me.Session.Folders.GetFirst

    ' shows all the folder names
    'For Each fldr In oFolder.Folders
    '    Debug.Print fldr.Name
    'Next fldr

    ' this was the sub-folder I wanted to cleanup.
    Set oFolder = oFolder.Folders("Storage").Folders("batch runs")

    Debug.Print "checking " & oFolder.FolderPath
    Debug.Print "for msgs older than " & oDate

    ' you can modify the filter to suit your needs
    Set oFilteredItems = oFolder.Items.Restrict("[Received] <= '" & oDate & "' And [Unread] = True")

    Debug.Print "removing " & oFilteredItems.Count & " items"

    While oFilteredItems.Count > 0
        Set oItem = oFilteredItems.GetFirst
        Debug.Print "   " & oItem.UnRead & " " & oItem.Subject

        ' the remove method permanently deletes the item.
        oFilteredItems.Remove 1
        'Debug.Print oFilteredItems.Count & " items left"

    Debug.Print ". end"

    Set oFolder = Nothing
    Set oFilteredItems = Nothing
    Set oItem = Nothing
End Sub

This macro is attached to the last phase of the application's lifecycle; it runs when Outlook starts up. You'll probably also want to sign it (and trust your signature) so you do get security complaints.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.