延迟发送邮件

时间:2016-01-04 17:59:17

标签: vba outlook

我正在尝试在“发送”按钮下设置Outlook宏,将DeferredDeliveryTime设置为当前时间加上60分钟。

我已经按下了Alt + F11,创建了一个模块并将其放在一个子文件中:

Sub delay_delivery(ByVal item As Object)
    Dim mailItem As MailFormat
    Set mailItem = item
    mailItem.DeferredDeliveryTime = DateAdd("n", 90, Now)
End Sub

并在快速访问工具栏中添加了指向宏的链接,但没有任何反应。

2 个答案:

答案 0 :(得分:3)

我认为您遇到的问题是您的程序永远不会得到"项目"。

所以你的程序被定义为

 Sub delay_delivery(ByVal item As Object)

但是当你运行它时,"项目"参数永远不会进入程序。我还没有测试过您的代码,但我很惊讶它在运行时不会出现某种错误。

有几种方法可以做你想要的,但每种方法都有自己的问题。

请注意,用户需要在Outlook中启用宏才能使用这些宏,并且每次打开Outlook时都可能会提示用户。

第一个更简单,但不允许您使用宏,并且每次用户发送消息时都会提示。这需要放入" ThisOutlookSession"

Private Sub Application_ItemSend(ByVal olItem As Object, Cancel As Boolean)

     Dim response As Integer
     response = MsgBox("Would you like to send this in an hour?", vbYesNo)
     If response = vbYes Then
     olItem.DeferredDeliveryTime = DateAdd("n", 90, Now)
End If

End Sub    

这会捕获电子邮件的发送事件,如果用户在消息框中选择,则会将延迟发送属性放在电子邮件中。

第二种方式将允许此人使用宏,但是,如果此人打开了多封电子邮件,选择其中一个中的宏,但是然后先发送另一个,它会将延迟的发送属性放在哪个选择宏后发送项目。发送电子邮件后,它会将延迟传递重置为false。为此,请将以下代码添加到" ThisOutlookSession"

Option Explicit
Private DelaySend As Boolean 'To store whether user wishes to delay

Private Sub Application_Startup()
    DelaySend = False 'Set delaysend initially to false
End Sub

Sub delay_delivery()
   DelaySend = True 'Set delay send when user clicks macro.
End Sub

Private Sub Application_ItemSend(ByVal olItem As Object, Cancel As Boolean)
    If DelaySend = True Then 'Check if user set delay_send
        olItem.DeferredDeliveryTime = DateAdd("n", 90, Now)
    End If

    DelaySend = False 'Reset DelaySend to False 
End Sub

如果您想要做其他事情,可以考虑使用此处显示的程序捕获新电子邮件:Capture New Emails

然后,您可以想出一些方法来存储已打开的电子邮件,以及它们是否已设置为" DelaySend"状态,但这样一个功能齐全的应用程序超出了这个答案的范围。

编辑:请参阅此问题,了解如何与当前打开的电子邮件Current Email进行互动,然后修改以设置延迟投放标记。

答案 1 :(得分:1)

你不能把你的代码放在QAT上。您必须在传递项目时调用此代码。

在ThisOutlookSession中:

Private Sub Application_ItemSend(ByVal Item As Object, cancel As Boolean)
   Item.DeferredDeliveryTime = DateAdd("n", 60, Now)
End Sub

当您按发送按钮时,正在发送的项目将是所需的参数。