Autor | Zpráva | ||
---|---|---|---|
dmfzd Profil |
#1 · Zasláno: 13. 8. 2011, 20:09:47
Dobrý den,
Pomocí php odesílám e-maily ze stránek, pro správné kódování jsem použil návod tady na FAQ. E-maily odchází, kódování funguje když čtu e-maily prohlížečem (seznam.cz, centrum.cz), ale jak e-mail zobrazím v MS Outlook, tak se zobrazí nějak takhle: From: =?UTF-8?B?IA==?=<example@exa.com> Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: base64 X-sender: info@exe.wz.cz X-Abuse: postmaster@webzdarma.cz Message-Id: <20110813180400.04D69468AC@nike.s.webzdarma.cz> Date: Sat, 13 Aug 2011 20:03:59 +0200 (CEST) X-Spam-Prev-Subject: =?utf-8?B?xIzDrXNsbyDDusSNdHU=?= TmEgVmHFoWkgxb7DoWRvc3QgVsOhbSBwb3PDrW Zkoušel jsem odesílat jak v html, tak jako obyčejný text, nic mi nepomohlo. Nemá s tím někdo zkušenosti? Přikládám zdrojový kód, kdyby to byla jen chybka na opravu: function autoUTF($s) { if (preg_match('#[\x80-\x{1FF}\x{2000}-\x{3FFF}]#u', $s)) // detect UTF-8 { return $s; } elseif (preg_match('#[\x7F-\x9F\xBC]#', $s)) // detect WINDOWS-1250 { return iconv('WINDOWS-1250', 'UTF-8', $s); } else // assume ISO-8859-2 { return iconv('ISO-8859-2', 'UTF-8', $s); } } function cs_mail($to, $predmet, $zprava, $jmprijm, $email) { $predmet = "=?utf-8?B?".base64_encode(autoUTF($predmet))."?="; $head .= "MIME-Version: 1.0\r\n"; $head .= "From: =?UTF-8?B?".base64_encode(autoUTF($jmprijm))."?=<".$email."> \r\n"; $head .= "Content-Type: text/html; charset=\"utf-8\"\r\n"; $head .= "Content-Transfer-Encoding: base64\r\n"; $zprava = base64_encode(autoUTF($zprava)); return mail($to, $predmet, $zprava, $head); } $email = "jiri@example.com"; $predmet = "Předmět zprávy"; $zprava = "Testovací zpráva"; $jmprijm = "Jan Novák"; cs_mail($email, $predmet, $zprava, $jmprijm, $email2); Děkuji |
||
Davex Profil |
#2 · Zasláno: 13. 8. 2011, 20:26:54
Zlepší se to, když přidáš mezeru mezi = a < na tomto řádku?
$head .= "From: =?UTF-8?B?".base64_encode(autoUTF($jmprijm))."?= <".$email."> \r\n"; |
||
dmfzd Profil |
#3 · Zasláno: 13. 8. 2011, 20:42:58
Ne, bohužel stále stejné, ale děkuji za odpověď
|
||
Davex Profil |
#4 · Zasláno: 13. 8. 2011, 21:01:11
Ještě zkus použít místo konce řádků
\r\n v hlavičce používat jen \n . Ale kdyby byl problém v tomto, tak by se to mělo projevovat i na Seznamu nebo Centru.
|
||
dmfzd Profil |
#5 · Zasláno: 13. 8. 2011, 22:54:42 · Upravil/a: dmfzd
Problém byl opravdu v tom,
Děkuji moc, už to funguje bez problémů jak v Outlooku, tak na Seznamu, Centru... Jen nevím, proč to bylo způsobeno tímto. jaký je rozdíl mezi \r\n a \n? |
||
Davex Profil |
#6 · Zasláno: 14. 8. 2011, 00:17:14
dmfzd:
„Jen nevím, proč to bylo způsobeno tímto. jaký je rozdíl mezi \r\n a \n ?“
Je to trochu složitější a souvisí to z cestou, kterou e-mail prochází při odeslání. • Znak pro konec řádku \n (LF - Line Feed) se používá v operačních systémech Unixového typu a na z něho odvozeném GNU Linuxu na kterém běží servery Webzdarma.
• Konec řádku složený ze dvou znaků \r\n (CRLF - Carriage Return + Line Feed ) se používá od časů dálnopisů (používaly se jako počítačové terminály místo monitoru a klávesnice, myši jenom pobíhaly ve sklepě), MS-DOSu, a teď ve Windows. Také je používá poštovní protokol SMTP.
Problém je v tom, že je program sendmail, kterému PHP e-mail předává, na serveru zastaralý a hloupě přidává před každé \n ještě \r (aniž by zkontroloval jestli tam už není), aby ho předal v souladu se specifikací protokolu SMTP s konci řádků \r\n pošťmistrovi. Pak vznikne sekvence \r\r\n , která při průchodu dalšími systémy může způsobit problémy.
Používá se několik různých variant programu sendmail a některé tímto netrpí, takže je to závislé případ od případu podle nastavení serveru. |
||
Časová prodleva: 13 let
|
0