我为Outlook 2016(办公室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()函数会根据最后一封电子邮件的收件人(部分)显示警告,而不是CURRENT收件人。 这个问题不能一直重现,但一旦发生,程序就像:
向其他一些内部收件人发送另一封电子邮件,该程序显示警告"外部地址混合"以及"外部"地址来自先前发送的电子邮件(在上面的1中提到,并非所有地址都只是其中之一),并且,检测到的外部地址是Exchange地址格式,应该转换为SMTP格式。 奇怪的是,我找不到当前电子邮件的收件人列表中的地址。 如果我保存当前的电子邮件并重新启动Outlook,当我选择已保存的电子邮件并尝试重新发送时,没有这样的"外部"地址将再次被检测到。
看起来ItemSend事件传递的Item对象包含一些不仅属于当前电子邮件的收件人,而且还来自之前发送的收件人,但它们在当前电子邮件中不可见,而且我找不到这样的收件人在发送的电子邮件中也是如此。 我正在使用的工作PC没有调试环境,所以我的手段已经用完了。请提前谢谢你,给我你的帮助。
答案 0 :(得分:0)
这与你做>
有什么关系 if (countExternalAddress > 0)
{
Warn();
}
而不是 ==
if (countExternalAddress == 0)
{
Warn();
}
看起来很奇怪,但会留下一封电子邮件来警告你。