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

delayemailmicrosoft-outlook

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.

RESOLUTION:
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

ErrorHandler:
    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