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.


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!

  • Hmm - while I would necessarily want it "on send", I could see pinning this to a toolbar button to enable delayed send and set the time to 6:03AM the next morning (so as to not around suspicion that I'm delay-sending!) - that way, it would be resolved with a single click. Not as smooth as being able to change the default time, but definitely looks like it will work. I'll test it, make any necessary adjustments, and then post it back. Thanks! – SqlRyan Aug 7 '13 at 16:39
  • Application_ItemSend is automatically called as "Event Handler" whenever a mail is sent. No button needed. – Axel Kemper Aug 7 '13 at 16:47
  • I want the option to take this behavior, though - emails should send normally by default, but I wanted to make delaying them until tomorrow morning a single click instead of six. I'm making some slight changes and this will do it, though! I'm not sure how I didn't find Mike's example when searching for a solution, but between his code and your modifications, it answers all my questions. – SqlRyan Aug 7 '13 at 17:15

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