How to Auto Set an Expiry Time for Incoming or Outgoing Emails with Outlook VBA

If you would like to let Outlook auto delete specific mails, you can set an expiry time for the emails and use AutoArchive to delete the expired emails when the time is up. This article will teach you how to auto set an expiry time for all incoming emails via Outlook VBA.

In general, AutoArchive can work on either a whole folder or an entire mailbox. If you want to enable it to delete specific items only, you will need to firstly specify the expiry time for the emails. Thereby, the next time when the AutoArchive runs, it will automatically delete the expired time. In addition, as you can see, the mails with an expiry time will display in grey strikethrough font, like the image below.

Expired Emails

You can set the expiry time for emails in the current email Properties window. By this means, you have to specify it manually every time, which is cumbersome.

Set Expiry Time for Emails Manually

Under this circumstance, you must wish that Outlook can auto set the expiry time for incoming or outgoing emails. You can accomplish it with Outlook VBA. Here are the elaborate steps and codes.

Auto Set an Expiry Time for Incoming or Outgoing Emails

  1. In the first place, launch Outlook application and shift to “Developer” tab.
  2. Then click “Visual Basic” button.
  3. In the new popup window, open “ThisOutlookSession” VBA project and then copy and paste the following codes into it.
Public WithEvents olItems As Items
Private Sub Application_Startup()
    'To focus on the new incoming emails
    Set olItems = Application.Session.GetDefaultFolder(olFolderInbox).Items
    'If want to focus on the outgoing emails
    'Use "Set olItems = Application.Session.GetDefaultFolder(olFolderSentMail).Items
End Sub
Private Sub olItems_ItemAdd(ByVal Item As Object)
    Dim strMsg As String
    Dim nRes As Integer

    If Item.ExpiryTime = #1/1/4501# Then
       '("m",2,Item.ReceivedTime) refers to 2 months after the item arrives in the specified folder
       'You can change it as per your actual needs
       Item.ExpiryTime = DateAdd("m", 2, Item.ReceivedTime)
       strMsg = "The new email " & Chr(34) & Item.Subject & Chr(34) & "will expire on " & DateAdd("m", 2, Item.ReceivedTime) & "."
       nRes = MsgBox(strMsg, vbExclamation + vbOKOnly, "Expiry Time")
    End If
End Sub

VBA Codes - Auto Set an Expiry Time for Incoming or Outgoing Emails

  1. After that, you ought to digitally sign the new “ThisOutlookSession” macro.
  2. Subsequently, you need to change your Outlook macro security level to low.
  3. Finally restart Outlook to activate the VBA project. From now on, all the new emails in Inbox or Sent Items folder will have the expiry time. Also, you will receive a message box like the following screenshot.Message Box Prompting the Expiry Time

Keep Malicious Emails at Bay

Outlook cannot be exempt from corruptions in that nowadays malicious emails have become one of the most common security threats. Viruses can be hidden in the emails easily. Therefore, you should keep cautious all the time in dealing with new emails. Otherwise, it is very likely that you will suffer from Outlook PST file corruption, which will be rather knotty.

Author Introduction:

Shirley Zhang is a data recovery expert in DataNumen, Inc., which is the world leader in data recovery technologies, including repair corrupted SQL Server mdf database and outlook repair software products. For more information visit

Comments are closed.