Sub DelaySendMail() On Error GoTo ErrHand ' Error Handling Dim objMailItem As mailitem ' Object to hold mail item Dim SendDate As String ' The date to send delayed mail Dim SendTime As String ' The time to send delayed mail Dim DelayMailAfter As Integer ' Latest hour mail is sent live Dim DelayMailBefore As Integer ' Earliest hour to send mail live Dim MailIsDelayed As Boolean ' Set if the mail will be delayed Dim NoDeferredDelivery As String ' Value if deferred delivery is disabled SendTime = " 06:00:00" ' Time to deliver delayed mail (6AM) DelayMailBefore = 5 ' Delay mail sent before 5:00AM DelayMailAfter = 20 ' Delay mail sent after 8:59PM MailIsDelayed = False ' We assume it's being delivered now NoDeferredDelivery = "1/1/4501" ' Magic number Outlook uses for "delay mail box isn't checked" 'Set object to mail item you have open Set objMailItem = Outlook.ActiveInspector.CurrentItem ' Check and make sure current item is an unsent message If objMailItem.Sent = True Then Err.Raise 9000 End If ' If mail is currently delayed, remove the delay and quit If objMailItem.DeferredDeliveryTime = NoDeferredDelivery Then objMailItem.DeferredDeliveryTime = NoDeferredDelivery MsgBox "Mail will be delivered immediately when sent", _ vbOKOnly, "Deferred delivery removed" End If ' Set the date appropriately for the next weekday If Weekday(Date, vbMonday) = 6 Then ' Today is Saturday ' Delay mail two days SendDate = Date + (2) MailIsDelayed = True ElseIf Weekday(Date, vbMonday) = 7 Then ' Today is Sunday ' Delay mail one day SendDate = Date + (1) MailIsDelayed = True Else ' Currently a weekday ' See if it's inappropriate to send mail right now If DatePart("h", Now) < DelayMailBefore Then ' It's early morning - delay it SendDate = Date MailIsDelayed = True ElseIf DatePart("h", Now) > DelayMailAfter Then ' It's late night - delay it until tomorrow morning SendDate = Date + (1) MailIsDelayed = True Else ' It's okay to send mail during this time ' Don't enable delayed send MailIsDelayed = False End If End If If MailIsDelayed Then ' Mail should be delayed - set the delivery date/time objMailItem.DeferredDeliveryTime = SendDate & SendTime MsgBox "Mail will be delivered at " & _ SendDate & SendTime, _ vbOKOnly, "Mail delayed" End If Exit Sub ErrHand: ' Handle well-known errors with message ' Other errors, just tell the user If Err.Number = 13 Then ' No current item or current item isn't a mail message MsgBox "Future delivery can only be set on mail items", vbOKOnly, "Not a mail item" ElseIf Err.Number = 9000 Then ' The active message has already been sent MsgBox "Please run this macro from an unsent mail item", vbOKOnly, "Not an unsent mail item" Else MsgBox "An error has occured on line " & Erl & _ ", with a description: " & Err.Description & _ ", and an error number " & Err.Number End If End Sub