PHP中的电子邮件,消息线程,可能需要正则表达式

时间:2011-11-08 17:16:26

标签: php regex email email-headers

我正在处理记录发送到某个地址的电子邮件的内容。我有一个PHP脚本,将信息放入MySql,工作正常。

我需要能够根据类似于Gmail的“对话”对邮件进行分组,并且已经对此进行了一些阅读。这不需要是完美的,因为消息在被显示在网站上之前将被手动批准,然后可以纠正任何错误。我只想尽可能减少工作量,以便将新电子邮件与原始邮件自动连接。

我的理解是In-Reply-To标题可以标识原始邮件,但它的使用不是标准的。

我在另一页上发现了这个:

The most common forms of In-Reply-To seemed to be:

31%     NAME's message of TIME <ID@HOST>
22%     <ID@HOST>
9%      <ID@HOST> from NAME at "TIME"
8%      USER's message of TIME <ID@HOST>
7%      USER's message of TIME
6%      Your message of "TIME"
17%     hundreds of other variants (average 0.4% each?)

然而,这似乎表明假设如果存在In-Reply-To字段,那么在其中找到的第一个<>括号内文本是父消息的消息ID是不合理的。

那么,获得该价值的最简单方法是什么?是否有正则表达式可以让我抓住<>内的任何内容(如果可用)? (根据我发现的帖子,这应该是<>中的第一个值吗?)

感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:2)

你应该能够在后面引用中抓住第一场比赛:

<(.+)>

说明:

//    Match the character “<” literally «<»
//    Match the regular expression below and capture its match into backreference number 1 «(.+)»
//       Match any single character that is not a line break character «.+»
//          Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»
//    Match the character “>” literally «>»

根据this documentation,您可以编写如下内容来完成您想要做的事情(如果这不是有效的PHP,请原谅我):

$string ='blah blah blah <ID@HOST>';
preg_match('/<(.+)>/', $string, $match);
print_r($match);