Autor | Zpráva | ||
---|---|---|---|
marty013 Profil * |
#1 · Zasláno: 21. 10. 2010, 21:25:05
Ahoj mám menší problém s emailový formulářem, konkrétně s outputem outlook-u. Myslím, že níže uvedený kód vám při řešení pomůže víc než sáhodlouhé vysvětlování.
Kód pro zpracování formuláře. (WINDOWS-1250, protože outlook má s UTF-8 údajně problém.) <? function CHARconverter($txt) { if(preg_match('#[\x80-\x{1FF}\x{2000}-\x{3FFF}]#u', $txt)) { // určuje UTF-8 return iconv("UTF-8", "WINDOWS-1250", $txt); //konvertuje UTF-8 na WINDOWS-1250 } elseif(preg_match('#[\x7F-\x9F\xBC]#', $txt)) { // určuje WINDOWS-1250 return $txt; } else { // odvozuje ISO-8859-2 return iconv("ISO-8859-2", "WINDOWS-1250", $txt); //konvertuje ISO-8859-2 na WINDOWS-1250 } } function rezervovat($to, $subject, $message, $head = "") { $head .= "MIME-Version: 1.0\r\n"; $head .= "Content-Type: text/plain; charset=\"windows-1250\"\r\n"; $head .= "Content-Transfer-Encoding: base64\r\n"; $subject = "=?windows-1250?B?" . base64_encode(CHARconverter($subject)) . "?="; $message = base64_encode(CHARconverter($message)); return mail($to, $subject, $message, $head); } $zprava = "REZERVACE\n" . "Od: " . $_POST['odden'] . $_POST['odmesic'] . " " . $_POST['odrok'] . " Do: " . $_POST['doden'] . $_POST['domesic'] . " " . $_POST['dorok'] . "\n" . "Počet dospělých: " . $_POST['dospeli'] . "\n" . "Počet dětí: " . $_POST['deti'] . "\n" . "Domácí zvíře: " . $_POST['zvire'] . "\n" . "Jméno: " . $_POST['jmeno'] . "\n" . "Tel. č.: " . $_POST['telefon'] . "\n" . "E-mail: " . $_POST['email'] . "\n" . "\n" . "ZPRÁVA ZÁKAZNÍKA\n" . $_POST['text']; $predmet = "Rezervace Penzion Komtesa - " . $_POST['jmeno']; if (rezervovat("vondrak@marill-studio.cz", $predmet, $zprava, "From: =?WINDOWS-1250?B?" . base64_encode(CHARconverter($_POST['jmeno'])) . "?=<" . base64_encode(CHARconverter($_POST['email'])) . "> /r/n")) { echo "MAIL SENT"; } else { echo "!MAIL SENT"; } ?> Output Outlook-u (Předmět atp se zobrazují správně.) Content-Type: text/plain; charset="windows-1250" Content-Transfer-Encoding: base64 UkVaRVJWQUNFCk9kOiAxNi5saXN0b3BhZHUgMjAxMCBEbzogMTgubGlzdG9wYWR1IDIwMTAKUG/oZXQgZG9zcOxs/WNoOiAyClBv6GV0IGTsdO06IDAKRG9t4WPtIHp27fhlOiBOZQpKbelubzogTWFydGluIFZvbmRy4WsKVGVsLiDoLjogKzQyMCA3NzY2OTQwMTMKRS1tYWlsOiBtYXJ0aW52b25kcmFrQGNlbnRydW0uY3oKClpQUsFWQSBawUtBWk7NS0EK7Jro+J794e3p+vk= Originál internet hlavička z Outlook-u Return-Path: <web.cz@smtpsmart.forpsi.com> Delivered-To: ja@web.cz Received: (qmail 11449 invoked by uid 89); 21 Oct 2010 18:04:11 -0000 Received: by simscan 1.3.1 ppid: 11428, pid: 11430, t: 0.3416s scanners: clamav: 0.95.1/m: spam: 3.2.5 X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on mxavas3.forpsi.com X-Spam-Level: X-Spam-Status: No, score=-100.6 required=5.0 tests=BASE64_LENGTH_79_INF, BAYES_00,MIME_BASE64_BLANKS,MIME_BASE64_TEXT,RDNS_NONE,USER_IN_WHITELIST autolearn=disabled version=3.2.5 Received: from unknown (HELO smtpsmart.forpsi.com) (81.2.194.54) by mxavas3.forpsi.com with SMTP; 21 Oct 2010 18:04:11 -0000 Received: (qmail 18337 invoked by uid 89); 21 Oct 2010 18:04:11 -0000 Received: by simscan 1.4.0 ppid: 18333, pid: 18335, t: 0.0100s scanners: clamav: 0.95.1/m:49/d:8550 Received: from unknown (HELO d176ud.forpsi.com) (10.2.195.176) by smtpsmart-2.forpsi.com with SMTP; 21 Oct 2010 18:04:11 -0000 Received: (qmail 24963 invoked by uid 1904); 21 Oct 2010 18:04:08 -0000 Date: 21 Oct 2010 18:04:08 -0000 Message-ID: <20101021180408.24962.qmail@d176u.forpsi.com> From: odesilatel@server.com To: ja@web.cz Subject: =?windows-1250?B?UmV6ZXJ2YWNlIFBlbnppb24gS29tdGVzYSAtIE1hcnRpbiBWb25kcuFr?= MIME-Version: 1.0 Je tedy celkem jasné, že z hlavičky se vytratilo pár důležitých informací (Content-Type: text/plain; charset="windows-1250" a Content-Transfer-Encoding: base64). Nevíte někdo jak je tam outlooku vecpat? Zkoušel jsem Thunderbird a tam to jelo v pohodě takže jsem celkem bezradnej a děkuju za jakoukoli pomoc. |
||
Davex Profil |
#2 · Zasláno: 21. 10. 2010, 22:23:52
Hlavní problém by mohl být ve volání funkce
rezervovat() , kde je chyba na konci v /r/n - správně tam patří zpětná lomítka \r\n .
Další problém může být v kombinování různých typů konců řádků \r\n v hlavičce a \n v těle e-mailu. E-mail se tam odesílá přes Qmail, takže zkus všude jako konec řádku použít jen \n .
|
||
marty013 Profil * |
#3 · Zasláno: 21. 10. 2010, 22:37:19
Děkuju zkusím, ale zřejmě až zítra, protože v prohlížeči sice končím při testu s "MAIL SENT" ale ve schránce nějak nic. Jinak ty lomítka mi uletěly to je jasný, ale ty dva způsoby ukončování jsem právě viděl tady na fóru ve FAQ. Tak uvidíme, jak to dopadne.
|
||
Davex Profil |
#4 · Zasláno: 21. 10. 2010, 22:45:17
V tomto případě bude vadit jen ukončení řádku v hlavičce, protože v těle e-mailu se konce řádků zákodují do base64. Omlouvám se za nepřesnost.
|
||
marty013 Profil * |
#5 · Zasláno: 21. 10. 2010, 22:48:25
Tak jsem to ještě zkusil a paráda dík moc, jen by asi bylo vhodný překopat to FAQ, protože já bych v životě na ten dvojí způsob sám nepřišel a díky tomu mi to vlastně nejelo. (Doufám, že to nevypadá, že dělám chytrýho, ale myslim to dobře. Já u toho kvůli outlooku strávil tak 10h čistýho času.)
|
||
Davex Profil |
#6 · Zasláno: 21. 10. 2010, 23:00:33 · Upravil/a: Davex
Původně bylo ve FAQ jen
\n a změnu na \r\n , kterou jsem (ovlivněn DoubleThinkem) inicioval já, asi budeme muset přehodnotit, protože s tím lidé mají problémy. Nesouvisí to přímo s PHP, ale je to způsobeno různými SMTP démony na linuxových serverech a se způsobem zpracování e-mailu. Různé varianty ukončení řádku nevadí Eximu, Sendmailu a novým verzím Postfixu. Vadí Qmailu a starším verzím Postfixu.
|
||
Časová prodleva: 14 let
|
0