使用Redemption.ISafeMailItem对象获取MailItem收件人

时间:2012-08-23 23:17:24

标签: outlook c#-2.0 outlook-addin outlook-redemption

我在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 已发邮件收件人而无需修改?您的建议将不胜感激。

0 个答案:

没有答案