Formulář na mail

jak si nechat ze stránek posílat zprávy

Výhody mailovacího formuláře - Možnosti odesílání - Action="mailto:..." - Serverové odesílání - Přes cizí servery - Blueboard - Mailform - Vlastní odesílací skript - Jiné způsoby - Co nejde

Tato stránka vznikla kdysi kolem roku 2000. Přestože jsem se ji časem snažil aktualizovat, mnoho popsaných řešení už nefunguje, protože se servery brání odesílání spamu. Osobně již doporučuji jednoduše zobrazit mailovou adresu, pokud chcete dostávat maily ze stránek, případně použít nějakou chatovací aplikaci připojenou do stránek.

Výhody mailovacího formuláře

Na internetových stránkách je velmi ceněna jejich interaktivnost -- kontakt se čtenářem. Většině lidí stačí ke štěstí, když jim čtenáři stránek píšou e-mailem. Proto je zvykem umisťovat na stránky e-mailovou adresu ve formě odkazu, na který když se klikne, tak se otevře okno mailovacího programu s nastavenou adresou. Formulář, jehož výsledky přijdou do mailu, dělá na první pohled to samé. Jsou však nejméně tři důvody, proč si dát okénko pro reakce přímo na stránku: 

Konstrukce formuláře

Dejme tomu, že budu chtít mít formulář se třemi políčky: 

Váš mail:
Předmět:
Zpráva:

Má tento kód: 

<form action="?????????" method="post">
Váš mail: <input name="mail_odesilatele" size="20"><br>
Předmět: <input name="predmet" size="20"><br>
Zpráva: <textarea name="zprava" rows="4" cols="30"></textarea><br>
<input type="submit" value="Odeslat">
</form>

To je zatím normální HTML zápis formuláře: každé políčko musí mít jednoznačné name (dosti libovolné), metoda odeslání method="post" je vhodnější než get, protože se bude přenášet větší množství dat. Zatím by formulář ale nefungoval, protože nemá správně nastavený atribut action, který říká, jak se formulář bude odesílat. 

Možnosti odesílání

Zajistit odeslání formuláře je už těžší. Klíčový je přitom způsob, kterým se to bude odesílat. Existuje mnoho možností, které se liší pracností a spolehlivostí:

Různé mýty tvrdí, že se maily dají odesílat též JavaScriptem nebo javovým appletem, jsou to ale opravdu jenom mýty (alespoň podle mých zkušeností). 

Action="mailto:..."

Jak už jsme naznačil, tento způsob je velmi nespolehlivý, důvody vypisuju níže.

HTML už v sobě obsahuje způsob, kterým se má vyplněný formulář odeslat na mail adresa@prijemce

<form action="mailto:adresa@prijemce" method="post" enctype="text/plain">
Váš mail: <input name="mail_odesilatele" size="20"><br>
Předmět: <input name="subject" size="20"><br>
Zpráva: <textarea name="body" rows="4" cols="30"></textarea><br>
<input type="submit" value="Odeslat">
</form>

Action="mailto..." způsobí, že se prohlížeč při odesílání formuláře pokusí kontaktovat mailovací program na čtenářově počítači a předat mu obsah formuláře k odeslání na adresu, která je uvedena za "mailto:". Jindy prostě po "odeslání" otevře okno malovacího programu s vyplněnými údaji a je na uživateli, aby to odeslal.

Atribut enctype nastavuje způsob předávání obsahu: nejvíce se mi osvědčil text/plain. Kdyby se tam enctype nezadávalo, mail se odešle prázdný s přílohou postdata.att, ve které je zakódovaný obsah formuláře. Nic hezkého na čtení, např.:

mail_odesilatele=nikdo@nidke&subject=p%F8edm%ECt&body=Toto+je+zpr%E1va

Pokud se ale zadá text/plain, tak se alespoň nepokazí čeština a zachovají se řádkové zlomy.

Konkrétní způsob odeslání závisí na prohlížeči a mailovém programu. Např. Internet Explorer do předmětu dává text: "Formulář vystavený z aplikace MSIE". K odeslání se pak používá nejčastěji program Outlook Express (výhozí mailovací program v nové instalaci Windows).

Proč je to nespolehlivé 

Mail z formuláře s action="mailto..." často nenajde adresáta. Problémy spočívají v nastavení počítače u čtenáře. Možné důvody: 

Navíc, když už se formulář podaří odeslat, je jako odesilatel uveden majitel účtu na daném počítači, nikoliv nutně skutečný odesilatel. Příjemce (tedy já) odpovídá někomu, kdo vůbec neví, co se děje. To je poslední důvod, proč klientské odesílání doporučuji nepoužívat a zkusit raději způsoby serverové.

Serverové odesílání

Action se namíří na nějakou aktivní stránku (např. ASP nebo PHP skript), která udělá dvě věci: 

  1. Odešle mail
  2. Do prohlížeče odešle stránku, nejčastěji potvrzení odeslání

Podle možností vašeho serveru

Přes cizí servery

Znám dvě české služby, které umožňují odesílání mailů z formulářů: Maiform a Blueboard. Je třeba se registrovat, nechat si vygenerovat kód formuláře a ten umístit do své stránky. Formulář se bude odesílat na vzdálený server, který odešle mail a zobrazí stránku s potvrzující stránkou.

Postupem času jsem byl nucen všechny zdejší odkazy a návody smazat, protože přestaly fungovat. Funkční pravděpodobně je na webu vsevjednom.cz (2022).

Vlastní odesílací skript

Máte-li možnost spouštět na serveru skripty a server umí odesílat maily, můžete si napsat vlastní odesílací aplikaci. Pak stačí action ve form namířit na soubor s tím vytvořeným skriptem. Jazyk skriptu závisí na tom, co váš server zvládá: může to být obyčejné CGI, ASP nebo PHP. Já používám PHP.

Mám dva soubory. V prvním je jenom formulář namířený na druhý php skript:

<form action="druhy.php">
Váš mail: <input name="mail_odesilatele"><br>
Předmět: <input name="predmet"><br>
Zpráva: <textarea name="zprava"></textarea><br>
<input type=submit value="Odeslat">
</form>

Soubor druhy.php vypadá takto:

<? if ( Mail("moje@adresa", $predmet, $zprava, "From: " . $mail_odesilatele) )
echo "Mail byl odeslán";
else echo "Mail se nepodařilo odeslat"; ?>

V praxi se skript samozřejmě obohacuje o další funkce (např. se neodesílá prázdný formulář). V tomto příkladu je pouze test, zda se funkce Mail() provedla nebo ne. Všimněte si, že se ve skriptu používají proměnné, které se jmenují stejně jako políčka ve formuláři. Do funkce je přidána hlavička "From:", která nastavuje odesílatele. Existuje více takových hlaviček, např. "Bcc:" pro skryté kopie.

Syntaxe PHP funkce Mail():

Mail("adresa@příjemce", "Předmět", "Zpráva", "nepovinné další hlavičky")

Pokud jsou údaje v proměnných, neužívá se uvozovek. Je-li třeba uvést více příjemců, oddělují se jejich jména čárkami. Řádkový zlom se dělá escape sekvencí "\n".

Problémy nastavení serveru

Pokud máte na serveru povoleny PHP nebo ASP skripty, nemusí to automaticky znamenat, že bude fungovat odesílání mailů. PHP ani ASP totiž samy od sebe odesílat maily nedokážou, ale využívají jiných programů. Na Linuxu/Unixu bývá funkční program mail, tam pak může být problém jenom s právy (freeweby s podporou PHP mívají občas mail zakázaný nebo omezený). ASP na windowsovských serverech potřebují instanci nějakého com objektu, který umí maily posílat (nevím přesně jakého). PHP na Windows potřebují v nastavení adresu spřízněného SMTP serveru, který odeslaný mail přijme a pošle ho dál.

Jiné způsoby serverového odeslání

Všechno záleží na poskytovateli webového prostoru, resp. na nastavení serveru.

Například jsou-li na serveru nainstalovány FrontPage extensions, může se prý ve FrontPage formuláři nastavit odesílání do mailu, žel, většinou to nefunguje.

Některé freeweby obsahují utilitu pro odesílání formuláře na mail. Kdysi dávno to například poskytoval Sweb.cz.

Před několika lety bylo nejčastějším způsobem odesílání formuláře na mail využití cgi skriptu mailform.cgi, který se dodnes zachoval na některých starších serverech a při troše štěstí jej lze použít.

Co nejde

Neznám žádný jednoduchý způsob, jak z formuláře odesílat maily s přílohami. 

Z principu neexistuje žádný způsob, jak bezpečně identifikovat skutečného odesilatele zprávy, tzn. uživatelem uvedený mail může být falešný. 

 

Reklama

www.webhosting-c4.cz, extra rychlý SSD webhosting s doménou v ceně
o tvorbě, údržbě a zlepšování internetových stránek

Návody HTML CSS JavaScript Články Ostatní

Základy Prvky stránek Tvorba webu

Jak psát web píše Yuhů, Dušan Janovský. Kontakt.