【问题标题】:Rails Griddler and conversation / email threadingRails Griddler 和对话/电子邮件线程
【发布时间】:2015-06-11 07:47:10
【问题描述】:

我正在尝试找出如何最好地连接/串接一连串电子邮件。这似乎是一个常见的问题,令我惊讶的是,我无法轻松找到其他人如何处理它的信息。我发现的唯一一件事是关于 JWZ threading 的帖子,它看起来更关心在一封电子邮件中解析一个线程。我想知道是否有人可以指出一些当前的解决方案。

我正在使用思想机器人 griddler gem 将传入的电子邮件处理成一个模型 Message(s) 和一个单独的模型 Contact(s),我还有第三个模型来存储回复,例如Reply

我目前的想法是通过唯一的联系人和主题行将它们串起来。但话又说回来,主题行会略有变化。例如从 "This subject" -> "Re: re: This subject" 我可以使用正则表达式来尝试解析 "re:"s 或者我可以使用 amatch 之类的东西来进行字符串比较?

但话又说回来,2 个月后同一用户出现的同一主题该怎么办?还添加一些关于当前日期的逻辑,以便线程只使用最近的电子邮件。那么邮件标题本身可能还存储了其他有用的东西?

  • 用户(通过唯一的电子邮件地址)
  • 唯一主题行(正则表达式:处理问题?)
  • 当前日期(电子邮件必须是相对日期)
  • 在电子邮件标题中寻找其他一些线索?

我对如何做到这一点有一个粗略的想法,我只是想看看一些当前的实现,但我似乎找不到任何实现。

任何指针将不胜感激!

【问题讨论】:

  • 是否可以使用here 所述的“Message-ID”标头来关联消息?

标签: ruby-on-rails email ruby-on-rails-4 email-threading griddler


【解决方案1】:

电子邮件线程是一个链接列表,标题中的信息包含足够的信息来从其组成部分重建列表。

检查电子邮件标题并寻找一些特定的标题。

您将使用的关键是Message-IDIn-Reply-ToReferences。这些标头为您提供了有关回复了哪条消息以及其他哪些 ID 对电子邮件线程本身很重要的信息。

查找有关电子邮件标题信息的最简单方法是在 gmail 中打开“原始消息”(从更多菜单中)。

【讨论】:

    【解决方案2】:

    有一个名为Msgthr 的新gem,它是JWZ 算法的一个实现。它与主题、发件人或日期不匹配,因此不是您正在寻找的内容,但我认为这是一个好的开始。

    Msgthr 最简洁的地方在于它与容器无关,因此您不必像 Frederik Dietz 的 ruby​​ 端口那样安装 TMail 之类的要求。这也意味着它可以用于其他类型的通信。

    这里有一些示例代码,给定消息列表,让我们将它们分组到线程中:

    thr = Msgthr.new
    threads = {}
    [1, 11, 12, 2, 21, 211].each{ |id| threads[id] = [id]}
    my_add = lambda do |id, refs, msg|
      thr.add(id, refs, msg) do |parent, child|
        threads[child.mid] = threads[parent.mid]
      end
    end
    # Create the following structure
    # 1
    #  \
    #  | 1.1
    #  \
    #    1.2
    # 2
    #   \
    #    2.1
    #       \
    #         2.1.1
    my_add.call(1, nil, '1')
    my_add.call(11, [1], '1.1')
    my_add.call(12, [1], '1.2')
    my_add.call(2, nil, '2')
    my_add.call(21, [2], '2.1')
    my_add.call(211, [21], '2.1.1')
    
    thr.thread!
    thr.rootset.each do |cnt|
      threads[cnt.mid][0] = cnt.msg
    end
    

    披露:我是 gem 的贡献者之一。

    【讨论】:

    猜你喜欢
    • 2013-11-25
    • 1970-01-01
    • 2014-06-12
    • 2011-04-06
    • 2015-06-11
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多