| 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: 14 let
|
|||
0