我在C#中编写简单的Outlook程序,它记录MailItem的收件人以发送邮件。要构建它,我将挂钩到Outlook Mailitem Send
事件以获取Recipient
集合。另外,为避免Outlook安全提示,我使用了赎回SafeMailItem
。
要阅读Recipient
集合,我将MailItem
分配给SafeMailItem
并阅读Recipients
。但是,如果Recipient
有未保存的更改,则MailItem
集合将不相同。要复制Recipient
集合,MailItem
需要保存,然后通过兑换SafeMailItem
进行访问。
//event handler
void _MailItemSend(ref bool Cancel)
{
SafeMailItem safeMailItem = (SafeMailItem)Activator.CreateInstance(Type.GetTypeFromProgID(RDOCustomClasses.SafeMailItem));
SafeRecipients recipients = null;
safeMailItem.Item = mailItem; // Assigning original mailItem which getting sent by outlook without saving it (just compose & send email before it get autosaved by outlook or manually)
recipients = safeMailItem.Recipients
// If mailItem have unsaved changes safeMailItem.Recipients will be different.
recipients.Count != mailItem.Recipients.Count;
}
所以我认为调用Save()
是有道理的,但我没有改变任何内容,而调用Save()
导致另一个问题。当我尝试退出Outlook时,它说:
有未保存的更改“您要保存更改”吗?
我尝试直接访问Mailitem.Recipients
(它在发送邮件之前有最新和未保存的收件人列表),但它会创建Outlook安全提示。如果我使用了Redemption,则在访问之前需要调用save来创建其他问题。
是否有更好的方法可以安全地接收Outlook 已发邮件收件人而无需修改?您的建议将不胜感激。