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 }

Ivan Šouta

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

Tomáš Erlich

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.

veronika

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… :-(.

Tomáš Erlich

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

Gory

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.

Tomáš Erlich

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.

Zuzana

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.

Tomáš Erlich

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

Martin

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:

Tomáš Erlich

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.

Jan Kudla

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?

Tomáš Erlich

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

Drak654

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.

Petr

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

Tomáš Erlich

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.

Petr

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ěď.

Walwiader

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ěď.

Tomáš Erlich

Dobrý den,
je to už dlouho, co jsem psal něco v PHP a tak Vás raději pošlu dále. Zkuste kupříkladu napsat na JPW (je třeba registrace).

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

Dan

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

Element

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.

Tomáš Erlich

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.

Element
Tomáš Erlich

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.

Tomáš Erlich

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.

Předchozí příspěvek:

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

Tato stránka již není udržována. Děkuji za pochopení.