kódování v mail()

7 příspěvků

Archiv diskusního fóra

Fórum je uzavřené a slouží pouze ke čtení. Některé informace mohou být zastaralé.

  1. Ahoj, mám odesílání mejlu podle tohohle návodu: http://tvorba-webu.zdarek.com/php/email.php. Všechno funguje OK, akorát se mi to do mejlu pošle se špatným kódováním, všechno mám v UTF-8 i email na seznamu je v UTF-8, tak nevím čím to. Díky moc...
  2. V hlavičkách e-mailové zprávy musí být také informace o použitém kódování (viz rfc 822, tuším). Funkce odesílající správně textové e-maily v UTF8 by mohla vypadat takto: function mailer($od, $komu, $predmet, $zprava) { $predmet = "=?UTF-8?B?".base64_encode($predmet)."?="; $hlavicka = "Content-type: text/plain; charset=UTF-8\n" . "From: ".$od."\n" . "X-Mailer: PHP"; return mail($komu, $predmet, $zprava, $hlavicka); }
  3. =HuH= V některých e-mailových klientech jsem měl ale problém přečíst i e-mail v utf-8 kódování.. (rok zpátky..) - používal jsem proto iso kódování.. //vstupní data (predmet,text) už jsou v iso-8859-2..k tomu se pouzil iconv().. function email($komu, $predmet, $text, $hlavicky, $odesilatel){ $text = chunk_split(Base64_Encode($text)); $hlavicky .= "From: ".$odesilatel."\n"; $hlavicky .= "X-Sender: ".$odesilatel."\n"; $hlavicky .= "X-Mailer: PHP\n"; // mailový klient $hlavicky .= "Return-Path: ".$odesilatel."\n"; $hlavicky .= "Content-Transfer-Encoding: base64\n"; $hlavicky .= "MIME-Version: 1.0\n"; $hlavicky .= "Content-Type: text/plain; charset=\"iso-8859-2\"\n"; mail($komu, $predmet, $text, $hlavicky); }
  4. OK super, už mi to jede ale trochu OT. Ze stránky registrace si pošlu tenhle form: <form action="/registrace_script/" method="post"> <input name="spam" size="25" /> <input name="email" size="25" value="" /> <input name="predmet" size="40" value="" /> <textarea name="zprava" rows="8" cols="40"></textarea> <input name="submit" type="submit" value="Odeslat" /> <form/> a zpracovávám ho: <? $predmet = $_POST['predmet']; $email = $_POST['email']; $spam = $_POST['spam']; $zprava = $_POST['zprava']; $zprava = chunk_split(Base64_Encode($zprava)); $jmeno = $_POST['jmeno']; $adresa = $_POST['adresa']; $hlavicky .= "From: ".$email."\n"; $hlavicky .= "X-Sender: ".$email."\n"; $hlavicky .= "X-Mailer: PHP\n"; // mailový klient $hlavicky .= "Return-Path: ".$email."\n"; $hlavicky .= "Content-Transfer-Encoding: base64\n"; $hlavicky .= "MIME-Version: 1.0\n"; $hlavicky .= "Content-Type: text/plain; charset=\"utf-8\"\n"; if ($predmet!="" and $email!="" and $zprava!="" and $spam=="2") { (Mail("email@seznam.cz", $predmet, $zprava, $hlavicky)); echo "<p><strong>Váš e-mail byl úspěšně odeslán</strong>.</p>"; } else { echo "<p>Váš e-mail se <strong>nepodařilo odeslat</strong> pravděpodobně jste nevyplnili všechny údaje, nebo nevíte kolik je 1+1 :-).</p>"; } ?> No a teď kdybych chtěl do "zprava" (tedy aby se mi objevilo v těle mejlu) ještě vypsat "email" nebo další proměnou tak napíšu na začátku do proměných: $zprava = (($_POST['zprava'];) and ($email) and ($jina_promena)); Jenže to nefunguje a dojde jako tělo mejlu vždycky "1". Díky
  5. PS: (($_POST['zprava'];) je samozřejmě bez ";", to jsme se uklik do diskuze
  6. <HTML>and není určen ke spojování řetězců, ale k logickým operacím. Takže se nediv, že ti to vrací jedničku ;) Ke spojování řetězců slouží tečka: $zprava = (($_POST['zprava']) . ($email) . ($jina_promena));</HTML>
  7. ó, moc díky, už to jede přesně podle mých představ :-)

← Zpět na všechna témata