Jak poslat e-mail prostřednictvím PHP - část 1.

 2012-03-13 00:00:00
 Dmitry Burobin

Dnes napíšeme skript pro odesílaní e-mailů prostřednictvím PHP.

Série článků:
1) Jak poslat e-mail prostřednictvím PHP - část 1.
2) Posíláme obrázek a soubor prostřednictvím PHP - část 2.

První příklad - bez ověření vstupních dat.

<?php
// jestli tlačítko Odeslat bylo zmačknuté
if($_POST['submit']) {
        
// $_POST['title'] data z inputu Předmět, trim() - odstraňuje zbytečné 
        //mezery a řádky, htmlspecialchars() - převádí specifické symboly 
        //do HTML entit, proto, aby jsme zabránili nejjednoduššímu pokusu o 
        //hacknutí stránky a substr($_POST['title'], 0, 1000) - 
        //omezujeme text do 1000 znaků.  
        //Pro proměnnou $_POST['mess'] uděláme to samé.
        
$title substr(htmlspecialchars(trim($_POST['title'])), 01000);
        
$mess =  substr(htmlspecialchars(trim($_POST['mess'])), 01000000);
        
// $to - příjemce emailu
        
$to 'test@test.cz';
        
// $from - odesílatel
        
$from='test@test.cz';
        
// funkce, která odesíla email.
        
if(mail($to$title$mess'From:'.$from)){
        echo 
'Děkujeme! Váš dopis byl odeslán.';
    }else{
        echo 
'Dopis nebyl odeslán';
    }

?>
<form action="" method=post>

<
p>Nějaký text <p>
              <
div align="center">
              
Předmět:<br />
              <
input type="text" name="title" size="40"><br />
              
Zprava:<br />
              <
textarea name="mess" rows="10" cols="40"></textarea>
              <
br />
              <
input type="submit" value="Odeslat" name="submit"></div>
</
form

Jestli to zkoušite na lokálním serveru, tak bych Vám doporučoval nainstalovat Test Mail Server Tool, tento program je určen pro přijem emailů, konfigurace je velice jednoduchá, akorat ověřte zda je nastavený 25 port a ukažte cestu, kam se mají ukládát data. Pak otevřeme soubor php.ini a v bloce [mail function] ověřte, zda máte tyto řádky:

SMTP = localhost
smtp_port = 25
Když nejsou nebo jsou zakomentováný, tak je doplňte nebo aktivujte. Teď už by Vám všechno mělo fungovat.

Druhý příklad - s ověřením vstupních dat.

<?php
function show_form()
{
?>
<form action="" method=post>
<
div align="center">
              <
br />Jméno:*<br />
              <
input type="text" name="name" size="40">
              <
br />Telefonní číslo:<br />
              <
input type="text" name="tel" size="40">
              <
br />E-mail:*<br />
              <
input type="text" name="email" size="40">
              <
br />Téma:<br />
              <
input type="text" name="title" size="40">
              <
br />Text zprávy:*<br />
              <
textarea rows="10" name="mess" cols="30"></textarea>
              <
br /><input type="submit" value="Odeslat" name="submit">
</
div>
</
form>
Musíte vyplňit.
<?php
}

function 
complete_mail() {
        
// $_POST['title'] data z inputu Předmět, trim() - odstraňuje zbytečné 
        //mezery a řádky, htmlspecialchars() - převádí specifické symboly 
        //do HTML entit, proto, aby jsme zabránili nejjednoduššímu pokusu o 
        //hacknutí stránky a substr($_POST['title'], 0, 1000) - 
        //omezujeme text do 1000 znaků. Pro proměnné 
        //$_POST['mess'], $_POST['name'], $_POST['tel'], $_POST['email'] 
        //uděláme to samé.

        
$title =  substr(htmlspecialchars(trim($_POST['title'])), 01000);
        
$message =  substr(htmlspecialchars(trim($_POST['mess'])), 01000000);
        
$name =  substr(htmlspecialchars(trim($_POST['name'])), 030);
        
$tel =  substr(htmlspecialchars(trim($_POST['tel'])), 030);
        
$email =  substr(htmlspecialchars(trim($_POST['email'])), 050);
        
// Jestli není vyplněno pole "Jméno" - chyba 0
        
if (empty($name))
             
output_err(0);
        
// Jestli pole email vyplněno špatně - chyba 1
        
if(!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i"$email))
             
output_err(1);
        
// Jestli není vyplněno pole "Text zprávy" - chyba 2
        
if(empty($message))
             
output_err(2);
        
// vytvoříme náš e-mail
        
$mess '
Jméno odesílatele: '
.$name.' <br>
Telefonní číslo: '
.$tel.' <br>
Email: '
.$email.' <br>
'
.$message;
        
// $to - příjemce emailu
        
$to $email;
        
// $from - odesílatel
        
$headers  'MIME-Version: 1.0' "\r\n";
        
$headers .= 'Content-type: text/html; charset=utf-8' "\r\n";
        
$headers .= 'From: Koding.cz<info@koding.cz>'"\r\n";
        
        if(
mail($to$title$mess$headers)){
        echo 
'Děkujeme! Váš dopis byl odeslán.';
    }else{
        echo 
'Dopis nebyl odeslán';
    }
}

function 
output_err($num)
{
    
$err[0] = 'Chyba! Zadejte jméno.';
    
$err[1] = 'Chyba! Špatný e-mail.';
    
$err[2] = 'Chyba! Zadejte zprávu.';
    echo 
'<p>'.$err[$num].'</p>';
    
show_form();
    exit();
}

if (!empty(
$_POST['submit'])) complete_mail();
else 
show_form();
?>

Ukázka

Děkuji za pozornost, v dalším článku Vám ještě ukážu, jak se da poslat nejenom textovou zprávu, ale obrázek či soubor.

Systém Orphus
Napište komentář.
Celkem komenrářů(421)
Ugzdycle - 2017-04-11  05:38:12
 http://buy-tadalafil-ph.com/ cialis generic cheap viagra
Iredycle - 2017-04-10  07:37:22
 http://buy-tadalafil-ph.com/ cialis generic no prescription
Jofiexy - 2017-04-10  07:07:21
 http://buy-tadalafil-ph.com/ walgreens cialis online pharmacy
Kpydycle - 2017-04-09  20:02:02
 g http://tadalafil-ph24.com/ canadian pharmacy cialis generic
Ahwat - 2017-04-09  15:33:41
 http://tadalafil-ph24.com/ order cialis online canada cheap cialis
mix viagra and alcohol cialis pills
[url=http://tadalafil-ph24.com/]website link[/url] five
Abkfitly - 2017-04-08  13:06:14
 http://canadian-ph.life/ reputable canadian online pharmacies http://vardenafil-on.com/ generic cheap levitra online http://tadalafil-on.com/ buy generic cialis university of kentucky
Sswat - 2017-04-08  12:45:19
 buy kamagra it's buy levitra online earth buy doxycycline online degree generic cialis prices have
Jghdycle - 2017-04-08  10:08:33
 [url=http://clomi-phene.life/#cheap-viagra-tablets]clomid[/url] frightened
Cypdycle - 2017-04-07  07:38:12
 [url=http://predni-sone.review]prednisone high[/url] ears [url=http://buy-levothyroxine.review]levothyroxine[/url] trees [url=http://buy-finasteride.review]buy finasteride[/url] foot
Gdfiexy - 2017-04-06  20:58:27
 against http://buy-cialis-online.review/ buy tadalafil online drugs [url=http://buy-cialis-online.review/#buy-cialis-online-canada-canadian-pharmacy]canada cialis generic[/url] whatever
Mowat - 2017-04-06  08:13:45
 caught http://buy-cialis-online.review/ generic daily cialis pills cialis generic which is better lost
Tyffitly - 2017-04-06  06:39:47
 burst buy-cialis-online.review generic cialis 20mg office depot mexico sale cialis pharmacy sir
Oiedycle - 2017-04-05  10:07:24
 [url=http://sildenafilfst.com/]over counter viagra alte
ative[/url] sildenafil generic viagra
Hnfiexy - 2017-04-05  06:45:49
 taking without ed cialis pills cialis pills online story
Ufedycle - 2017-04-04  19:16:38
 [url=http://tadalafilfst.com/]soft uk cialis generic[/url] zyban beograd cialis pills
Clwat - 2017-04-04  18:01:04
 he http://tadalafilfst.com/ buy generic cialis soft
Mofiexy - 2017-04-04  10:07:36
 good site: cheap cialis , viagra , levitra without a doctor prescription
Xfjfitly - 2017-04-04  07:48:23
 good site: http://buytadalafilmh.com , http://buysildenafilmh.com , http://buyvardenafilmh.com
Sewat - 2017-04-03  18:16:34
 ehelpu sildenafil
what is generic viagra and viagra and the taliban cialis pills
qleftr [url=http://buysildenafilmh.com]viagra how long to take effect[/url]
Lpfiexy - 2017-04-03  16:31:04
 good site: cialis tadalafil , http://buysildenafilmh.com , levitra without a doctor prescription
*v komentářich nesmíte používat sprostá slova a odkazy!!!Děkuji za pochopeni.