【发布时间】:2018-02-10 15:58:30
【问题描述】:
我的最终目标是找到一种方法来标记我将要发送的电子邮件,并在今天的日期和时间加上 x 天后提醒我要发送电子邮件的人和我自己。多年来,在从 Excel 生成新邮件项目时,我已经能够做到这一点。我遇到的问题是对 Outlook 2016 中的当前项目执行此操作。
在 Excel 中,我标记电子邮件以供收件人跟进,然后我自己只密件抄送。发送电子邮件后,它会退回给我,我会收到提醒,因为我是收件人。
我使用 Outlook VBA 的第一种方法是在电子邮件中标记自己的提醒和类别。我遇到的问题是,一旦发送电子邮件,它会为我自己删除提醒,而不是收件人。不过,该类别仍将附加。所以我决定切换并尝试我在 Excel 中使用的方法。
此代码中的所有内容都运行良好。电子邮件地址在附加,之前的所有提示都有效,提醒日期正确。除了一件事,所有的工作。我在 BBC 行中的电子邮件地址无法解析或解析速度不够快,我不确定。错误消息显示:“操作失败。消息传递接口返回未知错误。如果问题仍然存在,请重新启动 Outlook。无法解析收件人。”
任何人都知道发生了什么,或者是否有办法强制 Outlook 在发送之前解析此电子邮件地址?
Private Sub Application_ItemSend(ByVal olItem As Object, Cancel As Boolean)
Dim response As Integer
Dim DaysToRemind As Byte
response = MsgBox("Would you like to delay send this email?", vbYesNo)
On Error GoTo Skip
If response = vbYes Then olItem.DeferredDeliveryTime = Format(Date, "m/d/yyyy") & " 4:00:00 PM"
On Error GoTo Skip
If response = vbNo Then olItem.DeferredDeliveryTime = Now() - 1
prompt$ = "Do you want to flag this message for followup?"
If MsgBox(prompt$, vbYesNo + vbQuestion + vbMsgBoxSetForeground, "Add flag?") = vbYes Then
DaysToRemind = InputBox("How many days to remind?", "Days Till Reminder", 3)
With olItem
.FlagStatus = olFlagMarked
.FlagRequest = "Follow Up"
.FlagDueBy = Now + DaysToRemind
.Categories = "Waiting on Response"
.BCC = "myemail@email.com"
'.Save
.Send
End With
End If
Skip:
End Sub
在使用了一些工具之后,我不得不最终设置一个规则来做我想做的所有事情,但它让我得到了我想要做的事情。
Private Sub Application_ItemSend(ByVal olItem As Object, Cancel As Boolean)
Dim response As Integer
Dim DaysToRemind As Byte
response = MsgBox("Would you like to delay send this email?", vbYesNo)
On Error GoTo Skip
If response = vbYes Then olItem.DeferredDeliveryTime = Format(Date, "m/d/yyyy") & " 4:00:00 PM"
On Error GoTo Skip
If response = vbNo Then olItem.DeferredDeliveryTime = Now() - 1
Des = MsgBox("Do you want to flag this message for followup?", vbYesNo + vbQuestion + vbMsgBoxSetForeground, "Add flag?")
If Des = vbYes Then
DaysToRemind = InputBox("How many days to remind?", "Days Till Reminder", 3)
With olItem
.FlagStatus = olFlagMarked
.FlagRequest = "Follow Up"
.FlagDueBy = Now + DaysToRemind
If Right(.Subject, 4) <> " (T)" Then .Subject = .Subject & " (T)"
Set myEmail = .recipients.Add("email@email.com")
myEmail.Type = olBCC
myEmail.Resolve
.Save
End With
End If
If Des = vbNo Then
If Right(olItem.Subject, 4) = " (T)" Then olItem.Subject = Left(olItem.Subject, Len(olItem.Subject) - 4)
End If
Skip:
End Sub
谢谢大家
【问题讨论】:
-
只是一个想法,但您缺少 .TO 地址 - 您正尝试在没有收件人的情况下发送电子邮件,但仅使用 .BCC - 或者我可能不完全了解您在做什么。
-
这段代码在我输入电子邮件并点击发送按钮后运行,所以我已经填写了 TO 部分、主题和正文。然后它会询问我是否想将交付延迟到下午 4 点(如果消息不是非常重要),或者我是否想添加提醒。如果我添加提醒,我希望它密送我的电子邮件地址。
-
完成 .BCC 行后 - 执行 Sleep 2000 - 然后检查您的电子邮件地址是否在 .SEND 之前存在。那是我会尝试的事情
-
在 microsoft suppoert 中发现此问题 - 当 Google Apps Sync for Microsoft Outlook 帐户和 Microsoft Exchange Server 帐户在同一 Outlook 配置文件中配置时会出现此问题。
-
啊啊啊。那么是我与 Outllok 绑定的 Gmail 帐户造成的?