【问题标题】:Filter on SendItems Folder for past emails Sent to a user在 SendItems 文件夹中过滤发送给用户的过去电子邮件
【发布时间】:2020-03-30 12:13:33
【问题描述】:

问题陈述

我正在寻找一种方法来计算发送到特定电子邮件的任何电子邮件,逻辑是它已发送,它将位于“已发送项目”中。

问题

我正在使用下面的代码,我认为它接近正确但无法正常工作,即我没有得到计数。可能我错过了一些东西。如果有人有解决方案,想听听如何最好地做到这一点。

早期尝试

  1. Items.Find("[To] = 'search@gmail.com'")
  2. 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;
    }

【问题讨论】:

    标签: outlook vsto outlook-addin comaddin


    【解决方案1】:

    当您搜索To 属性时,Outlook 会对PR_DISPLAY_TO 邮件属性创建一个限制,该属性可能包括也可能不包括电子邮件地址(通常只包括显示名称)。假设包含地址,您可以将搜索过滤器调整为

    @SQL=To LIKE '%search@gmail.com%'
    

    如果PR_DISPLAY_TO 不包含电子邮件地址(至少不是所有电子邮件),则您在 Outlook 对象模型中无能为力。

    在扩展 MAPI 级别(C++ 或 Delphi)上,您可以创建对收件人的限制 (RES_SUBRESTRICTION / PR_MESSAGE_RECIPIENTS)。

    如果使用Redemption(任何语言)是一个选项,您可以使用 RDOFolder.Items.Restrict - 与 Outlook 对象模型不同,它确实将 To/CC/BCC 查询扩展为对PR_DISPLAY_NAME、@ 的收件人子限制每个收件人的 987654328@、PR_SMTP_ADDRESS 属性(RES_SUBRESTRICTION / PR_MESSAGE_RECIPIENTS / RES_OR / 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' ")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多