How do I set my Outlook so that emails I write after business hours and on weekends are delayed and will only be sent during business hours?

I want to make myself look productive, but using my time effectively. Is that too hard to ask?

I can delay single messages to any time, and using rules by up to 120 mins. Can anyone give me any tips on creating a custom rule to send mail only in business hours.

Thanks in advance!


I googled a little bit for a vba (Visual Basic for Applications) solution and found that one:

This solution is made for Outlook 2003 but it may also work on newer versions of Outlook.

Here's the vba code that has to be put in Outlook.

Public Sub CheckSendTime()
    Dim obj As Object
    Dim Mail As Outlook.MailItem
    Dim WkDay As String
    Dim MinNow As Integer
    Dim SendHour As Integer
    Dim SendDate As Date
    Dim SendNow As String

'Set Variables
SendDate = Now()
SendHour = Hour(Now)
MinNow = Minute(Now)
WkDay = Weekday(Now)
SendNow = Y

'Check if Before 8am
If SendHour < 8 Then
    SendHour = 8 - SendHour
    SendDate = DateAdd("h", SendHour, SendDate)
    SendDate = DateAdd("n", -MinNow, SendDate)
    SendNow = N
End If
'Check if after 7PM
If SendHour > 19 Then           'After 7 PM
    SendHour = 32 - SendHour    'Send a 8 am next day
    SendDate = DateAdd("h", SendHour, SendDate)
    SendDate = DateAdd("n", -MinNow, SendDate)
    SendNow = N
End If

'Check if Sunday
If WkDay = 1 Then
    SendDate = DateAdd("d", 1, SendDate)
    SendNow = N
End If

'Check if Saturday
'If WkDay = 7 Then
'    SendDate = DateAdd("d", 2, SendDate)
'    SendNow = N
'End If

'Send the Email
  Set obj = Application.ActiveInspector.CurrentItem
  If TypeOf obj Is Outlook.MailItem Then
    Set Mail = obj
    'Check if we need to delay delivery
    If SendNow = N Then
      Mail.DeferredDeliveryTime = SendDate
    End If
  End If

End Sub

Maybe you have to adjust the time.

  • 1
    It helps when you post the information (verbatim with credit, or paraphrased) from URLs; it prevents link rot – Canadian Luke May 27 '12 at 5:36
  • I'm sorry. I haven't considered that ;) – wullxz May 27 '12 at 5:41
  • It works! The workflow is: Compose email write email, add recipients, run macro. Any way I can bind the macro to the send email button? – Joseph May 27 '12 at 9:55
  • have a look at the Send Event. If I understand this correctly, you have to build a Method called Private Sub *anyNameHere*_Send(Cancel As Boolean) which then calls the Method in my answer-post. – wullxz May 27 '12 at 16:24

If you are just trying to work on your backlog, during the weekend, and not actually have a live mail session, take Outlook offline before starting to send your replies.

Then when you get back to work on Monday, go online and send.

This also has the extra side effect of letting you focus on your existing email debt, rather than letting new activity that arrives off-hours interrupt your thinking.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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