PHP: mail() a kódování

Založil Roman Horník, 12. 04. 2010, 13:48:12

Předchozí téma - Další téma

Roman Horník

Nazdar,
potřebuju pomoct vyřešit jeden nepříjemnej problém s kódováním mailů. Pro jednu klientku, která vlastní menší hotel, jsem připravil formulář na objednávání ubytování. Bohužel mám ale nemalý problémy s kódováním. Vzhledem k tomu, že jej budou používat i zahraniční návštěvníci, zvolil jsem jako nejlepší volbu pro kódování UTF-8, jenže jsem si bláhově myslel, že mail() používá jako výchozí kódování UTF-8 a dává jej do hlavičky zprávy, ono ale ne. Testoval jsem to na Gmailu, jenže na něm se zpráva zobrazuje snad vždycky korektně, i kdyby byla kódována Enigmou. Jenže jak jsem jí poslal zkušební zprávu, vrátila mi ji s paznakama místo diakritiky, použil jsem od oka ISO-8859-2 a všechno v pořádku, ale protože se kopie zprávy posílá i klientovi, může nastat průser.
Pár fíglů, jak do hlaviček nastrkat typ kódování jsem zkusil, ale asi jsem někde dělal chybu a buďto to tu hlavičku ignorovalo, nebo skript nešel vůbec.

Nezná někdo něco jednoduchýho, co by skutečně fungovalo? Klidně se to může kódovat do Base64 (nebudou-li s tím mít starší mailový klienti problémy).

Pro úplnost sem dávám prasokód odesílacího skriptu, nekamenujte mne za tu prasečinu, je to zatím alfaverze ;D

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; ISO-8859-2">
<meta http-equiv="Content-Style-Type" content="text/css">
<link rel="shortcut icon" type="image/x-icon" href="/image/favicon.ico">
<title>Objednávací formulář</title>
</head>
<body style="font-family: Arial; text-align: center;">
<h1>Odesílání formuláře</h1>
<?
$jmeno = $_POST['jmeno'];
$prijmeni = $_POST['prijmeni'];
$adresa = $_POST['adresa'];
$mesto = $_POST['mesto'];
$psc = $_POST['psc'];
$zeme = $_POST['zeme'];
$tel = $_POST['telefon'];
$mail = $_POST['mail'];
$term1a = $_POST['term1a'];
$term1b = $_POST['term1b'];
$term2a = $_POST['term2a'];
$term2b = $_POST['term2b'];
$dospeli = $_POST['dospeli'];
$deti6 = $_POST['deti6'];
$deti12 = $_POST['deti12'];
$stravovani = $_POST['stravovani'];
$ubytovani = $_POST['ubytovani'];
$zprava = $_POST['zprava'];
$antispam = $_POST['antispam'];
$predmet1 = "OBJEDNÁVKA";
$predmet2 = "xxxxx- objednávka";

if ($jmeno!="" and $prijmeni!="" and $adresa!="" and $mesto!="" and $psc!="" and $zeme!="" and $tel!="" and $mail!="" and $term1a!="" and $term1b!="" and $term2a!="" and $term2b!="" and $dospeli!="" and $dospeli!="0" and  $deti6!="" and $deti12!="" and $antispam=="xxxxx")
{
mail ("<xxxxx@xxxxx.xx>", $predmet1 , "xxxxx ~ OBJEDNÁVKA\n\n" . "Jméno, příjmení: " . $jmeno . " " . $prijmeni . "\nAdresa: " . $adresa . "\nMěsto: " . $mesto . "\nPSČ: " . $psc . "\nZemě: " . $zeme . "\n\nTel: " . $tel . "\nE-mail: " . $mail . "\n\n" . "Termín: " . $term1a . " - " . $term1b . "\nNáhradní termín: " . $term2a . " - " . $term2b . "\nPočet dospělých: " . $dospeli . "\nPočet dětí do 6 let: " . $deti6 . "\nPočet dětí do 12 let: " . $deti12 . "\nStravování: " . $stravovani . "\nUbytování: " . $ubytovani . "\n\n" . "\nZpráva odesílatele:\n" . $zprava . "\n\n" . "\n\nTento e-mail byl odeslán z webového formuláře hotelu xxxxx", "From: " . $jmeno . " " . $prijmeni . "<" . $mail . ">", $hlavicka);
mail ("<" . $mail . ">", $predmet2 , "xxxxx ~ OBJEDNÁVKA\n\n" . "Jméno, příjmení: " . $jmeno . " " . $prijmeni . "\nAdresa: " . $adresa . "\nMěsto: " . $mesto . "\nPSČ: " . $psc . "\nZemě: " . $zeme . "\n\nTel: " . $tel . "\nE-mail: " . $mail . "\n\n" . "Termín: " . $term1a . " - " . $term1b . "\nNáhradní termín: " . $term2a . " - " . $term2b . "\nPočet dospělých: " . $dospeli . "\nPočet dětí do 6 let: " . $deti6 . "\nPočet dětí do 12 let: " . $deti12 . "\nStravování: " . $stravovani . "\nUbytování: " . $ubytovani . "\n\n" . "\nZpráva odesílatele:\n" . $zprava . "\n\n" . "\n\nTento e-mail byl odeslán z webového formuláře hotelu xxxxx", "From: " . $jmeno . " " . $prijmeni . "<" . $mail . ">", $hlavicka);
echo "<p><b>Vaše objednávka byla úspěšně odeslána</b><br><br>Kopie objednávky Vám byla odeslána e-mailem</p>";
}
else
{
echo "<p>Vaši objednávku se <b>nepodařilo odeslat</b>, pravděpodobně jste nevyplnili všechny položky.</p>";
}
?>
</body>
</html>
Debian Sid/Experimental 64bit + Mate Desktop Environment
* CPU: Intel i5 3570
* GPU: NVIDIA GTX650 1GD5
* MB: Lenovo IH61M
* RAM: 16GiB Deutsche Demokratische Republik 3 @ 1600MHz

hoffmann

Debian Jessie | Kernel 3.16.0-4-amd64 | XFCE 4.10,
- notebook HP630 Intel Pentium Dual Core B960 2,2 GHz | 6 GB DDR3 1333 MHz | Intel HD Graphics | HDD Toshiba 320 GB 5400 RPM S-ATA | DVD+/-RW SuperMulti DL s LightScribe 
- is dead notebook Asus A9RP Celeron M440 1,86 GHz | grafika ATI Radeon Xpress 200m | HD 60 GB | pamet DDR II 1024 MB | DVDRAM GSA-T40N HL-DT-ST | Wi-Fi ASUS

Linux user number: 480304

Roman Horník

Debian Sid/Experimental 64bit + Mate Desktop Environment
* CPU: Intel i5 3570
* GPU: NVIDIA GTX650 1GD5
* MB: Lenovo IH61M
* RAM: 16GiB Deutsche Demokratische Republik 3 @ 1600MHz

hoffmann

Debian Jessie | Kernel 3.16.0-4-amd64 | XFCE 4.10,
- notebook HP630 Intel Pentium Dual Core B960 2,2 GHz | 6 GB DDR3 1333 MHz | Intel HD Graphics | HDD Toshiba 320 GB 5400 RPM S-ATA | DVD+/-RW SuperMulti DL s LightScribe 
- is dead notebook Asus A9RP Celeron M440 1,86 GHz | grafika ATI Radeon Xpress 200m | HD 60 GB | pamet DDR II 1024 MB | DVDRAM GSA-T40N HL-DT-ST | Wi-Fi ASUS

Linux user number: 480304

drahos

Včera jsem přesně tohle hledal jak blbec na googlu (nakonec jsem našel) a dneska se dozvim, že ste to tu už vyřešili.

P.S. Dík za odkaz.
I hate Windows Vista!!!