Název článku: PHP v praxi, 24. díl - E-mail
Datum publikování: 15.03. 2002
URL článku: http://www.webtip.cz/art/wt_tech_php/jave_php_24.html (kliknětě pro návrat)
Všechna práva vyhrazena (c) 2000 Grafika Publishing s.r.o.
Doslovné ani částečně přebírání tohoto materiálu není povoleno bez předchozího písemného svolení vydavatele - společnosti Grafika Publishing s.r.o.
Naším dnešním úkolem bude seznámit se se základy odesílání pošty přes webový formulář. Není na tom nic složitého, ale najdou se určité rány pod pás, jež nás obvykle stojí mnoho času.
Než začneme pracovat na skriptu, je důležité umožnit odesílání e-mailů přes PHP. Nezbývá nám nic jiného, než zeditovat php.ini:
Osnovou celého skriptu bude následující podmínka:
if (!isset($submit)) formular(); else posli($mail); |
Funkce formular() zobrazí HTML formulář, do kterého napíšeme údaje o odesílateli, příjemci, předmět e-mailu a samotný text. Informace odešleme tlačítkem submit té samé stránce. Proto se vytvoří proměnná $submit a podmínka bude nepravdivá. Zavolá se funkce posli(), obsahující veškeré informace z formuláře v poli $mail[]. Použitím pole si zde výrazně usnadníme práci - při každé změně vkládaných informací bychom jinak stále museli měnit i parametry této funkce.
function posli($mail)
{
$hlavicka = "From: $mail[odesilatel]\r\n";
$hlavicka.= "Reply-To: $mail[odesilatel]\r\n";
$hlavicka.= "X-Mailer: php-mailer";
mail ("$mail[adresa]", "$mail[predmet]", "$mail[telo]", "$hlavicka")
or die ("error");
echo "OK";
}
|
Základem je samozřejmě PHP funkce mail(), na tu se podívame podrobněji.
bool mail ( string to, string subject, string message [, string additional_headers])
Toto je definice z manuálu, je důležité ji umět přečíst. Před funkcí je slůvko bool - to značí, že funkce udává výsledek ve formě boolean, čili pravda nebo nepravda. Jednoduše: když se e-mail podaří odeslat, rovná se funkce pravdě (1), jinak nepravdě (0). V závorkách jsou uvedené parametry - všechny jsou stringy (řetězce). První je e-mailová adresa příjemce, druhý je předmět zprávy, třetí samotná zpráva. Tyto jsou povinné, v hranatých závorkách jsou parametry volitelné. V tomto případě informace v hlavičce, bez kterých se sice můžeme obejít, ale není to to nejlepší řešení.
Tyto informace jsou pro přehlednost dosazeny do proměnné $hlavicka. Všimněte si, že nejprve je v každém řádku určité slovo (např. From:), pak samotná informace a každý řádek končí \r\n (\r = carriage return, \n = linefeed; jedná se o ukončování řádků). S tímto je asi největší trápení: pokud váš smtp server pracuje pod Windows, je funkční právě tato syntaxe, Linuxový server si vystačí s \n.
<?
function formular()
{
?>
<form action="<?= $PHP_SELF ?>" method="post">
<table width="400" border="1" cellpadding="5" align="center">
<tr>
<td colspan="2" align="center">php mailer</td>
</tr>
<tr>
<td>adresa příjemce:</td>
<td>
<input type="text" name="mail[adresa]">
</td>
</tr>
<tr>
<td>adresa odesílatele:</td>
<td>
<input type="text" name="mail[odesilatel]">
</td>
</tr>
<tr>
<td>předmět:</td>
<td>
<input type="text" name="mail[predmet]">
</td>
</tr>
<tr>
<td>text:</td>
<td>
<textarea name="mail[telo]" cols="50" rows="10"></textarea>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" name="submit" value="odeslat">
</td>
</tr>
</table>
</form>
<?
}
function posli($mail)
{
$hlavicka = "From: $mail[odesilatel]\r\n";
$hlavicka.= "Reply-To: $mail[odesilatel]\r\n";
$hlavicka.= "X-Mailer: PHP";
mail ("$mail[adresa]", "$mail[predmet]", "$mail[telo]", "$hlavicka")
or die ("error");
echo "OK";
}
if(!isset($submit)) formular();
else posli($mail);
?>
|
Používání funkce mail() je velice časté, proto je nutné ji zprovoznit. Především k tomu měl sloužit dnešní návod, příště se podíváme na odesílání e-mailu s přílohou.