Outlook:更改“在此之前不发送”功能的默认电子邮件延迟

Sql*_*yan 6 microsoft-outlook email delay

Outlook 中有一项功能可以让我安排电子邮件以便稍后发送 - 我喜欢在深夜回复电子邮件并且不想让自己看起来像个工作狂。但是,它默认为下午 5 点 - 如果当前在下午 5 点之前,则默认为今天下午 5 点,如果当前在下午 5 点之后,则默认为明天晚上 5 点。例如,我现在所在的位置是凌晨 1:30,Outlook 尝试在明天晚上 5 点发送我的电子邮件:

在此输入图像描述

有什么办法可以改变这个默认的交货时间吗?最好将其设置为上午 6:30 之类的时间 - 这样,在下班后输入电子邮件,很容易将其安排在明天早上(单击“延迟交付”,然后单击“确定”),现在我已经打开“延迟交付”,固定时间,通常也固定日期,然后单击“确定”。

我不想在默认情况下延迟电子邮件,我只是在寻找一种方法来改变 Outlook 的假设,即我有兴趣在人们回家后立即发送电子邮件 - 我更愿意在在他们到达之前的早上。

解决方案: 由于 Axel 的答案中的方向和最初来自 Mike Hudson 的代码,我编写了一个宏,它完全实现了我想要做的事情。我将宏固定到快速访问工具栏上的一个按钮,现在只需单击一下即可。任务完成 - 感谢您的帮助!

如果您想亲自查看,这里有一个延迟发送邮件宏的链接(您可以按照此演练将其固定到工具栏)。我愿意接受任何人的任何反馈或改进建议,但这对我来说是一个巨大的帮助。

Axe*_*per 5

Mike Hudson的启发,我为您编写了以下 VBA 代码:

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
Run Code Online (Sandbox Code Playgroud)

每当您发送邮件时都会调用该子例程。周末期间,交货会延迟至周一早上。如果时间在“晚上时间”之后,交货将延迟到第二天早上。请在实际使用此宏之前先进行一些测试!