![]() |
|||
|
|
|
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:
Struktura databázeNejprve 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 MySQLSkript 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 emailuFormulář 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 datPokrač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é adresyPo 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í novinekZde 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. |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| © Zoner software, s.r.o., všechna práva vyhrazena, tento server dodržuje právní předpisy o ochraně osobních údajů. |