Autor Zpráva
w2009
Profil
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
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
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
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);

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:

0