Autor | Zpráva | ||
---|---|---|---|
w2009 Profil |
#1 · Zasláno: 31. 8. 2011, 16:28:43
Zdravím, snažím se už notnou chvíli imlpementovat do PHP aplikace na odesílání hromadných e-mailů (zde už mnohokrát probíranou, v originálním znění http://interval.cz/clanky/hromadne-zasilani-novinek-e-mailem/) skript na odesílání správného kódování češtiny v hlavičce mailu (už nevím, kde jsem jej sebral, ale funguje dobře - principiálně jde o tento způsob: http://pastebin.com/qquxixSW)
...ani jedno není z mé hlavy! Hanba programujícím amatérům. Ale k věci - mám problém tyto dvě věcičky slepit. Skript, který odesílá e-maily (adresy se generují ze SQL) vypadá takto: if($_GET['id']=='ok' AND (!empty($_GET['zprava']))): // posíláme zprávu? require("config_mail.php"); // načtení konfigurace databáze $zprava=$_GET['zprava']; @$vysledek=MySQL_Query("SELECT email FROM seznam WHERE overeno='OK'"); // výběr emailů z databáze if(!$vysledek): // ošetření chyby echo "V databázi není žádný reg. uživatel"; exit; endif; $predmet="Předmět"; $hlavicka="From: novinky@rudolfiiinum.cz\r\n"; while($zaznam=MySQL_Fetch_Array($vysledek)): $bccx[]=$zaznam['email']; // načtení emailů do pole endwhile; $bcc.="Bcc: ".Implode($bccx, ",")."\r\n"; // oddělení emailů čárkou $hlavicka.=$bcc."Mime-Version: 1.0\r\nX-Mailer: TEST\r\nContent-Type: text/plain; charset=windows-1250\r\n"; mail("", "$predmet", "$zprava", "$hlavicka"); skript na přiložení kódování do hlavičky e-mailu pak takto: if (!$_POST['text']==""): 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, $hlavicka = "") { $predmet = "=?utf-8?B?".base64_encode(autoUTF($predmet))."?="; $hlavicka .= "MIME-Version: 1.0\r\n"; $hlavicka .= "Content-Type: text/plain; charset=\"utf-8\"\r\n"; $hlavicka .= "Content-Transfer-Encoding: base64\r\n"; $zprava = base64_encode(autoUTF($zprava)); return mail($to, $predmet, $zprava, $hlavicka); } Chápu samozřejmě, že namísto funkce mail je třeba volat definovanou funkci cs_mail. Ale absolutně si nevím rady s tím, jak do hlavičky zahrnu jak e-maily z databáze, tak tu část, co v e-mailu deklaruje češtinu. Zkoušel jsem to všelijak, ale mé pokusy nebyly úspěšné - e-maily se neodesílaly. Tomu druhému skriptu vlastně vůbec nerozumím - je naprosto mimo mé síly. Poradí někdo zoufalému amatérovi? Mnohokrát díky za jakoukoliv reakci. |
||
Taps Profil |
#2 · Zasláno: 31. 8. 2011, 16:48:18 · Upravil/a: Taps
w2009:
emaily se neodesílaly z důvodu, že jsi ve funkci mail nedefinoval první parametr (e-mailovou adresu příjemce) mail("test@seznam.cz", $predmet, $zprava, $hlavicka); |
||
w2009 Profil |
#3 · Zasláno: 31. 8. 2011, 17:03:59
Nikoliv, e-maily se odesílaly... Na adresy, které se generovaly ze SQL a byly uvedeny jako BCC (slepá kopie) v hlavičce e-mailů (viz řádka nad tím). V tom problém nevězí, nicméně díky za rychlou reakci...
|
||
Taps Profil |
#4 · Zasláno: 1. 9. 2011, 07:07:24
w2009:
Taps: „Ale absolutně si nevím rady s tím, jak do hlavičky zahrnu jak e-maily z databáze, tak tu část, co v e-mailu deklaruje češtinu“ jednoduše cs_mail("", $predmet, $zprava, $hlavicka); |
||
Časová prodleva: 13 let
|
0