Autor | Zpráva | ||
---|---|---|---|
virgo86 Profil |
#1 · Zasláno: 5. 1. 2010, 16:02:14
Zdravím a hned ze startu Vím že toto téma se tady nesčetněkrát probíralo ale ani jednu jsem dostatečně nepochopil. Proto napíšu svůj skript. Jde mi o klasiku špatná diakritika v předmětu a zprávy zasláne pomocí mail(). Vím že se tam musí zapsat kodovaní ale nevím kde přesně.
můj script $email = mysql_result($result, 0, 'email'); $from = "From: podpora@virgonet.cz \r\n"; $mesg = "Vaše heslo bylo změněno na: $password \r\n" ."Prosím co nejdříve si ho změňte. \r\n" ."Pokud nastanou jakékoli problémy kontaktujte prosím administratora serveru.\r\n" ."Kontakt na Administratora serveru\r\n" ."Pokud tento mail nebyl adresován Vám omlouváme se a neberte tyto informace nazřetel děkuji.\r\n" ."S pozdravem redakce serveru CNCnet"; if (mail($email, ' nové heslo', $mesg, $from)) return true; else return false; |
||
t4nn3r Profil * |
no musis posilat hlavicky s tim mailem:
$obsahmailu = "...."; $subject = '...'; $to = $formData['Mail']; $headers = 'MIME-Version: 1.0' . "\r\n"; $headers .= 'Content-type: text/html; charset=utf8' . "\r\n"; $headers .= "To: $formData[Nick] <$formData[Mail]>" . "\r\n"; $headers .= 'From:...' . "\r\n"; mail($to, $subject, $obsahmailu, $headers); dale treba: Odkaz Moderátor Majkl578: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
|
||
AM_ Profil |
#3 · Zasláno: 5. 1. 2010, 16:12:36
řešilo se to tu asi milionkrát;
stručně řečeno, použij PhpMailer - velice pohodlná třída, která obstará vše, co php funkce mail() obstarat sama neumí |
||
nightfish Profil |
#4 · Zasláno: 5. 1. 2010, 16:15:00 · Upravil/a: nightfish
opravdu se to tu řešilo milionkrát, a proto to tu máme popsané ve vlákně Nejčastější potíže s PHP (FAQ)
|
||
virgo86 Profil |
#5 · Zasláno: 5. 1. 2010, 16:37:19
díky stejně to nějak nejde ale ještě to dofaram. je někde prosím Vás manual cz na PhpMailer nejsem tak vzdělanej že bych bez problému četl anglicky bez slovníčku:) jinak kdybych nechtěl charset=utf8 je spravně napsano charset=windows-1250? toď vše k tomuto tématu
|
||
nightfish Profil |
#6 · Zasláno: 5. 1. 2010, 17:22:51
virgo86:
„je někde prosím Vás manual cz na PhpMailer“ manuál přímo ne, ale článek popisující základní použití ano „jinak kdybych nechtěl charset=utf8 je spravně napsano charset=windows-1250?“ ano |
||
virgo86 Profil |
#7 · Zasláno: 5. 1. 2010, 17:25:55 · Upravil/a: virgo86
ještě něco použil jsem tedy funkci cs_mail je to šikovné funguje to. zpráva je z diakritikou ale předmět ne. ale hlavně když mi to dojde na mail není to odřadkované Co mám špatně.
$mail = $email; $predmet = "Server CNC nové heslo \r\n"; $zprava = "Vaše heslo bylo změněno na: $password \r\n Prosím co nejdříve si ho změňte. \r\n" ."Pokud nastanou jakékoli problémy kontaktujte prosím administratora serveru.\r\n" ."Kontakt na Administratora serveru\r\n" ."Pokud tento mail nebyl adresován Vám omlouváme se a neberte tyto informace nazřetel děkuji.\r\n" ."S pozdravem redakce serveru CNCnet"; $kon = cs_mail ($mail, $predmet, $zprava, "From: podpora@virgonet.cz\n"); if ($kon) return true; else return false; je to script z FAQ function autoUTF($s) { // detect UTF-8 if (preg_match('#[\x80-\x{1FF}\x{2000}-\x{3FFF}]#u', $s)) return $s; // detect WINDOWS-1250 if (preg_match('#[\x7F-\x9F\xBC]#', $s)) return iconv('WINDOWS-1250', 'UTF-8', $s); // assume ISO-8859-2 return iconv('ISO-8859-2', 'UTF-8', $s); } function cs_mail ($to, $predmet, $zprava, $head = "") { $predmet = "=?utf-8?B?".base64_encode(autoUTF ($predmet))."?="; $head .= "MIME-Version: 1.0\n"; $head .= "Content-Type: text/html; charset=\"utf-8\"\n"; $head .= "Content-Transfer-Encoding: base64\n"; $zprava = base64_encode (autoUTF ($zprava)); return mail ($to, $predmet, $zprava, $head); } |
||
Alphard Profil |
#8 · Zasláno: 5. 1. 2010, 17:47:21
Když už tu funkci upravujete podle věty
Zde je zadané kódování zprávy. Když budeme posílat html mail, zde změníme na text/html. $head .= "Content-Type: text/plain; charset=\"utf-8\"\n"; tak musíte html skutečně posílat. \r\n nemá v html kontextu význam, dejte tam <br>. Pokažená diakritika v předmětu je mi záhadou. To \r\n bych ale radši smazal, některé programy by s tím mohly mít problém. |
||
t4nn3r Profil * |
#9 · Zasláno: 5. 1. 2010, 22:14:45
No ono u tech mailu jsou problemy porad, ja na to radsi vyuzivam nejakou externi class. Jinak je snad vsem jasne, kdyz email posilate jako utf-8, musi ten dokument byt taky utf-8 ...
|
||
Alphard Profil |
#10 · Zasláno: 5. 1. 2010, 22:17:13
t4nn3r:
„Jinak je snad vsem jasne, kdyz email posilate jako utf-8, musi ten dokument byt taky utf-8“ Nemusí. Tento script si kódování pohlídá. |
||
t4nn3r Profil * |
#11 · Zasláno: 6. 1. 2010, 02:41:24
no tim bych si zase tak moc jisty nebyl, haluzilo mi posilani mailu ve scriptu u ktereho jsem si nevsiml ze je v ansi.
|
||
EOD Profil * |
#12 · Zasláno: 6. 1. 2010, 09:48:00
t4nn3r:
Tento problém také řeším už dlouho. Prozatím mě jako nejlepší řešení přišlo: 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: Sportobchod.eu\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); To je volba, kdy mi zlobí předmět, ale zpráva je všude možně zobrazena správně s diakritikou. |
||
AM_ Profil |
#13 · Zasláno: 6. 1. 2010, 12:38:50
EOD:
no aby ne, na předmět se nevztahuje kódování těla zprávy a ty tu předmět nijak neošetříš. Správně je něco ve stylu $predmet = "=?utf-8?B?".base64_encode(autoUTF ($predmet))."?="; |
||
Alphard Profil |
#14 · Zasláno: 6. 1. 2010, 14:21:43
AM:
„ovšem já zrovna nejsem přítel funkce autoUTF() z FAQ, programátor by měl vědět, v jakém kódování mu text přijde“ Ano, ale ten příspěvěk ve FAQ vznikl v reakci na četné dotazy a řešil konkrétní problém, myslím, že úspěšně. Tazatelé to prostě nevědí. Kdo do problematiky vidí více, tak si kód upraví k obrazu svému, nebo použije něco úplně jiného. Zase si nemyslím, že je ideální řešení odkazovat PHPMailer. V sekci download je několik možností, začátečník samozřejmě netuší, co stáhnout a kam to rozbalit. Když konečně najde návod, uvidí tajemný zápis $mail = new PHPMailer(); // defaults to using php "mail()" $mail->AddReplyTo("name@yourdomain.com","First Last"); často první setkání s OOP a vše v angličtině, mnoho tazatelů s ní má problém. V FAQ jsem se snažil vytvořit copy&paste script, co prostě bude fungovat, a českou nápovědou. „tedy ne 100%ně“ Bohužel, vzhledem k předchozímu neznám jiné řešení. Uvádím alespoň: "Dokážete-li získat data ve správném kódování (např. máte vše v utf-8), lze tento krok vynechat." |
||
virgo86 Profil |
#15 · Zasláno: 6. 1. 2010, 18:55:11
Alphard:
díky mě už to funguje vše správně dokonce i ten předmět s diakritikou a to jsem nic neupravoval:) |
||
Časová prodleva: 14 let
|
0