Problem polega na tym, że nie mogę poradzić sobie z wyciągnięciem z wiadomości email adresu osoby, która go wysłała.

Chodzi o sytuację, w której wysłany email uruchamia skrypt, który następnie wysyła przygotowaną wiadomość elektorniczną. ( CPanel - pipe to program )
Całą wiadomość mam wrzuconą do "stringa" mogę ją też podzielić na poszczególne linie, ale nie umiem znaleźć sposobu na jednoznaczne znalezienie.
Poniżej przykladowy email wysłany przy pomocy Outlook'a:

  1. From kontakt@wizarts.pl Thu May 23 20:22:04 2013
  2. Received: from public99535.xdsl.centertel.pl ([46.134.196.207]:27932 helo=wizart01)
  3. by s38.ehost.pl with esmtp (Exim 4.80)
  4. (envelope-from <kontakt@wizarts.pl>)
  5. id 1Ufa9M-00032p-3b
  6. for test@wizarts.pl; Thu, 23 May 2013 20:22:04 +0200
  7. From: =?iso-8859-2?Q?Wizarts_-_systemy_zarz=B1dzania_tre=B6ci=B1=2C_strony_inte?=
  8. =?iso-8859-2?Q?rnetowe=2C_outsourcing_it?= <kontakt@wizarts.pl>
  9. To: <test@wizarts.pl>
  10. Subject: 1234
  11. Date: Thu, 23 May 2013 20:22:00 +0200
  12. Message-ID: <004e01ce57e2$6b548650$41fd92f0$@wizarts.pl>
  13. MIME-Version: 1.0
  14. Content-Type: multipart/related;
  15. boundary="----=_NextPart_000_004F_01CE57F3.2EDD5650"
  16. X-Mailer: Microsoft Outlook 14.0
  17. Thread-Index: Ac5X4mp7aGFQi2obRh6rO9r9Zi0HTA==
  18. Content-Language: pl


Założenie, że adres przyjdzie w pierwszej linii wydaje się niewłaściwe, a regex:
  1. ^From [A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$

nic nie wyciąga.
Będę wdzięczny za pomoc.

[edit: 24.05.2013 10:47]
Wymysliłem coś takiego:

1. Każdą linię wiadomości wrzucam do komórki w tablicy
  1. $lines = explode("\n", $email_content);


2. Szukam pierwszej lini pasującej do regex:
  1. $line_pattern = "/^(From |From: |From:)[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}(.*)$/";
  2. for ($i=0; $i < count($lines); $i++) {
  3. if (preg_match($line_pattern, $lines[$i], $matches)) {
  4. $from = $matches[0];
  5. }
  6. }


3.Ze znalezionej linii wyciągem adres email:
  1. $pattern="/(?:[a-z0-9!#$%&'*+=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+=?^_`{|}~-]+)*|\"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])/";
  2. preg_match($pattern,$from,$emails);
  3. $from = $emails[0];


Będę wdzięczny za uwagi.