Autor Zpráva
Vopátek
Profil *
Dobrý den, vytvářím on-line přihlášku, která po vyplnění a potvrzení odešle notifikační e-mail na vyplněnou adresu. V drtivé většině se mi odešle e-mail ve správném formátu - předmět i obsah e-mailu je přesně podle CSS, který jsem si nadefinoval. V pár případech (10%) se příjemci e-mailu zobrazí špatně obsah, typu:
PGh0bWw+PGhlYWQ+PC9oZWFkPjxib2R5IHN0eWxlPSdjb2xvcjogIzAwMjA2MDsnPjxwPkRvYnL9...

Ve formuláři mám:
$headers .= "Content-type:text/html;charset=iso-8859-2" . "\r\n";

a

//encoding of czech in subject and message
mb_language('Neutral');
mb_internal_encoding("UTF-8");
mb_http_input("UTF-8");
mb_http_output("UTF-8");

Příjemce zprávy má také v úvodu obsahu:
From:
Sent: Tuesday, November 12, 2013 8:31 AM
To: h.lapsanska@mukyjov.cz
Subject: Potvrzení prihlášky Systémové školení

Content-type:text/html;charset=iso-8859-2

From: <helpdesk@vera.cz>

Mime-Version: 1.0
Content-Transfer-Encoding: BASE64
Message-Id: <20131112073042.7BBCCD8AFC@download.vera.cz>
Date: Tue, 12 Nov 2013 08:30:42 +0100 (CET)

PGh0bWw+PGhlYWQ+PC9oZWFkPjxib2R5IHN0eWxlPSdjb2xvcjogIzAwMjA2MDsnPjxwPkRvYnL9...

Znamená to, že těch pár příjemců má nastaveno jiné kódování v Outlooku? Pokud klikne ve Zprávě na "Jiné akce" - "Kódování" a změní na "Západoevropské jazyky (ISO)", text se zobrazí správně? Lze to upravit nějákým způsobem v kódu, aby se všem zobrazily e-maily správně?

Děkuji za reakci a radu.
DarkMeni
Profil
Vopátek:
předmět i obsah e-mailu je přesně podle CSS, který jsem si nadefinoval
Cože?

Příjemce zprávy má také v úvodu obsahu: ...
To vypadá jako špatně zapsaný header nebo chyba parseru
Ten email má jen jednu část (text/html) nebo víc částí (multipart/alternative, multipart/mixed...) ?

V pár případech (10%) se příjemci e-mailu zobrazí špatně obsah, typu:
PGh0bWw+PGhlYWQ+PC9oZWFkPjxib2R5IHN0eWxlPSdjb2xvcjogIzAwMjA2MDsnPjxwPkRvYnL9...

Znamená to, že těch pár příjemců má nastaveno jiné kódování v Outlooku?

Spíš že to mailový klient nedekodoval z base64, což mu měl říct ten header Content-Transfer-Encoding jak si zvýraznil, ale z nějakýho důvodu to už nepovažoval za header (možná narazil na dvojitý odřádkování CRLF CRLF "\r\n\r\n")

Zkus se podívat jak vypadá zdroják toho emailu

Jinak proč používáš mb_send_mail() a nepoužiješ normální mail() ?
juriad
Profil
Vopátek:
Nahraj někam (pastebin) celý obsah emailu včetně všech hlaviček i se zachováním odřádkováním.
Opravdu to vypadá na parser, který si neporadí s nějakou chybkou, kterou ostatní zvládnou.
Vopátek
Profil *
juriad:
Soubor:
http://czshare.com/5844027/obsah.rar

Nahrál jsem action soubor a chybný e-mail. Nevím, jestli bude takto stačit ten e-mail, nedaří se mi zobrazit Zdrojový kód.

DarkMeni:
V "action" formu mám odkaz na soubor, který má v hlavičce CSS, který styluje e-mail.

E-mail obsahuje odstavece, odkazy a logo v patičce.

Příjemce tvrdí, že má Outlook 2010 stejně jako já a mně se e-mail zobrazí správně.

Použil jsem mb_send_mail() nejspíš pro to, že podporuje UTF-8.. Ale už si přesně nevzpomínám. Nechám si poradit.

Děkuji za informace.
DarkMeni
Profil
S utf-8 si snad poradí i mail(), nevim jestli se všemi znaky, ale s obyčejným textem s diakritikou by neměl mít problem. Funkce mail() to potom stejně většinou zakóduje do base64 nebo quoted_printable. Taky je dobrý do base64 zakódovat i předmět, jinak tam pak může být u něktěrých mailových klientů problém s diakritikou (asi u těch, co jako výchozí kódování nepředpokládaj utf-8).

On ti přeposlal celej email, nebo jen odcitoval co se mu zobrazuje?

To v tom dokumentu je jen zobrazovaný obsah, zkus se dostat ke zdrojáku - třeba seznam dovoluje stáhnout rovnou celej email (raw data - jeho zdroják - všechny hlavičky, zprávy i přílohy), jak je na tom Outlook nevim.
Ale jestli máš účet na seznamu, tak si nech poslat ten email, otevři ho, a v okně se zprávou, když sroluješ dolů kde je tlačítko "Vytisknout zprávu" a vedle toho "Další", tak dej Další a vyber Uložit celou zprávu, měl by ti nabídnout soubor ke stažení, a to je ten zdroják.
Zkus ho sem nějak dostat, buď to dej rovnou sem nebo když to bude moc velký tak někam třeba na pastebin nebo něco takovýho
Davex
Profil
Vopátek:
Mezi řádky v hlavičce je nějak moc prázdných řádků, které tam nesmí být. Při sestavování hlavičky e-mailu nepoužívej pro ukončení řádku kombinaci znaků "\r\n", ale konstantu PHP_EOL. Vysvětlení jinde.
Vopátek
Profil *
DarkMeni:
Tak jsem ten kód dal sem:
http://pastebin.com/MXJSZuAB

Ten e-mail začíná od řádku 45. To před tím je text přeposlání.
Díky za trpělivost.
DarkMeni
Profil
To je zdrojový kód html kódu, ale ne celýho emailu. Zkoušel si to stáhnout z toho seznamu?
Zdroják emailu vypadá přibližně takto:
Received: from mail.odnekud.com (mail.odnekud.com [209.86.215.70])
    by email.seznam.cz (szn-ebox-4.4.104) with HTTP;
    Tue, 10 Nov 2011 15:41:19 +0100 (CET)
From: =?utf-8?q?Odes=C3=ADlatel?= <odesilatel@odnekud.cz>
To: "Prijemce" <prijemce@nekde.cz>
Subject: =?utf-8?q?P=C5=99edm=C4=9Bt?=
Date: Tue, 10 Nov 2011 15:41:19 +0100 (CET)
Message-Id: <bEI.im1}.5Ndm46FybWD.1IbBCF@seznam.cz>
Mime-Version: 1.0 (szn-mime-1.0.94)
X-Mailer: szn-ebox-4.4.104
Content-Type: multipart/alternative;
    boundary="=_45568b9f22139cdc2bf94017=b6870de3-63a1-51db-aabe-7c9e2bfe2bec_="

--=_45568b9f22139cdc2bf94017=b6870de3-63a1-51db-aabe-7c9e2bfe2bec_=
Content-Type: text/plain;
    charset=utf-8
Content-Transfer-Encoding: quoted-printable

Alternativní text ve formátu text/plain,
zobrazí se v mailovym klientu který nepodporuje zobrazení v text/html
Kódování je nastavený na quted-printable, takže ve skutečnosti může vypadat nějakt takto:

N=C4=9Bjak=C3=BD klidn=C4=9B hodn=C4=9B dlouh=C3=BD text,
kter=C3=BD se zob= raz=C3=AD jako alternativa v p=C5=99=C3=ADpad=C4=9B,
=C5=BEe mailov=C3= =BD klient nebude zn=C3=A1t ostatn=C3=AD form=C3=A1ty

--=_45568b9f22139cdc2bf94017=b6870de3-63a1-51db-aabe-7c9e2bfe2bec_=
Content-Type: text/html;
    charset=utf-8
Content-Transfer-Encoding: quoted-printable

Obsah, který se zobrazí v emailovém klientu (text/html zakódovaný metodou quoted-printable)

<!DOCTYPE html>
<html>
=09<head>
=09=09<title>Titulek (i kdy=C5=BE u emailu asi zbyte=C4=8Dn=C3=BD, ten se a=
si =C5=99=C3=ADd=C3=AD podle p=C5=99edm=C4=9Btu)</title>
=09</head>
=09<body>
=09=09<h1>Nadpis</h1>
=09=09<p>Text...</p>
=09</body>
</html>=09

--=_45568b9f22139cdc2bf94017=b6870de3-63a1-51db-aabe-7c9e2bfe2bec_=--
A ty si poslal jen tu zvýrazněnou část

Jinak to bude nejspíš tím jak psal Davex, koukal si na to vysvětlění? Zkus "\r\n" nahradit za PHP_EOL

Ale je možný se taky podívat do zdrojáku toho rozbitýho emailu, třeba se z toho dá poznat čím to bylo
Vopátek
Profil *
Velice děkuji všem zúčastněným za rady. Nakonec problém vyřešila náhrada "\r\n" za PHP_EOL. Otestoval jsem na adresách, kde se e-mail nezobrazoval před tím správně a vše je ok. Taková blbost, ale sám bych na to nepřišel. Jinak jsem zkoušel nahradit mb_send_mail() za mail(), ale nezobrazovaly se mi české znaky. Proto jsem raději zůstal u mb_send_mail(). Ještě jednou děkuji :-).

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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