【发布时间】:2017-01-07 14:42:56
【问题描述】:
我为 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() 函数会根据(部分)最后一封电子邮件的收件人显示警告,而不是当前邮件。 问题一直无法重现,但出现时的流程是这样的:
- 向内部收件人(我的同事,交换地址)发送电子邮件,交换地址成功转换为 SMTP 地址,因为它们被预定义为“内部”地址,邮件将在没有警告的情况下发送。
-
向其他一些内部收件人发送另一封电子邮件,程序显示“外部地址混合”的警告,并且“外部”地址来自之前发送的电子邮件(上面1中提到,并非所有地址都只是其中一个),并且,检测到的外部地址是 Exchange 地址格式,应该转换为 SMTP 格式。 奇怪的是,我在当前电子邮件的收件人列表中找不到地址。 如果我保存当前电子邮件并重新启动 Outlook,当我选择保存的电子邮件并尝试重新发送时,将不会再次检测到这样的“外部”地址。
看起来 ItemSend 事件传递的 Item 对象包含一些收件人,不仅属于当前电子邮件,还来自以前发送的电子邮件,但它们在当前电子邮件中不可见,而且我找不到这样的收件人在发送的电子邮件中也是如此。 我正在使用的工作 PC 没有调试环境,所以我的钱用完了。请给我您的帮助,在此先感谢。
【问题讨论】:
-
这可能与我安装后删除了 .vsto 文件有关吗?安装后dll文件被复制到appdata/app,所以我认为.vsto文件不再有用了。
标签: c# vsto outlook-addin