Извлечение конечного получателя из отправленного электронного письма

#php #regex

#php #регулярное выражение

Вопрос:

Это строка, которая у меня есть:

 --A683C6405E1.1403410842/server.abc.com
Content-Description: Delivery report
Content-Type: message/delivery-status

Reporting-MTA: dns; server.abc.com
X-Postfix-Queue-ID: A683C6405E1
X-Postfix-Sender: rfc822; bouncer@abc.com
Arrival-Date: Tue, 13 Jun 2012 00:03:28 -0400 (EDT)

Final-Recipient: rfc822; getthis@gmail.com
Action: failed
Status: 4.4.1


--A683C6405E1.1403410842/server.abc.com
Content-Description: Undelivered Message
Content-Type: message/rfc822
Content-Transfer-Encoding: 8bit

Return-Path: 
Received: by server.abc.com (Postfix, from userid 517)
    id A683C6405E1; Tue, 17 Jun 2014 00:03:28 -0400 (EDT)
 

Мне нужно извлечь Final-Recipient из этой строки. Вывод должен быть getthis@gmail.com .

Комментарии:

1. Вы можете использовать следующее регулярное выражение: Final-Recipient:[^;] ;s*(S @S .S ) .

2. приведенное выше регулярное выражение не работает. можете ли вы предложить мне еще раз?

Ответ №1:

Final-Recipient:s*RFC822;s*([w_. -] @[w-] .[w-.] ) или Final-Recipient:s*RFC822;s*(.*)

Первый также имеет средство проверки структуры почтового адреса, второй фиксирует все, что находится в конце строки. Я не знаю, какой почтовый адрес должен быть в конечном получателе — если может быть только правильный почтовый адрес, оба будут работать. Но если там также может быть неработающий почтовый адрес (например, abc@abc или *?= {gmail.com ), второе регулярное выражение будет тем самым.


Кстати, не забудьте установить для регулярного выражения значение нечувствительный (PHP: "/Final-Recipient:s ?RFC822;s ?(.*)/i" ). Я предполагаю, что RFC может быть как в верхнем, так и в нижнем регистре.