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:
From kontakt@wizarts.pl Thu May 23 20:22:04 2013
Received: from public99535.xdsl.centertel.pl ([46.134.196.207]:27932 helo=wizart01)
by s38.ehost.pl with esmtp (Exim 4.80)
(envelope-from <kontakt@wizarts.pl>)
id 1Ufa9M-00032p-3b
for test@wizarts.pl; Thu, 23 May 2013 20:22:04 +0200
From: =?iso-8859-2?Q?Wizarts_-_systemy_zarz=B1dzania_tre=B6ci=B1=2C_strony_inte?=
=?iso-8859-2?Q?rnetowe=2C_outsourcing_it?= <kontakt@wizarts.pl>
To: <test@wizarts.pl>
Subject: 1234
Date: Thu
, 23 May 2013 20
:22
:00
+0200
Message-ID: <004e01ce57e2$6b548650$41fd92f0$@wizarts.pl>
MIME-Version: 1.0
Content-Type: multipart/related;
boundary="----=_NextPart_000_004F_01CE57F3.2EDD5650"
X-Mailer: Microsoft Outlook 14.0
Thread-Index: Ac5X4mp7aGFQi2obRh6rO9r9Zi0HTA==
Content-Language: pl
Założenie, że adres przyjdzie w pierwszej linii wydaje się niewłaściwe, a regex:
^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
$lines = explode("\n", $email_content);
2. Szukam pierwszej lini pasującej do regex:
$line_pattern = "/^(From |From: |From:)[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}(.*)$/";
for ($i=0; $i < count($lines); $i++) { if (preg_match($line_pattern, $lines[$i], $matches)) { $from = $matches[0];
}
}
3.Ze znalezionej linii wyciągem adres email:
$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])+)\])/";
$from = $emails[0];
Będę wdzięczny za uwagi.
Ten post edytował wizarts 24.05.2013, 09:47:43