Outlook 365 (web client) contains a feature to “Snooze” emails, which effectively hides them until a specified time. Unfortunately, the Outlook desktop client does not contain this feature (although Microsoft has been promising for more than a year that they are “considering this”. 1500+ votes to date).
Sometimes I go through the trouble of opening the web client just to snooze an email, but that is a pain. I would like to find a simpler workaround that emulates this functionality.
I created an Outlook macro (VBA) that approximates this functionality. It forwards the email to myself and adds a 1-day “Delay Delivery”, which effectively hides the email from my inbox for 24 hours. I added a link to the macro in my Quick Access Toolbar, so now it’s even more conveniently accessible than the Web client!
Public Sub SnoozeMessage()
'This macro will send the selected email item back to me 1 day from now.
'(Snoozed message can be accessed in the Outbox folder in the meantime.)
'(Uses "Delayed Delivery" functionality.)
Dim Item As Outlook.MailItem
Set Item = GetCurrentItem()
If Item Is Nothing Then
MsgBox "No item selected.", vbExclamation
Exit Sub
End If
If TypeOf Item Is Outlook.MailItem Then
MsgBox "Snoozing this item for 1 day: " & Item.Subject
With Item
.To = "[email protected]"
.Subject = Item.Subject + " [SNOOZED]" 'appends a tag to the subject line to keep track of how often I've snoozed it.
.DeferredDeliveryTime = DateAdd("d", 1, Now)
Debug.Print Item.DeferredDeliveryTime
.Send
End With
Else
MsgBox "Selected item is not an email.", vbExclamation
End If
Set Item = Nothing
End Sub
Function GetCurrentItem() As Object
'Fetches the currently selected Outlook item
Dim objApp As Outlook.Application
Set objApp = Application
On Error Resume Next
Select Case objApp.ActiveWindow.Class
Case olInspector
Set GetCurrentItem = objApp.ActiveInspector.CurrentItem
Case olExplorer
Set GetCurrentItem = objApp.ActiveExplorer.Selection.Item(1)
End Select
Set objApp = Nothing
End Function
To adjust the default delay period, consult the DateAdd documentation.
I thought about making the duration configurable at runtime, but that would require customizing the MsgBox, and I’m out of time, so that will just have to wait for another sprint.