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:..."

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:". 

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.

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, nikoliv 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.

www.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.

www.mailform.cz MailForm

Maily přes Mailform doporučuji využívat, pokud se nespokojíte s mailem odesílatele a prostou zprávou, ale potřebujete od uživatele získat další strukturované údaje. Formulář si totiž v tomto případě stavíte sami, server řeší pouze odesílání. Do formuláře si můžete umístit další libovolná pojmenovaná pole (nejčastěji tagem <input>); vyplněný obsah těchto polí přijde do mailu. V nastavení se dá zvolit mnoho způsobů vzhledu a formování došlé zprávy, různé příjemce, předmět zprávy a další vymoženosti.

Registrace na mailform.cz je naprosto typická, pouze se při ní zadává i adresa stránky, kde bude formulář umístěn. Podle mých zkušeností tam stačí zadat přibližnou adresu, to jest doména.cz. Pak je vygenerován formulář, který je třeba naplnit svými formulářovými poli (nejčastěji intputy). 

<form method="POST" action="http://www.mailform.cz/form.asp">
<input type="hidden" name="mailform_userid" value="9427">
...
<input type="submit">
</form>

Na místo tří teček je nutno doplnit vlastní formulářová pole, např:

Předmět: <input type="text" name="subject"><br>
Zpráva: <textarea name="Zprava"></textarea><br>
Váš mail: <input name="Mail">

K celému systému je velmi obsáhlá nápověda. Například se tam dá nastavit, aby se jako předmět zadala hodnota zadaná do políčka subject.

Jediná drobná nevýhoda je, že se v došlé poště jako odesílatel ukazuje "MailForm robot", případné odpovědi naštěstí docházejí na adresu, kterou uživatel zadá do políčka s name RefererEmail, Email či Mail.

Skript od MaKr

Kamarád MaKr napsal a na svém serveru rozběhal skript, který umožňuje odesílání mailů z jednoduchého formuláře bez nutnosti registrace. Změňte si údaje a zkuste to.

<FORM action="http://mgs.web3.cz/html4all/mail.php" method="post">
<!-- Tyto dva parametry musí být skutečné a správné!! !-->
<INPUT type="hidden" name="komu" value="torp@seznam.cz"><!-- adresát -->
<INPUT type="hidden" name="rpath" value="torp@seznam.cz"><!-- odesilatel -->
<!-- absolutní adresa stránky, kam se má přejít po odeslaní !-->
<INPUT type="hidden" name="goto" value="new/email-od.htm">

Předmět: <INPUT type="text" name="p" value=""><BR>
Text: <TEXTAREA cols=50 rows=5 name="t"></TEXTAREA><BR>
Váš email:<INPUT type="text" name="od" value=""><BR>
<INPUT type="submit" name="send" value="ODESLAT">
</FORM>

Skript od Technika

Podobnou funkčnost s nastavením odesílatele i příjemce nabízí mailovací formulář, který jsem dostal mailem.

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. Konkrétně jsem si toho všiml na www.sweb.cz. Utilita se nastavuje pomocí konfiguračního souboru. Nepochybuji o tom, že podobnou možnost obsahují i některé jiné freeweby. 

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ý. 

Vizte též: Úvod do formulářů v HTML, Formuláře v HTML, Mailové adresy v HTML stránkách, Jak začít s PHP, Služby vzdálených serverů
On-line odkazy: www.blueboard.cz, www.mailform.cz 
Odfláknuté příklady: formulář přes Blueboard, formulář přes Mailform, první část mého skriptu odesílaného na PHP

Píše Yuhů
dusan@pc-slany.cz
Jak psát web O tvorbě, údržbě a zlepšování internetových stránek.

Základy HTML CSS FrontPage JavaScript

Hledání


Rozšířené


Jak psát web: http://dusan.pc-slany.cz/internet/

Píše Yuhů: autorova stránka, mail: dusan@pc-slany.cz

Poslední aktualizace 02.11.2002