例如,此处、此处、此处和此处介绍了如何通过 VBA 延迟电子邮件发送。
我在
Application_ItemSend
中实现了一个版本。如果电子邮件在一天中的某个时间之前发送,它始终会应用延迟递送。
如何检查延迟交付是否已已设置?在这种情况下我可能会选择不更改它。
我在添加延迟交付的代码之前和之后打印了
Item.DeferredDeliveryTime
:
Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
Debug.Print "Item.DeferredDeliveryTime: " & Item.DeferredDeliveryTime
' My code to delay delivery is here.
Debug.Print "Item.DeferredDeliveryTime: " & Item.DeferredDeliveryTime
End Sub
在新电子邮件中,因此一开始就没有设置延迟递送,我得到以下信息:
Item.DeferredDeliveryTime:4501-01-01
项目.延期交货时间: 2023-07-20 6:31:00 AM
我的代码已确定需要延迟交付,并在今天上午 6:31 应用了延迟交付。
在此之前,
Item.DeferredDeliveryTime
被设置为这个奇怪的数字4501-01-01,看起来像是一个没有时间的日期。
该初始数字是日期格式的 Outlook 代码,表示“未设置延迟送达”还是该日期设置得很远,因此 Outlook 会忽略它?
无论哪种情况,这个数字都是恒定的吗? IE。当未设置延迟发送时,所有系统上的所有电子邮件是否始终显示相同的号码?这意味着我可以根据该常量检查该值还是可变的,需要进行一些解析来确定它是否是“非常遥远”的日期,在这种情况下,我们假设未设置延迟交付?
有没有更好的方法来判断是否已经设置了延迟发货?
由于
DateTime
不可为空(在 COM 中它是一个 8 字节浮点数),指定“无值”的唯一方法是使用一个特殊值,即 1/1/4501
。 Outlook 始终使用该值作为其未设置的 DateTime 属性。