Vytvořte si vlastní mailform
Mailform je služba, která zajišťuje odesílání dat z forulářů na webových stránkách na email, aniž by prohlížeč používal přednastavených emailových klientů. Tím se odesílání webových formulářů stává pohodlnějším pro uživatele a odeslaná data jsou pro příjemce přehlednější. V tomto článku bych chtěl popsat způsob, jak takovýto mailform funguje a uvést konkrétní příklad mailformu v PHP.
Nejprve budeme potřebovat samotný webový formulář. K jeho tvorbě nám vystačí základní znalost jazyka HTML, zvláště pak znalost HTML tagů umožňujících vkládat data uživatelem. Počítám s tím, že jste schopni používat těchto HTML tagů a proto uvádím jen samotný formulář, ze kterého budu v příkladech vycházet.
<form method="post">
<table align="center" border="0">
<tbody>
<tr>
<td align="left">Jméno:
<td><input name="jmeno" type="text" />
</tr>
<tr>
<td align="left">Email:
<td><input name="email" type="text" />
</tr>
<tr>
<td align="left">Poznámka:
<td><input name="poznamka" type="text" />
</tr>
<tr>
<td align="center" colspan="2">
</tr>
</tbody>
</table>
Jako parametr ACTION tagu <FORM> Použijete URL adresu Vašeho mailformu. Zasílání dat budeme provádět metodou POST (METHOD=“POST“), a to z toho důvodu, jelikož neznáme přesné množství dat, která budou pomocí mailformu odeslána a tím pádem může být metoda GET nepoužitelná kvůli omezení maximální velikosti dat přenositelných touto metodou. Takže máme hotový webový formulář, který uživatel vyplní a odešle. Co se děje ve chvíli, kdy náš skript přijímá a zpracovává data, Vám popíši nyní:
Jelikož mailform je služba, která má neomezené možnosti co se obsahu jednotlivých formulářů týká, proto ani nemůžeme znát přesné názvy jednotlivých položek formuláře, se kterými bychom mohli pracovat. Naštěstí pokud známe metodu, kterou nám formulářová data přišla, můžeme využít polí ($HTTP_POST_VARS a $HTTP_GET_VARS), které nám interpret PHP automaticky vytvoří. Nás bude zajímat pole $HTTP_POST_VARS – jelikož data skriptu byla poslána metodou POST. Jelikož se jedná o pole asociativní, můžeme je pomocí jednoduchého cyklu procházet a zpracovávat.Pro příklad uvádím jednoduchý výpis PHP kódu zpracovávajícího příchozí data.
<?php
$buffer = $HTTP_POST_VARS;
$mess="";
reset($buffer);
while(key($buffer)) {
$mess .= key($buffer).": ".current($buffer)." ";
next($buffer);
}
?>
Jak bude vypadat výsledný obsah emailu z výše uvedeného formuláře uvádím v následujících řádcích:
jmeno: example.com
email: example@example.cz
poznamka: Test
Takže nyní máme připravený samotný obsah emailu, který teď můžeme odeslat. Pro odeslání emailu můžeme použít standardní funkce Mail(), která nám však nedává příliš komfortu (hlavní nevýhodou je, že nemůžete do emailu nastavit argument Return-Path, který slouží jako emailová adresa, na kterou bude v případě nedoručitelnosti zprávy, zpráva vrácena), ale pro pochopení funkčnosti mailformu bohatě stačí. Jako adresu pro odpovědi jsem využil položky email vyplněné ve formuláři. Zde je citace PHP kódu:
<?php
$v = Mail("example@example.com", "Mail z web formulare",$mess, "Reply-To: $email");
?>
Je vhodné návštěvníka stránek upozornit na výsledek skritu – zda mail byl či nebyl odeslán. Nejvhodnější bude výstup skriptu přesměrovat na jinou www stránku. To uděláme pomocí funkce Header(). Také budeme rozlišovat stránku pro úspěšné a neuspěšné odeslání dat z formuláře.
<?php
If ($v):
Header("Location: http://www.server.cz/uspesne_odeslano.html");
Else:
Header("Location: http://www.server.cz/doslo_k_chybe.html");
Endif;
Exit;
?>
Kompletí skript pro jednoduchý mailform v PHP bude vypadat následovně:
<?php
$buffer = $HTTP_POST_VARS;
$mess="";
reset($buffer);
while(key($buffer)) {
$mess .= key($buffer).": ".current($buffer)." ";
next($buffer);
}
$v = Mail("example@example.com", "Mail z web formulare",$mess, "Reply-To: $email");
If ($v):
Header("Location: http://www.server.cz/uspesne_odeslano.html");
Else:
Header("Location: http://www.server.cz/doslo_k_chybe.html");
Endif;
Exit;
?>
Takže jsem Vám předvedl princip a jednoduchý příklad mailformu v PHP. Tento skript je značně nedokonalý, jelikož mu nezáleží na tom, zda byly z formuláře odeslána nějaká data, nekontroluje emailovou adresu odesílatele formuláře a je schopen odesílat email jen na jednu emailovou adresu. Neumožňuje odesílat HTML maily, přílohy atd. Nicméně je z něj patrný princip fungování takovéto služby a i mírně pokročilý PHP programátor si jej určitě upraví dle svých potřeb.