Электронная почта в PHP, потоки сообщений, возможно, требуется регулярное выражение - PullRequest
1 голос
/ 08 ноября 2011

Я работаю над тем, что регистрирует сообщения электронной почты, отправленные на определенный адрес. У меня есть сценарий 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, то первым найденным в скобках текстом <> будет Message-ID родительского сообщения.

Итак, как проще всего получить это значение? Есть ли регулярное выражение, которое позволило бы мне взять все, что есть внутри < и >, если доступно? (Согласно сообщению, которое я нашел, должно ли это быть ПЕРВОЕ значение внутри < и >?)

Спасибо за любую помощь, которую вы можете предоставить.

1 Ответ

2 голосов
/ 09 ноября 2011

Вы должны иметь возможность просто получить первый матч в обратном обращении:

<(.+)>

Объяснение:

//    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 «>»

Согласно эту документацию вы можете написать что-то вроде следующего, чтобы выполнить то, что вы хотите сделать (извините, если это не правильный php):

$string ='blah blah blah <ID@HOST>';
preg_match('/<(.+)>/', $string, $match);
print_r($match);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...