Hromadné zasílání novinek e-mailem

25. listopadu 2002

Následující aplikace řeší zasílání novinek registrovaným uživatelům serveru. Volně navazuje na článek „Mailing-list konzola v PHP“, kde bylo řešeno jen rozesílání emailů, ale už ne přihlašování se k odběru. Aplikace využívá databázi MySQL a PHP.

Naše aplikace se skládá ze tří částí, respektive řeší následující tři body:

  • přihlášení k odběru
  • kontrola vloženého emailu
  • rozeslání novinek emailem

Struktura databáze

Nejprve si vytvoříme databázi, například novinky, a v ní tabulku seznam. Tabulka seznam bude mít 5 sloupců (id záznamu, datum registrace emailu, registrovaný email, kód generovaným systémem pro ověření a kolonku, zda ověření emailu proběhlo v pořádku):

CREATE TABLE seznam (
    id int(4) NOT NULL auto_increment,
    datum datetime NOT NULL default ‚0000-00-00 00:00:00‘,
    email varchar(50) NOT NULL default “,
    kod varchar(100) NOT NULL default “,
    overeno char(2) NOT NULL default “,
    UNIQUE KEY email (email),
    UNIQUE KEY id (id)
) TYPE=MyISAM;

Skript pro připojení k MySQL

Skript si pojmenujeme config.php. Je také třeba upravit nastavení serveru MySQL, tzn. server, přihlašovací jméno a heslo:

<?php
@$spojeni = MySQL_Connect(„localhost“,““,““);
    // spojení s db serverem – doplňte název serveru, uživatele a heslo
if(!$spojeni):
    // pokud se spojení s db serverem neuskuteční, vypíše chybové hlášení
    echo „Nelze se připojit k databázi!“;
    exit;
else:
    MySQL_Select_DB(„novinky“);
    // výběr databáze novinky
endif;
?>

Formulář pro registraci emailu

Formulář pro registraci emailu je spojovací prvek mezi uživatelem a naším serverem. Ve formuláři zadáte svou emailovou adresu a odešlete na server. Následující soubor si pojmenujeme insert.php:

<?php
if((empty($_GET[‚akce‘]))AND(empty($kod))):?>
    <form action=“insert.php“ method=“get“>
    <table width=“500″ border=“0″ cellpadding=“10″ cellspacing=“0″ bgcolor=“#8080ff“>
    <tr>
        <td align=“right“><strong>Zadejte zde prosím Vaši platnou e-mail adresu:</strong></td>
    <td><input type=“text“ name=“email“ value=“váš@email.cz“ /></td>
    </tr>
    <tr>
        <td></td>
        <td><input type=“submit“ name=“akce“ value=“Ano, chci novinky e-mailem“ /></td>
    </tr>
    </table>
    </form>

Skript pro zpracování vložených dat

Pokračujeme v zápisu v souboru insert.php. Tento skript nám provede zápis do databáze a zašle nám potvrzovací email na registrovanou adresu:

<?php
elseif(!empty($_GET[‚akce‘])):
    require(„config.php“);
    // načtení nastavení databáze
    $DnesniDatum=date(„Y-m-d H:i:s“);
    // dnešní datum a čas
    $Kod=MD5($_GET[‚email‘]);
    // generování unikátního kódu
    $Email=$_GET[‚email‘];
    if(empty($Email)):
    // kontrola zadání emailu
        echo „Nebyl zadán e-mail!“;
        exit;
    else:
        @$vysledek=MySQL_Query(„INSERT INTO seznam VALUES (“, ‚$DnesniDatum‘, ‚$Email‘, ‚$Kod‘, ‚NO‘)“);
        // vložení dat do databáze
        if($vysledek):
            $predmet=“Potvrzení e-mailu“;
            $hlavicka=“From: test@test.cz\nX-Mailer: TEST\nContent-Type: text/html“;
            $zprava=“Dne: „.$DnesniDatum.“ byl přidán Váš e-mail: „.$Email.“ do naší databáze pro zasílání novinek našeho serveru. Klikněte na následující odkaz pro potvrzení správnosti e-mailu: <a href=’http://localhost/interval/insert.php?email=“.$email.“&kod=“.$Kod.“‚>
http://localhost/interval/insert.php?email=“.$email.“&kod=“.$Kod.“</a><br><br>S pozdravem Admin“;
            // nutno upravit cestu dle vašeho serveru
            mail(„$Email“,“$predmet“,“$zprava“,“$hlavicka“);
            // zaslání emailu uživateli pro ověření
            echo „Váš e-mail byl přidán do naší databáze. Byl Vám odeslán e-mail pro potvrzení.“;
        else:
            if(mysql_errno()==1062):
            // kontrola duplicity vkládaných údajů
                echo „Email je již v databázi!“;
                exit;
            else:
            // došlo k jiné chybě
                echo „Došlo k chybě, kontaktujte administrátora“;
                exit;
            endif;
        endif;
    endif;
endif;

Skript pro ověření emailové adresy

Po vložení emailové adresy ve formuláři bude zaslán email. V emailu je uvedena adresa, kde se provádí ověření. Následující skript nám to zabezpečí. Pokračujeme v zápisu v souboru insert.php:

if((!empty($_GET[‚kod‘]))AND(!empty($_GET[‚email‘]))):
    require(„config.php“);
    // načtení nastavení databáze
    @$kontrola=MySQL_Result(MySQL_Query(„SELECT email FROM seznam WHERE (email=’$email‘ AND kod=’$kod‘)“), „email“);
    if($kontrola==$_GET[‚email‘]):
    // ověření emailu
        @$vysledek=MySQL_Query(„UPDATE seznam SET overeno=’OK‘ WHERE (email=’$email‘ AND kod=’$kod‘)“);
        if(!$vysledek):
            echo „Chyba databáze“;
            exit;
        else:
            echo „Údaje byly ověřeny, děkujeme.“;
            exit;
        endif;
    elseif($kontrola!=$_GET[‚email‘]):
        echo „Údaje nebyly ověřeny.“;
        exit;
    endif;
endif;
?>

Rozeslání novinek

Zde je uvedeno jednoduché administrační centrum pro zasílání novinek. Soubor pojmenujeme admin.php. Zasílá email všem registrovaným a ověřeným emailovým adresám:

<?php
if(empty($_GET[‚id‘])):
    echo „<li><a href=’admin.php?id=new’>Zaslání novinek registrovaným uživatelům</a></li>“;
elseif($_GET[‚id‘]==’new‘):
?>
<form action=“admin.php“ method=“get“>
    <table width=“500″ border=“0″ cellpadding=“10″ cellspacing=“0″ bgcolor=“#8080ff“>
    <tr>
        <td><textarea cols=“25″ rows=“10″ name=“zprava“></textarea>
            <input type=“hidden“ name=“id“ value=“ok“ /></td>
            <td><input type=“submit“ name=“akce“ value=“Odeslat reg. uživatelům“ /></td>
    </tr>
    </table>
</form>
<?php
endif;
if($_GET[‚id‘]==’ok‘ AND (!empty($_GET[‚zprava‘]))):
// posíláme zprávu?
    require(„config.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=“Novinky!“;
    $hlavicka=“From: MailRobot@domena.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“);
    // poslání emailu
    $users = mysql_fetch_row(mysql_query(„SELECT COUNT(id) FROM seznam WHERE overeno=’OK'“));
    // kolika lidem se email odeslal
    echo „Posláno: „.$users[0].“ uživatelům“;
endif;
?>

Aplikace neobsahuje kontrolní mechanismy vkládaných dat, ty si už musí každý programátor udělat sám. Jednotlivé skripy si můžete stáhnout.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Předchozí článek Jak dělat web?
Štítky: Články

Mohlo by vás také zajímat

Nejnovější

6 komentářů

  1. sikulovaHana@seznam.cz

    Led 3, 2010 v 2:00

    sikulovaHana@seznam.cz

    Odpovědět
  2. MUDr.Minařík Antonín

    Led 10, 2011 v 10:02

    absolutní spokojenost

    Odpovědět
  3. lubos.kosinka@centrumholdings.com

    Bře 7, 2011 v 11:59

    lubos.kosinka@centrumholdings.com

    Odpovědět
  4. Anonym

    Dub 25, 2011 v 17:33

    hodně v pohodě

    Odpovědět
  5. Michal

    Úno 19, 2012 v 10:39

    Nefunguje to, píše to Došlo k chybě, kontaktujte administrátora

    Odpovědět
  6. Standa

    Srp 15, 2014 v 10:43

    Odesílání běhá v pohodě.
    Děkuji autorovi

    Odpovědět

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *