2017-09-01 91 views
0

我的最终目标是找到一种方法来标记我要发送的电子邮件,并提醒我今天的日期和时间加上x天的时间,以便发送电子邮件的人和我自己。多年以来,我在Excel中生成新的邮件项目时都能够做到这一点。我遇到的问题是使用Outlook 2016中的当前项目执行此操作。Outlook BCC不够快速解析名称?

从Excel中,我将邮件标记为收件人的后续邮件,然后是BCC自己。当电子邮件发送时,它会弹回给我,并且我收到提醒,因为我是收件人。

我使用Outlook VBA的第一种方法是为电子邮件添加一个提醒我自己和一个类别。我遇到的问题是,一旦电子邮件发送,它会为我自己删除提醒,但不是收件人。该类别仍然会附加。所以我决定切换并尝试使用Excel的方法。

此代码中的所有内容都很棒。电子邮件地址已附加,所有提示都在工作之前,提醒日期是正确的。除了一件事以外,所有的工作。我的电子邮件地址在英国广播公司线没有解决或解决不够快,我不知道。错误消息为:“操作失败,消息传递界面返回了未知错误,如果问题仍然存在,请重新启动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 = "[email protected]" 
      '.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 protected]") 
     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 

感谢所有

+0

只是一个想法,但你缺少.TO地址 - 您要发送电子邮件没有收件人,但只有.BCC - 或者我不完全理解你在做什么。 – BobSki

+0

此代码在我输入电子邮件并点击发送按钮后运行,所以我已经填写了TO部分,主题和正文。然后它会问我是否要延迟交付到下午4点(如果消息不是非常重要的话)或者我想添加提醒。如果我添加提醒,我希望它能密码我的电子邮件地址。 –

+0

一旦你做.BCC行 - 做一个睡眠2000年 - 然后检查您的电子邮件地址是否有.SEND。这将是我想尝试 – BobSki

回答

0

你不应该在处理该非常项Application.ItemSend事件处理程序调用MailItem.Send。让Outlook继续默认行为。
你应该还没有通过设置BCC属性替换所有 BCC收件人:打电话MailItem.Recipients.Add并设置Recipient.Type属性为olBCC

+0

谢谢,经过多一点搜索,我发现如何做你所描述的,并得到Outlook来解决名称。我不得不设置一条规则来标记消息,以便在我回来时做其他事情。 –