[PHP] mail() a diakritika - VYŘEŠENO

Webdesign, HTML, CSS, Flash, PHP, ASP, .NET, JavaScript. Kritika www stránek na Smetišti.

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod netrunner 24. 2. 2006 16:21

Hoj.
Snažím se posílat email přes PHP a funkci mail. Nedaří se mi ale žádným způsobem rozchodit posílání diakritiky a to jak v předmětu tak v textu:
Kód: Vybrat vše
<?php
$hlavicky = "From: aaa@example.com\r\n";
$hlavicky .= "Reply-To: aaa@example.com\r\n";
$hlavicky .= "Return-Path: aaa@example.com\r\n";
$hlavicky .= "MIME-Version: 1.0\r\n";
$hlavicky .= "Content-Type: text/plain; charset=iso-8859-2\r\n";
$hlavicky .= "Content-Transfer-Encoding: 8bit\r\n";
$predmet = "ěščřžýáíé";
$text = "Příliš žluťoučký kůň pěl ďábelské ódy.";
mail("bbb@example.com", $predmet, $text, $hlavicky)
?>
[/code]


A dojde prostě tohle:
ě�čř�ýáíé
Příli� �lu�oučký kůň pěl ďábelské ódy.

Zkoušel jsem všechny možné kódování od cp1250 po utf8, ale prostě nic.
Nevíte někdo co s tím? Jsem už naprosto zoufalej.... Všude akorád čtu, že tam má být kódování, ale já fakt nevím co s tím. Vzal sem i kompletní hlavičky z mailu, který jsem sám sobě poslal (bez "X-" hlaviček a recieved samozřejmě) ale nic....
Díky za každý nápad.


// mbing : Téma přesunuto ● z Programování do Tvorba webových stránek a aplikací.
Naposledy upravil netrunner dne 24. 2. 2006 23:22, celkově upraveno 1
netrunner
Junior
Uživatelský avatar

Odeslat příspěvekod 2ge 24. 2. 2006 20:15

skus vyhodit $hlavicky .= "Content-Transfer-Encoding: 8bit\r\n"; a skusaj dalej :)
SubDownloader - stahuj a nahravaj titulky k filmom pomocou opensource programu z OpenSubtitles.org
2ge
Junior
Uživatelský avatar

Odeslat příspěvekod netrunner 24. 2. 2006 20:16

To bohužel nepomůže, tak jsem to zkoušel...
netrunner
Junior
Uživatelský avatar

Odeslat příspěvekod Fenix 24. 2. 2006 20:35

Ja jsem to pred casem resil. Vysledek si muzes stahnout z http://kdf.mff.cuni.cz/~janek/php/cz_mime_mail.zip

je to dost prasacky kod, predpoklada, ze text mailu je v iso-8859-2, ale funguje spolehlive. Vola se funkce cz_mime_mail()

Tahej rychle, dlouho to tam nenecham.

P.S. posilani priloh to nepredpoklada a neumi.
Fenix
Junior

Odeslat příspěvekod netrunner 24. 2. 2006 21:22

No předpokládá je hezký, ale mě to prostě nechodí. Neexistuje nějaký funkce v PHP která by text převedla do ISO, abych měl sichr, že to chodí správně?
netrunner
Junior
Uživatelský avatar

Odeslat příspěvekod malvoj 24. 2. 2006 21:55

Kód: Vybrat vše
function sendMail($from, $to, $mail_subj, $mail_txt, $coding)
   {
   $headers = '';
   if ($coding == 1){
      $mail_txt = StrTr($mail_txt, "\x8A\x8D\x8E\x9A\x9D\x9E", "\xA9\xAB\xAE\xB9\xBB\xBE");
   }
   $headers .= "From: $from\n".
         "Return-Path: $from\n".
         "MIME-Version: 1.0\n".
         "Content-Type: text/plain; charset=\"iso-8859-2\"\n".
          "Content-Transfer-Encoding: 8bit";
         @Mail($to, $mail_subj, $mail_txt, @$headers);
   }


jde o to coding==1
hodne stesti
malvoj
Kolemjdoucí

Odeslat příspěvekod netrunner 24. 2. 2006 23:22

malvoj:
geniální, jednoduché, naprosto super.
Díky moc!
netrunner
Junior
Uživatelský avatar

Odeslat příspěvekod wojta 25. 2. 2006 09:09

Je dobré použít na převádění třeba iconv.
wojta
Pokročilý
Uživatelský avatar

Odeslat příspěvekod map 25. 2. 2006 11:39

Používám třídu HTML Mime Mail for PHP, která umí vše potřebné, včetně posílání příloh a bez problémů.
No one can hear when you're screaming in digital...
map
Junior
Uživatelský avatar

Odeslat příspěvekod Zorg 25. 2. 2006 12:06

Přesně tak, dělat to pomocí klasické funkce mail() je trochu krkolomné, buď HTML Mime Mail nebo další dobrá třída je k nalezení na SourceForge. Ta má výhodu, že je pod LGPL licencí oproti GPL licenci Mime Mailu.
Zorg
Junior

Odeslat příspěvekod 2ge 3. 3. 2006 21:46

poskusal som rozne Classy (tiez posielam mail, ale vsetko UTF-8 kodovanie). Velmi sa mi pacilo
Kód: Vybrat vše
<?php
$subject = "subject";
$message = "message"

//dont forget quotes around "name", else it won't be displayed correctly in utf-8
$from = "From: \"".$_POST['name']."\" <".$_POST['mail'].">";

mb_language('Neutral');
mb_internal_encoding("UTF-8");
mb_http_input("UTF-8");
mb_http_output("UTF-8");
mb_send_mail($to, $subject, $message, $from);

?>


posle to dokonca aj korektne :) takze snad to niekomu pomoze...
SubDownloader - stahuj a nahravaj titulky k filmom pomocou opensource programu z OpenSubtitles.org
2ge
Junior
Uživatelský avatar

Odeslat příspěvekod Capricho 11. 3. 2006 00:26

moc mi tohle scriptování nejde nemohl by mi někdo poradit konkrétní už přednastavený balíček který se dá stáhnout z netu.
Capricho
Junior

Odeslat příspěvekod Christof 11. 3. 2006 08:32

netrunner píše:Hoj.
$hlavicky .= "Content-Type: text/plain; charset=iso-8859-2\r\n";
A dojde prostě tohle:
ě�čř�ýáíé
Příli� �lu�oučký kůň pěl ďábelské ódy.
/quote]


A urcite je ten text v kodovani ISO-8859-2? ISO-8859-2 a Windows-1250 se totiž liší právě v š,ž,ť
Christof
Junior

Odeslat příspěvekod cM 20. 3. 2006 19:13

Mam len otazocku k malvojovmu rieseniu.. ako zistim ci sa mail podarilo odoslat?

$m = sendMail($email, "xxx@yyy.zz", "subject", $Mail, 1);

mi $m nevracia hodnotu true, aj ked mail odosle. Ked pouzivam klasicku fciu Mail tak mi to vracia hodnotu true.

Neviete v com moze byt problem (pravdepodobne medzi klavesnicou a stolickou, ale ak viete pomoct, pomozte ;) )?
cM
Kolemjdoucí

Odeslat příspěvekod 2ge 27. 3. 2006 10:41

v tej funkcii co pouzivas je na konci:
Kód: Vybrat vše
@Mail($to, $mail_subj, $mail_txt, @$headers);

tak tam dohod return a pojde to asi, ci nie ? :)
SubDownloader - stahuj a nahravaj titulky k filmom pomocou opensource programu z OpenSubtitles.org
2ge
Junior
Uživatelský avatar


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků