PHP解析gmail邮件回复

PHP解析gmail邮件回复,php,parsing,email,gmail,Php,Parsing,Email,Gmail,我正在尝试解析GMail电子邮件,但有一个问题:我如何知道回复对应的是哪封邮件 我试着按主题对电子邮件进行分类。例如,如果邮件主题为“hi-Jack”,则所有主题为“Re:hi-Jack”的邮件都是对此邮件的回复 但是,如果我有许多主题相同的电子邮件,我该怎么办?我如何知道他们回复的是哪封电子邮件 电子邮件是否对回复的目的地有唯一的编码?可能有一个ID或类似的东西来知道消息的子消息是什么(?)按主题线程不是一个好主意,因为正如您所注意到的,可能有几个基于相同主题的不同线程 您需要检查消息中的3个

我正在尝试解析GMail电子邮件,但有一个问题:我如何知道回复对应的是哪封邮件

我试着按主题对电子邮件进行分类。例如,如果邮件主题为“hi-Jack”,则所有主题为“Re:hi-Jack”的邮件都是对此邮件的回复

但是,如果我有许多主题相同的电子邮件,我该怎么办?我如何知道他们回复的是哪封电子邮件


电子邮件是否对回复的目的地有唯一的编码?可能有一个ID或类似的东西来知道消息的子消息是什么(?)

按主题线程不是一个好主意,因为正如您所注意到的,可能有几个基于相同主题的不同线程

您需要检查消息中的3个标题,以使线程(或其他类型的分组)成为可能:

消息ID:
包含一个字符串中的唯一消息标识符(您称之为“唯一代码”),该字符串由
字符包围,例如
大多数MUA将以上述形式或类似形式创建标识符。发送新邮件时应生成此标头

回复:
包含与此特定回复相关的消息,例如
。此标题应从其答复的
邮件ID
中复制

引用:
包含此“线程”中最近对消息的引用列表。该格式与上述格式类似,只是它们是分开的,例如,
它就在那里,以便您可以使用它在线程中定位消息

如果一条消息在几天后被回复或发布,如果没有参考列表,可能很难找到它。通常,邮件客户端会将引用列表修剪到合理的大小。所谓合理,我的意思是,对它进行足够的修剪,以便能够在线程中定位消息,但保持头的合理大小(没有太多引用)。例如,它可能包含5-10个引用,通常足以将其连接到其他消息<代码>引用:在原始邮件(第一封)已被删除的情况下也很有用,因此即使没有原始邮件,您仍然可以利用
引用:
列表构建线程化(分组)邮件

因此,为了使消息线程化,您需要读取所有消息,然后根据可以从上述头中提取的信息对线程进行排序

如果引用或消息ID的格式不符合您可以识别的格式(例如,
),您可以通过不对这些消息进行线程化并将其显示为非线程化来摆脱。因此,线程化/定位的通用算法可能如下所示:

  • 获取第一个消息ID
  • 检查附近(按日期)的邮件,查看其中一封邮件是否在其引用列表中包含邮件ID,或者是否在回复中包含邮件ID(如果没有),您无法将其分组,因此请将其作为独立邮件保存
  • 以某种方式对消息进行分组,可能基于
    日期:
    ,或
    接收:
    标题
  • 将此消息放入“完成”列表中,这样您就不需要进一步检查它(或相关参考)
  • 继续,直到找不到更多的引用,然后移动到下一条尚未在“完成”列表中的消息,并重复步骤,直到处理整个消息列表

  • 你可能需要一段时间才能把这件事做好,但现在至少你有了一个出发点。

    我试图为你澄清一些措辞,但你能解释一下最后一句话的意思吗?具体来说,“所有电子邮件都有唯一的代码和回复”部分让我困惑。这是一个陈述还是一个问题?你的意思是“to”还是“too”?第一步:。第二步:仇恨生活。@Gray这句话的意思是,消息有任何
    id
    来分配回复消息吗?@TomasLietuva好的,我更新了它。这对你来说还有意义吗?@Gray我正在处理消息。。。