我正在努力找出如何最好地连接/线程一串电子邮件。这似乎是一个很常见的问题,让我感到惊讶的是,我很难找到其他人如何处理这个问题的信息。我发现的唯一一件事是关于JWZ线程的一篇文章,它看起来更关心在一封电子邮件中一起解析一个线程。我想知道是否有人能给我指出一些目前的解决方案。
我正在使用thoughtbot griddler宝石将传入的电子邮件处理成一个模型Message(s)和一个单独的模型Contact(s),我还有第三个模型用于存储回复,例如Reply。
我目前的想法是通过独特的接触和主题线将它们联系起来。但话又说回来,主题行会略有变化。例如,从"This -> "Re: re: This subject“我可以使用regex来尝试解析"re:"s或我可以使用类似舱口的东西来进行字符串比较吗?
但话又说回来,两个月后,对于同一个用户出现的同一主题,该怎么办呢?还添加一些关于当前日期的逻辑,以便线程只使用最近的电子邮件。那么,在电子邮件标题本身中可能还有其他有用的东西吗?
我对如何做它有大致的想法,我只是好奇地看到一些当前的实现,我只是找不到任何东西。
任何指点都将不胜感激!
发布于 2015-06-19 05:45:08
电子邮件线程是一个链接列表,标题中的信息包含足够的信息来从其组件部分重构列表。
内省电子邮件的标题,并寻找一些特定的标题。
您将使用的关键是Message-ID、In-Reply-To和References。这些标头为您提供了有关回复哪条消息以及其他ids对电子邮件线程本身有什么影响的信息。
查找邮件标题信息的最简单方法是在gmail中打开“原始消息”(从“更多”菜单中)。
发布于 2018-01-27 22:24:28
有一个名为姆斯格特的新gem,它是一个实现JWZ的算法。它不是匹配的主题,发送者或日期,所以这并不完全是你想要的,但我认为这是一个好的开始。
Msgthr最整洁的地方在于它与容器无关,因此您不必安装诸如TMail这样的需求,就像Frederik的ruby端口中的那样。这也意味着它可以用于其他类型的通信。
下面是一些给出消息列表的示例代码,让我们将它们分组到线程中:
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披露:我是创业板的贡献者之一。
https://stackoverflow.com/questions/30774709
复制相似问题