Outlook: Change default email delay for “Do not deliver before” feature


In Outlook, there's a feature that allows me to schedule my emails for later delivery – I love it when I'm responding to emails late at night and don't want to appear to be a work-aholic. However, it defaults to 5PM – if it's before 5PM currently, it defaults to 5PM today, and if it's after 5PM currently, it defaults to tomorrow evening at 5PM. For example, it's currently 1:30AM where I am and Outlook is trying to deliver my emails at 5PM tomorrow evening:

enter image description here

Is there any way to change this default delivery time? Preferably, I'd like to set it to something like 6:30AM – that way, typing an email after hours, it's easy to schedule it for tomorrow morning (click "Delay Delivery" and then "OK"), where now I have to open "Delay Delivery", fix the time, usually fix the date as well, and then click OK.

I'm not looking to delay emails by default, I'm just looking for a way to change the assumption Outlook has that I'm interested in delivering my emails as soon as people go home – I'd prefer to deliver them in the morning before they arrive.

Thanks to the direction in the answer from Axel and code originally from Mike Hudson, I've written a macro that accomplishes exactly what I was looking to do. I pinned the macro to a button on my Quick Access Toolbar and now it's just a single click. Mission accomplished – thanks for the help!

Here's a link to the Delay Send Mail macro if you want to take a look yourself (you can follow this walk-through to get it pinned to your toolbar). I'm open to any feedback or enhancements suggestions anybody has, but it's a huge help for me as-is.

Best Answer

  • Inspired by Mike Hudson, I wrote the following VBA code for you:

    Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
        Const morningTime As String = "06:30:00"
        Const eveningTime As String = "19:00:00"
        Dim mi As Outlook.MailItem
        Dim dow As Integer
        Dim time As String
        Dim itIsLate As Boolean
        On Error GoTo ErrorHandler
        Set mi = Item
        dow = Weekday(Date, vbMonday)
        time = Format(Now, "HH:NN:SS")
        itIsLate = (StrComp(time, eveningTime) > 0)
        If (dow = vbSaturday) Or (dow = vbSunday) Or _
            ((dow = vbFriday) And itIsLate) Then
            '  Weekend! Delay until Monday morning
            mi.DeferredDeliveryTime = (Date + (vbSunday - dow + 1)) _
                                    & " " & morningTime
        ElseIf itIsLate Then
            '  in the evening, delay until next morning
            mi.DeferredDeliveryTime = (Date + 1) & " " & morningTime
        End If
    Exit Sub
        MsgBox "Application_ItemSend: " & Err.Description
    End Sub

    The subroutine is called whenever you send a mail. During weekends, delivery is delayed until Monday morning. If the time is after "evening time", delivery is delayed until next morning. Please do some testing before actually using this macro!

  • Related Question