限制仅适用于某些收件人

Restrict only works for some recipients

我有一些代码可以保持收件箱干净。

进程:

  1. 手动将商城邮件从发件箱发送到收件箱。现在我的收件箱里有所有邮件要存档。
  2. 运行代码。

当我有一个 pop3/*pst-files 设置时,我使用了 Outlook 规则并有一些代码来 运行 收件箱中的所有规则。

将设置更改为 Exchange 时,出现了规则问题。
突然我有很多重复的规则,Outlook无法同步到服务器等

现在我有了一个简单有效的概念,规则如下所示:

@somedomain.dk|XYZ

规则说:将 @somedomain.dk 上的所有发件人 to/from 的电子邮件移至 Exchange 文件夹 XYZ

我 select 邮件要用这条线移动:

Set mItems = inbox.Items.Restrict(strQry)
iNo = mItems.count

查询(有效):

@SQL="urn:schemas:httpmail:displayto" like '%somedomain.dk%' OR
 "urn:schemas:httpmail:fromemail" like '%somedomain.dk%'

我的收件箱中有 7 封邮件:从该域收到 4 封,向该域发送 3 封。当 运行ning 代码时,收集了 5 封邮件。在我发送的 3 封电子邮件中,1 封是我创建的,2 封是回复邮件。使用 Outlook Spy,我发现 MailItem.To 在我创建的邮件中包含姓名和电子邮件地址,但在回复时只包含姓名。

如何更改查询以便获得电子邮件地址?我在 Outlook Spy 中四处寻找,但迷路了。

Outlook 对象模型不允许您对收件人或附件创建子限制,即使 MAPI 这样做没有问题。

你有几个选择 -

  1. 修改收件人姓名以包括地址和姓名(To/CC/BCC 属性在根据收件人 table 内容保存邮件时由商店提供商自动重建。 OOM,再次,不会帮助你 - Recipient.Name 是只读的
  2. 如果使用 Redemption (I am its author) is an option, its version of Items.Find and ItemsRestrict 如果在查询中使用 Recipients/To/CC/BCC 属性,则对收件人 name/address/SMTP 地址创建子限制。

此解决方案满足我的需要:将电子邮件 to/from somecustomer.com 移动到客户文件夹。

电子邮件发件人:我发现 email.SenderEmailAddress 不能接收所有邮件。有些是 email.Sender.Address.

Email To: 一个小难题。 Email.To 找到一些,但前提是电子邮件地址写有姓名(名字姓氏 )。我发现smtp地址属性可以找到其余的

(Module header)
Const PR_SMTP_ADDRESS As String = "http://schemas.microsoft.com/mapi/proptag/0x39FE001E"

'>> In procedure
(set objects etc...)
strFrom1 = email.SenderEmailAddress
strFrom2 = email.Sender.Address
strTo1 = email.To
If strTo1 <> "" Then
  strTo2 = email.Recipients(1).PropertyAccessor.GetProperty(PR_SMTP_ADDRESS)
Else
  strTo2 = ""
End If

(loop mails and rules...)
strDom = "*" & somedomain.com
'>> Test if mail is to/from somedomain.com
If strFrom2 Like strDom Or strTo1 Like strDom Or strTo2 Like strDom Then
  (do stuff: Move, delete)
End If
(do the rest)

速度问题:一次处理一封邮件比使用限制要花一些时间但是:我没有找到在一个命令中移动多封邮件的方法,所以移动是一次完成的。

在我的测试中,移动 1-200 封邮件的时间没有差异。