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:
- nastavit "extension_dir" na správný adresář , např: extension_dir
= "c:\php\extensions\" (358)
- odkomentovat "extension=php_imap.dll" (438)
- nastavit server pro odesílání pošty SMTP = smtp.vas_provider.cz (476)
- napsat svoji e-mailovou adresu za "sendmail_from =" (479)
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.
Veselý Jan
|