如何查找从客户端发送的所有未确认的电子邮件?

时间:2020-03-25 16:06:04

标签: vba outlook

我需要跟进从我发送给其他用户的所有电子邮件,但是其他用户从未答复过。可以是新电子邮件,也可以是正在进行的对话中未回复的电子邮件。

如何获取在对话或新邮件中从发送的最后一封电子邮件?

我正在运行Microsoft Office 356 ProPlus版本1908(内部版本11929.20606)

我的VBA脚本在我的收件箱('\ firstname.lastname@domain.com \ Inbox')中查找电子邮件,并将其移动到“未答复”子文件夹中。

问题是电子邮件主要来自其他用户,当我过滤来自我的电子邮件(通过使用文件夹中的默认过滤器,例如来自“发件人”)时,我得到的只是发送给自己的邮件或自动生成的邮件代表我从SharePoint服务器(例如与其他用户共享的SharePoint网站)访问。

我尝试仅搜索发送的文件夹('\ firstname.lastname@domain.com \ Sent'),并且列出了与使用默认的文件夹过滤器过滤从我发送的邮件时相同的项目查询我的收件箱。

要决定将哪些邮件放入“未答复”文件夹中,我尝试了以下操作:

1)通过排除所有最后执行的动词设置为“全部回复”或“回复”的邮件来进行“ DASL搜索”。

NOT ("http://schemas.microsoft.com/mapi/proptag/0x10810003" = 102 OR "http://schemas.microsoft.com/mapi/proptag/0x10810003" = 103)

2)使用ConversationIndex,正如我在网上发现的那样,未处理的邮件的ConversationIndex长度为44:

If Len(objVariant.ConversationIndex) = 44 Then

3)使用LastExecutedVerb。通过在对话中检查电子邮件的属性来注意到,使用以下命令时,我作为最新项目发送的电子邮件始终具有“ PR_LAST_VERB_EXECUTED 0”:

Debug.Print "PR_LAST_VERB_EXECUTED", propertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x10810003")

SoIi尝试过滤PR_LAST_VERB_EXECUTED = 0的电子邮件,但这根本找不到任何电子邮件。

2 个答案:

答案 0 :(得分:0)

PR_LAST_VERB_EXECUTED检查必须针对缺少的属性(= null)

@SQL="http://schemas.microsoft.com/mapi/proptag/0x10810003" is null

答案 1 :(得分:0)

我没有任何合适的对话,并且不使用SharePoint,所以无法调查您的问题。这不是答案,而是向我解释如何调查您的需求并制定解决方案。

Outlook VBA具有一些功能强大的筛选器,但是我很少能够使它们适应我的要求。当我有像您这样的要求时,没有一组电子邮件可供选择。取而代之的是,我浏览电子邮件,丢弃具有特征A或不具有特征B的电子邮件,然后处理剩下的电子邮件。因此,我的代码将类似于:

Dim Review As Boolean

For Inx = FldrSrc.Items.Count To 1 Step -1

  ItemCrnt = FldrSrc.Items(Inx)
  Review = True

  If ItemCrnt has CharacteristicA Then
    Review = False
  End If
  If Review Then
    If ItemCrnt does not have CharacteristicB Then
      Review = False
    End If
  End If
  If Review Then
    If ItemCrnt has CharacteristicC Then
      Review = False
    End If
  End If

  If Review Then
    ItemCrnt.Move FldrDest
  End If

Next

在上面的代码中,我已经访问了FldrSrc.Items。如果愿意,您可以访问经过过滤的项目集合。

您会注意到我的For-Loop倒数了。这个很重要。 FldrSrc.Items是一个集合,其中每个项目都通过其位置来标识。考虑:

┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐
│ Item 1 │ Item  2│ Item 3 │ Item 4 │ Item 5 │ Item 6 │ Item 7 │ Item 8 │ Item 9 │
└────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘

假设我删除了项目5。项目6变为项目5,项目7变为项目6,依此类推:

┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐
│ Item 1 │ Item  2│ Item 3 │ Item 4 │ Item 5 │ Item 6 │Item  7 │Item  8 │
│        │        │        │        │  was 6 │  was 7 │  was 8 │  was 9 │
└────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘

如果我要向前计数,则在删除项目5之后,我将检查项目6。但是项目6是旧项目7;我从不检查旧项目6。

但是,如果我倒数了,则在删除项目5之后,我会检查尚未移动的项目4。

我希望这个解释清楚。如果不是这样,那就接受一下,如果您可能会从集合中删除项目,则总是向后扫描。

然后,您需要考虑循环的主体。对于每种类型的电子邮件,您需要确定该类型的电子邮件必须具有或不具有的某些特征。我相信我的诊断程序将有助于完成此任务。访问https://stackoverflow.com/a/58000707/973283,然后将代码复制到模块中。在顶部附近,您会发现:#Const Selected = True。必须用#Const Selected = False代替。您还需要引用以下库:“ Microsoft脚本运行时”和“ Microsoft ActiveX数据对象n.n库”。

已完成此操作,选择不想要复制到未答复文件夹的一封或多封电子邮件。然后运行宏InvestigateEmails()。该宏将在您的桌面上创建一个名为“ InvestigateEmails.txt”的文件。该文件将列出我认为有用的所选电子邮件的每个属性的值。浏览不想要的电子邮件,并找出使它们变得特别的属性。

这些说明可能看起来有些奇怪。运行我的宏并检查输出。我相信您很快就会明白您需要做什么。