【问题标题】:How to compare e-mail messages without using the body of the message?如何在不使用邮件正文的情况下比较电子邮件?
【发布时间】: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


【解决方案1】:

使用属性:

MailItem.SentOn

有可能生成该哈希值。发件人 Outlook 只有在发送邮件后才会拥有该信息。因此,在 Item_Send 文件夹中添加新项目时,代码必须运行。

【讨论】:

    猜你喜欢
    • 2016-12-03
    • 1970-01-01
    • 2021-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-04
    • 2011-12-29
    • 2012-12-25
    相关资源
    最近更新 更多