PHP problém s mail()
Tedy, on to možná není ani tak problém s PHP, jako takový zajímavý problém (či bug?) skriptu. Podívejte se na tento kód:
$to = 'info@hulan.info'; $subject = 'New password requested'; $message = 'Hello Radek Hulan,'."\n". 'You have requested to have a new password '."\n". 'assigned to your account in the '."\n". 'discussion forum at http://forum.blogcms.com/. '."\n". 'Your new password is: abcdefgh'; $headers = 'From: BLOG:CMS'."\n". 'Date: Sat, 13 Nov 2004 12:26:14 +0100'."\n". 'MIME-Version: 1.0'."\n". 'Content-transfer-encoding: 8bit'."\n". 'X-Mailer: PunBB Mailer'."\n". 'Content-Type: text/plain; charset=utf-8';
A nyní tento email pošleme:
mail($to, $subject, $message, $headers);
Vtip je v tom, že u mě na SUSE 9.1 s PHP 5.0.2 to email posílá, na xhost.cz s PHP 4.3.9 to email, rovněž posílá, ale na www.tojeono.cz s PHP 5.0.2 to email nepošle. Řešil jsem to s Ondřejem Svobodou asi hodinu, než nám to došlo, a přitom je to tak triviální…
A víte proč?
já si myslím že to není chyba php, ale sendmailu (případně jiného smtp), který odesílá emaily, ne php.
Hlavicka From musi byt ve tvaru:
From: "BLOG:CMS" <info@hulan.info> - tzn. jmeno odesilatele musi byt v uvozovkach.
viz: http://www.faqs.org/rfcs/rfc733.html...
<strip>
Once header fields have been unfolded, they may be viewed as being composed of a field-name followed by a colon (":"), followed by a field-body. The field-name must be composed of printable ASCII characters (i.e., characters which have values between 33. and 126., decimal, except colon) and LWSP-chars.
</strip>
Nějaké nastavení serveru?
V php.ini MUSÍ být nastavena defaultní odchozí adresa, jinak ten skript prostě nefunguje. Taky jsem se na tom pěkně dlouho zasekl.
[2] jasně, toto je ono, a děkuji, to je moc dobré vědět, a troufnu si tvrdit, že to pár lidem ušetří hodně práce :)
Já to ošetřil provizorně takto:
$from = str_replace(":",'\:',$from);
..Tipoval jsem vsechno, ale tohle ne... po tom co jsem studoval format hlavicek emailu,ktery je podle me prezitkem doby kdy se maily rucne busily dalnopisem mam k teto benevolentni norme docela odpor... co ta obsahuje vyjimek, synonym v prikazech, domplnujiciho znaceni apod, to neni normalni :D
Ještě je potřeba dát pozor na rn. Podle RFC musí být řádky zprávy (a hlaviček) oddělený rn. Na Unixu to ale obvykle funguje pouze s n a s rn naopak ne. Důvod je ten, že vytvořenou zprávu dostane obvykle řádkový příkaz sendmail, který n na rn převede. Ve Windows je naopak potřeba místo n psát rn.
Viz také bug http://bugs.php.net/bug.php?id=25373...