outlook - 在 SendItems 文件夹中过滤发送给用户的过去电子邮件
问题描述
问题陈述
我正在寻找一种方法来计算发送到特定电子邮件的任何电子邮件,逻辑是它已发送,它将位于“已发送项目”中。
问题
我正在使用下面的代码,我认为它接近正确但不起作用,即我没有得到计数。可能我错过了一些东西。如果有人有解决方案,想听听如何最好地做到这一点。
早期的尝试
- Items.Find("[To] = 'search@gmail.com'")
- Items.Restrict("[To] = 'search@gmail.com'") 他们都没有给我结果。
如何
注意:虽然代码适用于基于 ADX 的插件,但我相信问题并非特定于它。[代码]
public int GetSentEmailExchangeCount(string SenderEmailId)
{
Outlook.MAPIFolder sentItems = (Outlook.MAPIFolder)this.OutlookApp.ActiveExplorer().Session.GetDefaultFolder((Outlook.OlDefaultFolders.olFolderSentMail));
Outlook.Items folderItems = (Outlook.Items)sentItems.Items;
string searchCriteria = "@SQL=\"urn:schemas:httpmail:displayto\" LIKE '%" + SenderEmailId + "%'";
StringBuilder strBuilder = null;
int counter = default(int);
Outlook._MailItem mail = null;
object resultItem = null;
try
{
strBuilder = new StringBuilder();
resultItem = folderItems.Restrict(searchCriteria);
while (resultItem != null)
{
if (resultItem is Outlook._MailItem)
{
counter++;
}
Marshal.ReleaseComObject(resultItem);
resultItem = folderItems.FindNext();
}
}
catch (Exception ex)
{
Debug.Print(ex.Message);
}
finally
{
if (folderItems != null) Marshal.ReleaseComObject(folderItems);
}
return counter;
}
解决方案
当您搜索该To
属性时,Outlook 会对消息属性创建一个限制,该限制PR_DISPLAY_TO
可能包括也可能不包括电子邮件地址(通常只包括显示名称)。假设包含地址,您可以将搜索过滤器调整为
@SQL=To LIKE '%search@gmail.com%'
如果PR_DISPLAY_TO
不包含电子邮件地址(至少不是所有电子邮件),则您在 Outlook 对象模型中无能为力。
在扩展 MAPI 级别(C++ 或 Delphi)上,您可以创建对收件人的限制 (RES_SUBRESTRICTION / PR_MESSAGE_RECIPIENTS)。
如果可以选择使用Redemption(任何语言),则可以使用 RDFolder。Items.Restrict - 与 Outlook 对象模型不同,它确实将 To/CC/BCC 查询扩展为每个收件人 (RES_SUBRESTRICTION / PR_MESSAGE_RECIPIENTS / RES_OR / PR_DISPLAY_NAME | PR_EMAIL_ADDRESS | PR_SMTP_ADDRESS) 的属性上的收件人PR_DISPLAY_NAME
子限制。PR_EMAIL_ADDRESS
PR_SMTP_ADDRESS
set Session = CreateObject("Redemption.RDOSession")
Session.MAPIOBJECT = Application.Session.MAPIOBJECT
set Folder = Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail)
set restrItems = Folder.Items.Restrict(" TO = 'abc@example.com' ")
您还可以Recipients
在查询中指定属性 - 它将与所有类型的收件人匹配(to/cc/bcc):
set restrItems = Folder.Items.Restrict(" Recipients = 'abc@example.com' ")
推荐阅读
- python - 如何合并每个都是字符串列表的行..不包括重复项
- string - FSharp F# 中的字符串编辑问题
- jenkins - 如何将 Jenkins DSL 管道命令设置为 groovy 中的变量?
- c# - 仅在存在时引用类库 - .NET Core
- c# - 字符串未被识别为具有相同格式的有效日期时间
- jquery - jQuery $(this) 关键字在插件中不起作用
- r - lapply 在数据框列表上的工作方式与单独应用于 dfs 的 FUN 不同
- sql-server - 将双精度值与 ISNULL 进行比较时的问题
- javascript - 另一个文件中的变量不会显示为
- 在购物车页面
- excel - 如何在命令按钮宏上使用 VBA 代码打开特定工作表?