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
- 10 cenných lekcí: chcete si otevřít vlastní malý eshop?
- Jak pracovat s "retina" obrázky na vašem webu?
- Zpětné odkazy: jak je nikdy nezískávat
- Budování webu 100+1 na Drupalu: tipy a postřehy
- 7 tipů, které pochopí i laici, když migrujete stránky
Tematicky související články
- E-mailový klient pre webmail v PHP - adresár a doplnkové funkcie
- Jak v PHP poslat e-mail s přílohou pomocí MIME třídy
- E-mailový klient pre webmail v PHP - odosielanie, čítanie a sťahovanie
- Databáze kontaktů v PHP 2.
- Internetový bazar v PHP 2.
Dejte vědět i ostatním o článku
Komentáře ke článku
Datum vložení: 10. Leden 2011, 10:02:32
absolutní spokojenost
Datum vložení: 25. Duben 2011, 17:33:21
hodně v pohodě
Datum vložení: 19. Únor 2012, 10:39:49
Nefunguje to, píše to Došlo k chybě, kontaktujte administrátora

