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

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.

Zatímco na Bluebordu je registrace a použití trochu jednodušší, Mailform nabízí podle mého názoru o něco větší možnosti.

miniaplikace.blueboard.czAnkety, návštěvní knihy, mailformy, počítadla a CHAT pro Váš web

Na hlavní stránce se zvolí registrace, pak se vyplní formulář. Odesílání mailů z formulářů se v terminologii tohoto serveru jmenuje "Blueform". Aby to fungovalo, musí ze v nastavení Blueformu zadat e-mail, na který se má formulář odesílat. Zároveň se mohou nastavit barvy, to není podstatné. Pak stačí nechat si vygenerovat kód a umístit ho do stránek. 

Kód Blueformu je umístěn v tagu <iframe>, do kterého se načítá formulář ze serveru. Vzhled a funkci formuláře tedy (kromě barev) není možné nijak podstatně ovlivnit (leda byste si ho zkopírovali a pak si udělali svůj parazitní formulář změnou action). Naštěstí má formulář velmi moderní vzhled a hezky používá styly. Zajímavé je, že formulář je načítán ze serveru, i když není žádný mail odesílán.

Formulář obsahuje pouze dvě políčka, což většinou stačí: zadání mailu odesílatele a text zprávy. Příchozí zpráva má pak předmět (subject) "BlueForm Message", který nelze nijak změnit. Jako odesílatel je uveden mail, který uživatel zadá do okénka mail. Zpráva dorazí bez jakýchkoli balastních textů. Blueboard využívá pro odesílání PHP (což není podstatné). 

Server Blueboard.cz je zajímavý i tím, že kromě formuláře do mailu poskytuje i návštěvní knihu, ankety, počitadlo, chat a jiné aktivní prvky.

Další řešení

http://formsite.com/ umožňuje odesílat html maily s přílohami, blbne čeština.

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, webhosting s doménou v ceně. 20GB
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.