Autor Zpráva
dmfzd
Profil
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
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
Ne, bohužel stále stejné, ale děkuji za odpověď
Davex
Profil
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
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
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.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0