对于我的Outlook插件,我需要处理电子邮件,计算唯一哈希并将此哈希存储在服务器/数据库上。例如:
共有4位用户:
user3@company.com
randomperson@gmail.com
案例1:
User1 向 User2 和 User3 发送邮件。 User2 想要存储mailhash服务器端,因此他点击了一个加载按钮。使用类似
的代码计算哈希值var accessor = mailItem.PropertyAccessor;
var subject = accessor.GetProperty(_PR_SUBJECT_W_TAG).ToString();
var messageId = accessor.GetProperty(_PR_INTERNET_MESSAGE_ID_W_TAG).ToString();
var hash = CalulateHash(subject + messageId);
此哈希存储在服务器上。如果 User3 也试图存储邮件的哈希,他会得到相同的哈希值(因为主题和messageid应该是相同的==> rfc822)并且服务器知道,他得到了这个哈希已经。这非常有效。
案例2:
User1 想要向 User2 , User3 和 randomperson 发送邮件。因为 randomperson 不属于他们的公司, User1 想要使用函数SendAndStore()
。在发送邮件之前,会将自定义属性添加到新邮件
mailItem.UserProperties.Add("HandleAfterSent", MSOutlook.OlUserPropertyType.olText);
var aasProp = mailItem.UserProperties.Find("HandleAfterSent");
if (aasProp != null)
{
aasProp.Value = "some_value";
}
mailItem.Save();
SendMailItem(mailItem);
此外,如果将新项目添加到内部文件夹,则可能会收到通知。所以我观察已发送文件夹。
inbox = outlookNameSpace.GetDefaultFolder(MSOutlook.OlDefaultFolders.olFolderSentMail);
items = inbox.Items;
items.ItemAdd += OnInboxItemAdded;
如果邮件是通过SendMailItem(mailItem);
发送的,则会调用该处理程序(也可以正常工作)。但遗憾的是我在计算发送邮件的哈希值方面存在问题,导致此邮件没有Message-ID。有没有人有一个想法,如何获取邮件的消息ID,这是刚才发送的。
我已经尝试自己设置Message-ID,但它已从MS Exchange服务器覆盖。
编辑: Outlook处于缓存模式。我也有可能获得此场景的Message-ID。
EDIT2(除了评论):
案例3:
randomperson 希望向 User1 , User2 和 User3 发送邮件。因为 randomperson 不属于他们的公司, User1 想要使用函数StoreFromInbox()
。所有三个用户的收件箱中的邮件具有相同的邮件ID。但它们有不同的_PR_SEARCH_KEY_,因此我们无法使用此属性。
答案 0 :(得分:1)
尝试使用PR_SEARCH_KEY
MAPI属性 - 在邮件发送并移至“已发送邮件”文件夹后,它应保持不变。