Autor | Zpráva | ||
---|---|---|---|
Vopátek Profil * |
#1 · Zasláno: 6. 1. 2014, 08:52:07
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 |
#2 · Zasláno: 6. 1. 2014, 10:24:51
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 |
#3 · Zasláno: 6. 1. 2014, 10:27:53
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 * |
#4 · Zasláno: 6. 1. 2014, 10:52:14
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 |
#5 · Zasláno: 6. 1. 2014, 16:48:07
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 |
#6 · Zasláno: 6. 1. 2014, 19:36:02
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 * |
#7 · Zasláno: 7. 1. 2014, 09:01:48
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 |
#8 · Zasláno: 7. 1. 2014, 18:45:41
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_=-- 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 * |
#9 · Zasláno: 8. 1. 2014, 13:02:02
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 :-).
|
||
Časová prodleva: 10 let
|
0