【发布时间】:2019-02-16 08:32:28
【问题描述】:
如何在不使用邮件正文的情况下比较电子邮件?
例如:
- John 向 Mary 发送了一条消息,并将这条消息“保存”在我的插件中。
- 两者都有相同的插件。
- 当 Mary 收到邮件时,必须对该邮件进行分类,因为 John 已经“保存”了该邮件。
如何在不使用消息正文的情况下识别 Mary 收到的消息与 John 发送的消息(“save”)相同?
目前它的工作方式如下,使用以下信息制作 HASH:
- 发件人
- 收件人
- 主题
- 消息正文
这个Hash存储在数据库中,当Mary's Outlook触发新邮件事件时,会生成一个信息相同的HASH,在数据库中进行比较,看是否应该分类。
问题在于,根据消息的正文大小,它不是执行的,通过 MailItem.Body 属性获取消息的正文需要很长时间。
不使用消息正文的目的仅仅是为了提高性能。
public string GetAssinatura(Outlook.MailItem email)
{
try
{
string corpoEmail = email.Body;//this is not performatic with big messages
var hash = GenerateHash(corpoEmail);
}
}
对话参与者可以回复或转发邮件,因此 Outlook 和大多数最常用的电子邮件客户端将主题更改为默认设置,例如 Re: Subject。 因此,不可能只有参与者和主题的哈希。
【问题讨论】:
-
我认为发件人+收件人+主题是不够的。
-
@KennethGarza 不是,我的例子是一个坏例子,更像是,如果邮件是从 A 公司的人发送给 B 公司的人,两者都有相同的 Addin(database) I需要确定那个条件..如果使用发件人+收件人+主题,2条信息相同的消息将返回相同的哈希...
-
我怀疑是这样的……似乎什么都想不起来。我建议发布一个不高性能的代码示例。您尝试获得的内容可能还有其他选择。
-
发件人/收件人/主题不够独特。我认为你不能避免使用 Body。
-
嗨@DmitryStreblechenko,这还不够,因为在回复和转发邮件时,Outlook 总是将主题更改为相同的模式。例如:RE:主题。在这些情况下,哈希将与另一个相同,我的应用程序认为该消息已被存储。我需要一些我可以从发件人和收件人那里得到的东西。
标签: c# office-interop outlook-addin outlook-redemption addin-express