WebNews.cz - počítače, komunikace, mobily, internet, finance

Mapa serveru | Administrace

Odeslání libovolného formuláře e-mailem (1.)

Michal Terč - Profil - 28.05.2001
Skript pro odeslání libovolného formuláře mailem, který umí odeslat libovolné prvky formuláře (samozřejmě pouze ty, které potřebujete), přesměrovat se na stránku s poděkováním, dosadit správně mail odesílatele, aby jste mohli rovnou na zprávu odpovědět. Skript jsem vytvořil, protože mi žádný jiný nevyhovoval a tak jsem v něm uplatnil vše, co mi jinde vadilo a co jsem od něj požadoval.

Typickým příkladem, kdy budeme potřebovat odeslat formulář mailem je formulář pro dotazy návštěvníků vlastního webu (příp. odeslání komplikovanějšího formuláře jako je např. objednávka). První kroky často vedou k použití skriptu pro odesílání formulářů, který nám poskytuje firma, kde hostuje náš web. Tyto skripty jsou ale většinou velmi málo funkční a nesplňují naše požadavky. Proto pokud máme možnost spouštění skriptů (ASP, PHP, ...) na svém webu, tak se pokusíme napsat vlastní skript pro odesílání formuláře, kde můžeme uplatnit všechny naše požadavky. My si dnes popíšeme tento skript napsaný v PHP.

Nejdříve si vytvoříme jednoduchý formulář, který potřebujeme odeslat. Jsou zde skryté prvky formuláře s názvy komu, predmet a nexturl, ve kterých jsou parametry pro odesílací skript. Názvy parametrů, které mají být vypsány v těle mailu, začínají znakem #.

<html><body>

<form name="Form" action="sendform.php" method="post">

<input type="hidden" value="mterc@gpm.web4u.cz" name="komu">
<input type="hidden" value="Dotaz z PaidNews" name="predmet">
<input type="hidden" value="dekujeme.php" name="nexturl">

<title>Jméno:</title>
<input type="text" name="#Jméno" size="43">

<title>Email:</title>
<input type="text" name="email" size="43">

<textarea name="#Dotaz" cols="48" rows="7"></textarea>

<input type="submit" name="submitButtonName" value="Odeslat">

</form>

</body></html>

Stránka pro poděkování by mohla vypadat třeba takto. Nazveme ji např. dekujeme.php.

<html><body>

<font size="6"><b>Děkujeme!</b></font>
<p>Vaše zpráva byla v pořádku odeslána. Do týdne se pokusíme Vám odpovědět. :-)</p>

</body></html>

Vlastní formulář se nachází ve skriptu sendform.php. Skriptu je možné předat následující parametry.

Povinné parametry:
$komu ... adresa příjemce
$email ... adresa odesílatele

Nepovinné parametry:
$predmet ... předmět mailu
$nexturl ... stránka s poděkováním
$backurl ... adresa stránky pro návrat
$#??? ... položky pro odeslání v těle mailu (musí začínat znakem #)

Nejprve projdeme všechny parametry skriptu a sestavíme z nich tělo mailu.

$telo = "Email: $email\n";

// projdeme všechny přijaté parametry
while (list($promenna, $hodnota) = each($HTTP_POST_VARS))
{
// nahradíme konce řádků znakem \n
$hodnota = str_replace(chr(13) . chr(10), "\n", $hodnota);
$hodnota = str_replace(chr(10) . chr(13), "\n", $hodnota);
$hodnota = str_replace(chr(13), "\n", $hodnota);
$hodnota = str_replace(chr(10), "\n", $hodnota);

// pokud parametr začíná na #, tak zapsat hodnotu do textu mailu
if ((substr($promenna, 0, 1) == "#") && ($hodnota != ""))
{ $telo .= substr($promenna, 1) . ": $hodnota\n"; }
}

Na konec těla mailu ještě připojíme označení uživatelova browsu a jeho IP.

$telo .= "\nUživatelův browser: $HTTP_USER_AGENT\n";
$telo .= "IP adresa, ze které přišel požadavek: $REMOTE_ADDR\n";

Nakonec mail odešleme pomocí PHP příkazu mail(). Funkce ToISO() slouží pro převod textu z kódování Win1250 na iso-8859-2. Tato funkce se nachází v includu functions.php.

if (mail($komu, ToISO($predmet), ToISO($telo), "From: $email"))
{
...
// pokud je mail odeslán, přesměrujeme na stránku dekujeme.php
...
} else {
...
// pokud nebyl mail odeslán, vypíšeme chybu
...
}

Tím máme skript hotov a můžeme ho použít. Skriptem lze odeslat i složitější formuláře a přitom mail, který dostaneme bude čitelný a přehledný včetně správného kódování češtiny. Mail bude mít také správně uvedenou adresu odesílatele, takže se dá v poštovním klientovi potom jednoduše na mail odpovědět.

Formulář by bylo ještě potřeba před odesláním zkontrolovat, zda jsou správně vyplněna povinná pole. O tom si ale povíme příště.

Jak bude vypadat konečný výsledek se můžete podívat zde.


Kompletní zdrojové soubory příkladu - sendform.zip (4 kB)
Základní include využité v příkladu - inc.zip (7 kB)

Tisk článku - Poslat článek - (11358 zobrazení)
Redakce | | | ISSN 1213-9335 | © 2005 Developed by terc.cz