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

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 nebyli 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.



Martin Kašík (25.11. 2002)




Vyhledávání

Rozšířené vyhledávání




Nejčtenější






Knižní tip



Zoner Callisto, tipy, efekty, kouzla

Zoner Callisto, tipy, efekty, kouzla



Diskuzní kotel






Hodnotilo: 246 čtenářů
Výsledek: 2,8


 Tisk
 Doporučit článek

Diskuze: Hromadné zasílání novinek e-mailem
25.11.2002, 08:20 michal Aktivace prichozim mailem
25.11.2002, 09:03 Martin Kašík ccAktivace prichozim mailem
25.11.2002, 09:10 Jméno a příjmení ccAktivace prichozim mailem
25.11.2002, 09:31 michal cc1.htaccess
13.01.2003, 08:21   cc1cc.htaccess
25.11.2002, 10:55 Jirka Kosek ccAktivace prichozim mailem
25.11.2002, 13:42 Petr :))
25.11.2002, 18:31 Srakyi cc:))
01.12.2002, 23:21 Vlada časování
22.01.2003, 12:26 Pedro Problem s potvrzovacim e-mailem
22.01.2003, 15:32 Marty ccProblem s potvrzovacim e-mailem
Zobrazit všePřidat nový
Redakce Interval.cz |  Inzerce na Interval.cz |  Hledáme nové autory ISSN 1212-8651 
 © Zoner software, s.r.o., všechna práva vyhrazena, tento server dodržuje právní předpisy o ochraně osobních údajů.