在Outlook VSTO中快速更改项目的收件人

时间:2015-11-23 12:59:39

标签: outlook vsto

我正在开发的Outlook加载项需要替换Recipients的整个MailItem集合。官方批准的解决方案包括执行以下操作:

// Clear the old recipients.
while (mailItem.Recipients.Count > 0)
{
    mailItem.Recipients.Remove(1);
}

// Insert the new recipients.
foreach (var newRecipient in newRecipients)
{
    mailItem.Recipients.Add(newRecipient);
}

不幸的是,这根本不会扩展到大量收件人(大约数百个收件人)。对Recipients集合的每次更改都会产生很大的开销,因为Outlook需要刷新GUI(这在组合窗口中快速闪烁到to / cc / bcc字段时可见)。我的实验表明,在我的机器上,使用几百个收件人完成此过程需要一分钟(!)才能完成。

为了缓解这种情况,我提出了以下更快的解决方案:

// Clear the old recipients.
mailItem.To = null;
mailItem.CC = null;
mailItem.BCC = null;

// Insert the new recipients.
// We pretend that the CC and BCC fields are empty for now.
mailItem.To = string.Join(";", newRecipients);

To属性是可写的,代码似乎表现正常。但是,我担心VSTO documentation中的以下注释:

  

此属性仅包含显示名称。 To属性对应于MAPI属性PidTagDisplayTo。应使用Recipients集合来修改此属性。

我不确定我应该如何理解这一点。如果To不应该被直接操作,为什么它是可读写的?我对Outlook大师的问题是:

这是安全的,只是没有记录,或者我是否可能通过以这种方式间接操纵收件人而遇到重大问题?

0 个答案:

没有答案