发送邮件后获取邮件ID

时间:2016-04-10 11:57:08

标签: c# email outlook outlook-redemption

对于我的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 也试图存储邮件的哈希,他会得到相同的哈希值(因为主题和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_,因此我们无法使用此属性。

1 个答案:

答案 0 :(得分:1)

尝试使用PR_SEARCH_KEY MAPI属性 - 在邮件发送并移至“已发送邮件”文件夹后,它应保持不变。

相关问题