Jak vytvořit jednoduchý emailový formulář

Pátek, 31. Říjen 2008

Věc, která se určitě hodí. E-mailový formulář. Slouží ke komunikaci uživatele a majitele webu aniž by majitel webu musel zveřejňovat svůj e-mail. A jak jej vytvořit? To si ukážeme v dnešním článku.

Co potřebujeme?

Pustíme se rovnou do práce. Můžete se také podívat na živou ukázku, jak takový e-mailový formulář vypadá. Jediné co potřebujete je podpora PHP u vašeho hostingu. Pak jen stačí nahrát soubory na web a máte hotovo. Pro začátečníky bych rád upozornil, že všechny tyto soubory musí mít koncovku .php jinak vám e-mailový formulář nebude fungovat.

E-mailový formulář – HTML kód

E-mailový formulář je rozdělen na 2 soubory. První (index.php), který určuje vzhled a druhý (poslat.php), který zpracovává odeslané informace a doručí váš e-mail.

index.php (vložte kamkoli mezi tagy <body> a </body>)
<table style="height:100%;" width="100%" cellSpacing="0" cellPadding="0" border="0">
<tr><td align="center" valign="top">
<form action="poslat.php" method="post">
<table width="200" border="0" class="text">
<tr><td width="50"><strong>J</strong>méno:</td><td><input name="jmeno" accesskey="j" type="text"/></td></tr>
<tr><td width="50"><strong>E</strong>mail:</td><td><input name="email" accesskey="e" type="text"/></td></tr>
<tr><td width="50"><strong>W</strong>eb:</td><td><input name="web" accesskey="w" type="text" value="http://"/></td></tr>
<tr><td width="50" valign="top"><strong>T</strong>ext:</td><td><textarea name="text" accesskey="t" rows="5" cols="25"></textarea></td></tr>
<tr><td colspan="2" align="center"><input type="submit" class="button" value="Odeslat"/> <input type="reset" value="Vymazat"/></td></tr>
</table>
</form>
</td></tr>
</table>
poslat.php (kompletní zdrojový kód)
<?php
$to = "vas@email.cz";
$extra = "From: ".$_POST['email']."\r\nReply-To: ".$_POST['email']."\r\n";
$subject = "Vzkaz od ".$_POST['jmeno']."";
$mess = "Jméno: ".$_POST['jmeno']."\nEmail: ".$_POST['email']."\nWeb: ".$_POST['web']."\nText:\n".$_POST['text']."";
mail ($to, $subject, $mess, $extra);
?>
<html><head>
<meta http-equiv="refresh" content="0; url=index.php">
<title>Přesměrování...</title>
</head><body></body></html>

Existuje mnoho variant vytvoření e-mailového formuláře. Vybral jsem ten nejjednodušší. Můžete použít tento způsob nebo si jej kompletně přetvořit podle svého. To už je na vás…

↓ Stáhnout kompletní e-mailový formulář

Kompletní výsledek ke stažení [1,14 kB]

{ Komentáře k článku }

Gravatar 1 Ivan Šouta Listopad 15, 2008 v 19:28

Ahoj,
už se dlouho trápím s posíláním formulářů a ajta najednou takový pěkný příklad. Díky, Ivan.

Gravatar 2 Tomáš Erlich Listopad 15, 2008 v 20:23

Ahoj,
děkuji Vám. Jsem rád, když můžu pomáhat lidem.

Pokud budete mít zájem plánuji napsat článek pro posílání e-mailů s anti-spamovou ochranou a s možností napsaní volitelného E-mailu doručitele. Takže z tohoto formuláře budete moci psát komu budete chtít.

Pokud budete mít zájem můžete mi napsat na můj E-mail, nebo počkat zhruba do března kdy bude na tomto blogu.

Gravatar 3 veronika Březen 23, 2009 v 8:41

Ahoj,
děkuji za rady, jsem zoufalý začátečník a tohle je pěkný a jasný způsob, ale pořád mi nějak nechce odesílat proměnné… může to být nastavením serveru? na mail mi přijdou vždy jen nadpisy… :-(.

Gravatar 4 Tomáš Erlich Březen 23, 2009 v 19:33

Chápu, že ne každý má čas hledat hodiny vhodný formulář. A tak se snažím psát všechno jasně a stručně. Žádné zbytečně řeči kolem. Co se týče tvého problému. Zkus více mailů.

Vyzkoušej poslat mail na Gmail, Seznam… Pokud bude stejný problém všude. Bude chyba na straně serveru. Jestli si nebudete vědět rady vyzkoušejte novější způsob. Je popsán v mém novém článku, který se jmenuje „E-mailový formulář s antispamovou ochranou“.

Gravatar 5 Gory Květen 30, 2009 v 15:43

Ahoj. Použil jsem tvůj email. form., ale nejde mi. Odešlu to a na email nic nepřijde. Takže asi použiji svůj vlastni :D… ale zajímalo by mě proč to nejde.

Gravatar 6 Tomáš Erlich Květen 31, 2009 v 15:43

Formulář je funkční. Zkoušel jsem jej. Odesílá maily spolehlivě. Testoval jsem Gmail, Centrum a Seznam. Chyba bude s největší pravděpodobnosti na tvé straně. Může být i na straně serveru, ale o tom pochybuji.

Gravatar 7 Zuzana Červenec 1, 2009 v 18:16

Ahoj,
dakujem tiez za dobre rady, ako zena sa v tom teda moc nevyznam :-) ale urobila som vsetko ako si povedal, e-mail prisiel, ale tiez len nadpisy bez textu, ktory som napisala. Ten dokument poslat.php je docela kratky, ked som si ho tak citala v notepade, myslis, ze by si nam laikom mohol vysvetlit, co vlastne ktory prikaz znamena?

Dakujem a prajem vsetko dobre.

Gravatar 8 Tomáš Erlich Červenec 3, 2009 v 12:47

Ahoj,
znova jsem vyzkoušel odeslat mail z testovací stránky, ale všechno šlo. Asi půjde o špatné nastavení u tebe na serveru. Pokud rozbalíš balík na web – měl by hned jít. Těžko říct, proč ti to nejde.

Jak koukám, druhý formulář ti již jde, takže hodně štěstí.

Gravatar 9 Martin Srpen 29, 2009 v 11:00

Jakou jsem mohl udělat chybu? V řádku $to = „vas@email.cz“; jsem jen změnil email na svůj a soubor uložil. Cely skript pak „funguje“ tak, že mi na můj mail chodí čtyři pod sebou napsaná slova… Jméno: Email: Web: Text:

Gravatar 10 Tomáš Erlich Srpen 29, 2009 v 18:48

Takovou funkci to také má. V mailů to vypíše jméno, mail a další. Pokud to chceš jinak, budeš si to muset předělat v souboru sám. Čerpat můžeš například v článku E-mailový formulář s antispamovou ochranou zde na webu.

Gravatar 11 Jan Kudla Únor 8, 2010 v 14:20

Ahoj, pěkný návod. Mi všechno funguje až na české znaky. Prostě diakritika nejede. Mail přijde a místo znaků s diakritikou jsou patvary. Nevíš čím to je?

Gravatar 12 Tomáš Erlich Únor 10, 2010 v 13:23

Špatným kódováním. Tuším, že na Seznam se to odesílá bez háčků a čárek.

Gravatar 13 Drak654 Květen 11, 2010 v 10:34

Super návod, ale ešte by som dodal do formulára:

<input type="text" name="ip" value="">

Takto sa dá zistiť, ak by ste náhodou potrebovali IP odosielateľa.

Gravatar 14 Petr Únor 9, 2012 v 22:47

Když to přidám tak mi na mail přijde i číslo ip adresy odesílatele? Díky.

Gravatar 15 Tomáš Erlich Únor 13, 2012 v 15:43

Zřejmě ano, za zkoušku nic nedáte :). Zakomponovat formulář do stránek samoz. jde. Prostě kód z poslat.php vložte tam, kde chcete formulář zobrazovat. Je to na stránky psané ručně… pokud používáte nějaký redakční systém tak bude určitě lepší používat nějaký plugin.

Gravatar 16 Petr Únor 9, 2012 v 22:45

Dobrý den, chci se zeptat, jestli tento formulář jde zakomponovat do html stránek a případně jak to udělat? děkuji za odpověď.

Gravatar 17 Walwiader Červen 19, 2012 v 6:25

Dobrý den,
mám problém, který akutně potřebuji vyřešit, nejsem v PHP expert, tak Vás prosím o přiměřené reakce.

Potřebuji vložit tento emailový formulář:
Jméno a Příjmení:
Váš e-mail:
Ulice a číslo:
PSČ:
Město:
Poznámka:
Odeslat.php:
$email = $_POST['email'];
$jmenoaprijmeni = $_POST['jmenoaprijmeni'];
$uliceacislo = $_POST['uliceacislo'];
$pscamesto = $_POST['pscamesto'];
$vzkaz = $_POST['vzkaz'];

if(strstr($email, "\n") !== false || strstr($email, "\r") !== false) {
echo "Hackerum vstup zakazan!";
exit;
}
if(strstr($jmenoaprijmeni, "\n") !== false || strstr($jmenoaprijmeni, "\r") !== false) {
echo "Hackerum vstup zakazan!";
exit;
}
if(substr_count($email, '@') >= 2) {
echo 'Do kolonky "Vas e-mail" lze zadat pouze jednu emailovou adresu.';
exit;
}

$to = "mladezprotidrogam@gmail.com";
$extra = "From: $email\r\nReply-To: $email\r\nContent-Type: text/plain; charset=\"utf-8\"\r\nContent-Transfer-Encoding: 8-bit\r\n";
$subject = "Vzkaz od ".$jmenoaprijmeni."";
$mess = "Jméno a Příjmení: ".$jmenoaprijmeni."\nE-mail:".$email."\nUliceasiclo:".$uliceacislo."\nPsc:".$psc."\nPscamesto:".$pscamesto."\nVzkaz: ".$vzkaz."\n";
if(mail ($to, $subject, $mess, $extra)) echo "Vzkaz byl uspesne odeslan";
else "Pri zpracovani vzkazu nastala chyba!";

V čem je problém, když po odeslání formuláře vyjede samotný script místo odeslání? Děkuji za odpověď.

Gravatar 18 Tomáš Erlich Červen 19, 2012 v 16:30

Dobrý den,
je to už dlouho, co jsem psal něco v PHP a tak Vás raději pošlu dále. Bohužel to nemohu více řešit, protože nyní nemám vůbec čas. Zkuste napsat na JPW (je třeba registrace a někteří jsou tam docela nadutí) či bez nutné registrace na diskusní fórum Jaknaweb (nejsou tam takový profíci, ale je to rychlejší).

Možná jen v rychlosti rada – máte určitě ten odesílací kód obalen na začátku < ?php a na jeho konci ?>?

Gravatar 19 Dan Červenec 3, 2012 v 16:11

To je jednoduché. Buď stránku nemáte uloženou jako *.php (kde * je název) nebo script nemáte v < ?php ?>.

Gravatar 20 Element Červenec 20, 2012 v 20:30

Chtěl bych se zeptat, když odešlu email proč se mi objevuje jenom:
Jméno:
Email:
Web:
Text:

a není to vyplněný? Děkuji.

Gravatar 21 Tomáš Erlich Červenec 21, 2012 v 15:19

Asi tě nepotěším, ale nemám tušení. Je to už několik let, co jsem tenhle formulář dělal a jak si teď zkouším ukázku, která je nahraná tady na weblogu… taky nefunguje. Přitom jsem s ní nic nedělal a jsem si jistý, že fungovala.

Zkus se s tímhle kódem obrátit na nějaké fórum a možná chybu najdou. Víc ti bohužel neporadím. Pokud zjistíš čím to je, zkus se ozvat.

Gravatar 22 Element Červenec 25, 2012 v 16:20
Gravatar 23 Tomáš Erlich Srpen 5, 2012 v 12:37

Paráda. Zkusím tu chybu zde opravit. Aby vše běželo jak má. Díky, že jsi se stavil a hodil sem odkaz…i pro ostatní čtenáře. Teď už mailový formulář problémy dělat nebude.

Gravatar 24 Tomáš Erlich Srpen 5, 2012 v 14:32

Emailový formulář je opět plně funkční! Byla opravena chyba kdy přicházel formulář prázdný (nevyplněný). Upravil jsem živou ukázku, kompletní soubor ke stažení a samozřejmě kód v článku. Dále jsem trochu upravil text a titulek článku.

Takže nyní by již mělo být vše funkční a v pořádku. I tak doporučuji poohlédnout se po lepším formuláři s antispamovou ochranou.

Komentáře jsou pro tento článek již uzavřeny. Pokud ovšem máte něco na srdci, můžete mi stále napsat. Děkuji za pochopení.

Předchozí příspěvek:

Následující příspěvek: