interval.cz

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

25. 11. 2002 | Martin Kašík | PHP | Komentáře: 5

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.


Další aktuální články na interval.cz

Tematicky související články

Dejte vědět i ostatním o článku

Komentáře ke článku

Přidat nový komentář

sikulovaHana@seznam.cz

Autor komentáře: sikulovaHana@seznam.cz

Datum vložení: 03. Leden 2010, 02:00:22

sikulovaHana@seznam.cz

MUDr.Minařík Antonín

Autor komentáře: MUDr.Minařík Antonín

Datum vložení: 10. Leden 2011, 10:02:32

absolutní spokojenost

lubos.kosinka@centrumholdings.com

Autor komentáře: lubos.kosinka@centrumholdings.com

Datum vložení: 07. Březen 2011, 11:59:15

lubos.kosinka@centrumholdings.com

Autor komentáře: Anonymní

Datum vložení: 25. Duben 2011, 17:33:21

hodně v pohodě

Michal

Autor komentáře: Michal

Datum vložení: 19. Únor 2012, 10:39:49

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

Zpět na začátek komentářů | Zpět na začátek článku

Přidat nový komentář

Jméno a e-mail jsou nepovinné. Příspěvky obsahující odkaz jsou moderovány.

Reklama

Syndikace

hledáme nové autory | redakce interval.cz | reklama na interval.cz

© ZONER software, a.s., všechna práva vyhrazena. Hosting zajišťuje CZECHIA.COM. SSL certifikáty pro domény. Powered by WordPress.