【发布时间】:2016-07-31 11:25:48
【问题描述】:
对于我的 Outlook 插件,我需要处理电子邮件,计算 唯一 哈希并将此哈希存储在服务器/数据库中。例如:
有 4 个用户:
- user1@company.com
- user2@company.com
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 也尝试存储邮件的哈希值,他会得到相同的哈希值(因为主题和消息 ID 应该相同 ==> 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);
此外,如果将新项目添加到收件箱文件夹,则可能会收到通知。所以我观察 sent 文件夹。
inbox = outlookNameSpace.GetDefaultFolder(MSOutlook.OlDefaultFolders.olFolderSentMail);
items = inbox.Items;
items.ItemAdd += OnInboxItemAdded;
如果邮件是通过SendMailItem(mailItem); 发送的,则调用处理程序(也可以正常工作)。但不幸的是,我在计算发送邮件的哈希时遇到了问题,因为这封邮件没有 Message-ID。有谁知道如何获取刚刚发送的邮件的Message-ID。
我已经尝试自行设置 Message-ID,但它已被 MS Exchange 服务器覆盖。
编辑: Outlook 处于缓存模式。我也需要获取此场景的 Message-ID。
EDIT2(除了 cmets):
案例 3:
randomperson 想向 User1、User2 和 User3 发送邮件。因为 randomperson 不属于他们的公司,User1 想使用函数StoreFromInbox()。所有三个用户的收件箱中的邮件都具有相同的 Message-ID。但是他们有不同的 _PR_SEARCH_KEY_ ,所以我们不能使用这个属性。
【问题讨论】:
-
那是相关的,你是对的。没有缓存模式它可以工作。但是也有可能在缓存模式下获取 id 吗?
标签: c# email outlook outlook-redemption