C# VSTO Outlook加载项:应用程序中的有线项目对象\u ItemSend参数

C# VSTO Outlook加载项:应用程序中的有线项目对象\u ItemSend参数,c#,vsto,outlook-addin,C#,Vsto,Outlook Addin,我为Outlook 2016(office 365的一部分)编写了一个简单的VSTO加载项,以检查收件人列表中是否混合了一些公司以外的电子邮件地址。 我将代码简化如下: int countExternalAddress; string externalAddresses; string internalDomain=“@example.com”; //indicates the email domain of our company, we use

我为Outlook 2016(office 365的一部分)编写了一个简单的VSTO加载项,以检查收件人列表中是否混合了一些公司以外的电子邮件地址。 我将代码简化如下:

      int countExternalAddress;
      string externalAddresses;
      string internalDomain=“@example.com”; 
     //indicates the email domain of our company, we use exchange server.

     private void Application_ItemSend(object Item, ref bool Cancel)
     {

        countExternalAddress = 0;
        externalAddresses="";

        Outlook.MailItem item = (Outlook.MailItem)Item;

        foreach (Outlook.Recipient recp in item.Recipients)
        {
             ConvertExchangeAddrToSMTPAddr(recp.AddressEntry.Address);
             //by access ExchangeUser.PrimarySmtpAddress
             CheckTheAddress(recp.AddressEntry.Address);
        }

        if (countExternalAddress > 0)
        {
           Warn();
        }

     }
代码在大多数情况下都可以正常工作,但有时Warn()函数会根据上一封电子邮件的收件人(部分)而不是当前的收件人显示警告。 问题不可能一直重现,但当问题发生时,程序如下:

  • 向内部收件人(我的同事,exchange地址)发送电子邮件,exchange地址将成功转换为SMTP地址,因为它们预定义为“内部”地址,邮件将在没有警告的情况下发送
  • 向其他一些内部收件人发送另一封电子邮件,程序显示“外部地址混合”警告,“外部”地址来自之前发送的电子邮件(上文1中提到,并非所有地址,仅其中一个),并且,检测到的外部地址是Exchange地址格式,应该转换为SMTP格式。 奇怪的是,我在当前电子邮件的收件人列表中找不到地址。 如果我保存当前电子邮件并重新启动outlook,当我选择保存的电子邮件并尝试重新发送时,将不会再次检测到此类“外部”地址

    看起来ItemSend事件传递的Item对象包含一些收件人,这些收件人不仅属于当前电子邮件,而且来自以前发送的电子邮件,但在当前电子邮件中不可见,而且我在发送的电子邮件中也找不到此类收件人。 我正在使用的工作PC没有调试环境,所以我没有钱了。请给我你的帮助,提前谢谢


  • 这和你做的事有什么关系吗

    if(countExternalAddress>0)
    {
    警告();
    }

    而不是==

    if (countExternalAddress == 0)
        {
           Warn();
        }
    

    这似乎很奇怪,但会留下一封电子邮件来警告您。

    这与您的行为有关吗

    if(countExternalAddress>0)
    {
    警告();
    }

    而不是==

    if (countExternalAddress == 0)
        {
           Warn();
        }
    

    这似乎有些奇怪,但会留下一封电子邮件提醒您。

    谢谢您的及时回复。但是==意味着找不到外部地址,所以我认为>是正确的地址吗?没问题,朋友。让我知道这是否有效。你现在让我好奇。如果它确实起作用,那么这个问题就必须考虑更多因素,这可能存在于您的warn()中;警告功能只有一个带有取消按钮的消息框。我还是不明白你为什么认为它应该是==不是>?此外,我无法在家里的这台电脑上重现问题……在另一个地方,事情变成了我的错,似乎没有关系,但确实如此。忘了这根线吧。谢谢。谢谢你的及时回复。但是==意味着找不到外部地址,所以我认为>是正确的地址吗?没问题,朋友。让我知道这是否有效。你现在让我好奇。如果它确实起作用,那么这个问题就必须考虑更多因素,这可能存在于您的warn()中;警告功能只有一个带有取消按钮的消息框。我还是不明白你为什么认为它应该是==不是>?此外,我无法在家里的这台电脑上重现问题……在另一个地方,事情变成了我的错,似乎没有关系,但确实如此。忘了这根线吧。谢谢。这可能与我在安装后删除了.vsto文件有关吗?dll文件在安装后复制到appdata/app,因此我认为.vsto文件不再有用。这可能与我在安装后删除了.vsto文件有关吗?dll文件在安装后复制到appdata/app,因此我认为.vsto文件不再有用。