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:
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.
Solution 1:
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!