Mailing-list konzola v PHP

8. listopadu 2001

Tiež vás obťažuje manuálne rozosielanie rovnakých emailov množstvu ľudí? Čo to tak urobiť automaticky cez PHP? Navyše môžete emaily rozosielať aj keď nie ste práve on-line. Ako je to možné? Dočítate sa!

Začíname

Najskôr si spravíme formulár, v ktorom zistíme meno odosielateľa, jeho email, predmet a samotný text. Keďže veľkosť emailu, poslaného funkciou mail() prakticky nie je obmedzená, nemusíme kontrolovať dĺžku textu. Tu je náš fomulár:

<form method="POST" action="mail.php">
<p align=center>
Jméno: <input type="text" name="jmeno" size="25"></p>
<p align=center>
Email: <input type="text" name="email" size="25" value="@"></p>
</center></div>
<p align=center>
Predmet: <input type="text" name="predmet" size="50" value=""></p>
<p align=center>
Text:<br><textarea rows="5" name="text" cols="50"></textarea></p>
<p align=center><input type="submit" value="Odoslať!"
name="B1"> <input type="reset" value="Zmazať!" name="B2"></p>
</form>

Výsledok formulára spracujeme skriptom mail.php, formulár odošleme metódou POST. Teraz prichádza na rad PHP a hlavne databáza SQL. V databáze, v našom prípade s názvom mail máme uložené v jednom stĺpci s názvom email emailové adresy, v druhom stĺpci s názvom meno máme uložené mená majiteľov emailových schránok, resp. prezývky. Z tejto databázy budeme v skripte mail.php vyberať emaily a dokonca oslovíme každého po mene. Databázu vytvoríme takto:

create table mail (
email varchar(30),
meno varchar(30))

Keď máme vytvorenú databázu emailov a formulár, ktorým zistíme všetko potrebné, vytvoríme si skript, ktorý zašle napísaný text na všetky emaily z databázy a pripojí ako pozdrav vlastné meno. Tu je: (neskôr si ho vysvetlíme)

mail.php

<?
@$spoj = MySQL_Connect("localhost", "VAS_LOGIN", "VASE_HESLO");
if(!$spoj) echo "Nepodařilo se připojit k mySQL";
@$vys = MySQL_DB_Query("VASA_DB", "Select * from mail");
if(!$vys || mysql_num_rows($vys)==0) echo "Nepodařilo se vytáhnout emaily z databáze, resp. je 0 záznamů v databázi!";
$kolko = mysql_num_rows($vys);
while($e = mysql_fetch_array($vys)):
$txt = "Nazdar ".$e["meno"]."\n\n".$text;
$komu = $e["email"];
mail($komu, $predmet, $txt, "From:$jmeno <$email>");
endwhile;
echo "<center><b>Gratulujeme!\nOdoslal/a ste email celkovo $kolko lidem v znení:\n\n<i>Oslovení</i>\n\n$text";
?>

Relatívne krátky skriptík, ktorý toho veľa dokáže… V prvom riadku sa pripájame k databáze mySQL. Ak budete tento skript používať treba nahradiť slova VAS_LOGIN a VASE_HESLO vašimi skutočnými loginmi a heslami. V druhom riadku sa poisťujeme, že skript oznámi chybu databáze, v prípade, že by sa nepripojil k mySQL. Ďalej nasleduje požiadavka na databázu – Select * from mail, čo znamená vlastne "Zobraz všetko z databázi mail". Treba nahradiť slovo VASA_DB názvom databázi, kde je tabuľka mail. Ďalší riadok zas zariadi, aby skript vypísal konkrétnu závadu, v prípade, že sa nepodarí požiadavku splniť. Do premennej kolko v ďalšom riadku uložíme počet emailov v databázi mail.

Teraz nasleduje samotný cyklus. Použijeme jednoduchý tvar cyklu while. Prvý riadok využíva funkciu Mysql_fetch_array() v spolupráci z cyklom while. Vlastne prikazujeme aby sa PHP kód medzi while a endwhile vykonával toľko krát, koľko záznamov má výsledko požiadavky na mySQL, teda Select * from mail. Nemusíme používať žiadne $e++, táto funkcia si to všetko sama zariadi. Kvôli jednoduchosti v druhom riadku do premennej txt uložíme oslovenie v tvare "Nazdar MENO" a pripojíme vlastný napísaný text. MENO sa vždy mení. V treťom riadku ukladáme do premennej komu email z databázi. V ďalšom už posielame pomocou funkcie mail samotný email. Funkcia mail() má štyri parametre (len 3 sú však povinné) a to: mail("email_prijímateľa", "predmet", "text", "nepovinné hlavičky"). V našom prípade ukladáme ako hlavičku len odosielateľa a jeho email, čo úplne stačí… Tento cyklus musíme ukončiť príkazom endwhile

Posledný odsek je vlastne už len taký report, vypíše, že skript bol úspešne vykonaný a odoslali ste email napr. 120 ľuďom…

Keď chcete mať fungujúci mailing list, ešte môžete urobiť pomocou formulára aplikáciu, ktorá vloží informácie do databázi. Poslúži vám pri tom formulár, v ktorom zistíte meno a email a skript, ktorý sa pripojí k mySQL a vykoná tento príkaz:

mysql_db_query("VASA_DB", "Insert into mail values (‚$email‘, ‚$meno‘)");

Ako som písal, je možné odosielať emaily aj keď nie ste on-line. Treba do skriptu mail.php na začiatok pridať tieto riadky:

if($mode==1):
$text = "Text, ktorý chcete odosielať, ak nie ste online";
$meno = "Vase jmeno";
$email = "Vas email";
endif;

A teraz máte 3 možnosti. Ak chcete tento text odosielať pri nejakej príležitosti, zavoláte si jednoducho skript mail.php takto:

require "mail.php?mode=1";

Alebo môžete nechať odkaz: <a href="mail.php?mode1">Klikni…</a>. Ak chcete skript vykonávať vždy napr o 1:00 každý deň, na UNIXových servroch použijete démona crond. Ovládate ho príkazom crontab. Ak zadáte príkaz crontab -e, spustí sa editor, do ktorého napíšete: 0 1 * * * sbin/php -f /skripty/mail.php?mode=1. Démon crond sa používa na UNIXoch, služba SCHEDULE na Windowsoch NT. V dnešnej dobe však väčšina servrov pracuje s na UNIX bázi a bohužial neponúka démona CROND. A navyše neponúka SHELL konto, takže sa ku CRONDu nedostanete. Tým pádom je pre vás riešenie služba www.web2mail.com. Tu sa zaregistrujete a nastavíte posielanie súboru http://www.VAS_WEB.cz/mail.php?mode=1 na vas email. Tým pádom musí služba urobiť prístup na skript a skript sa vykoná. Email potom môžete jednoduchým filtrom automaticky mazať.

A je tu koniec

Skript vám bohužial nemôžem predviesť naživo, pretože by to bol spamming. A na ten si dávajte veľký pozor! Vďaka za dočítanie sa až sem, dúfam, že vám aplikácia uľahčí život…

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

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

Mohlo by vás také zajímat

Nejnovější

Napsat komentář

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