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ářů(386)
Gzfiexy - 2017-03-29  18:17:50
 good site http://lasix-rx.click , http://ccc01.bid , http://buykamagrapharm.bid , http://buycialispharm.bid , http://buylevitrapharm.bid
Gtvdycle - 2017-03-29  15:44:28
 good site: http://canpharm24.net , http://levcanpharm.net , http://tadalcanpharm.net , http://viacanpharm.net
Sztdycle - 2017-03-29  13:14:17
 good site: http://canpharm24.net , http://levcanpharm.net , http://tadalcanpharm.net , http://viacanpharm.net
Ipsfitly - 2017-03-29  11:55:58
 nice site [url=http://canpharm24.net]online pharmacy no prescription needed[/url] , [url=http://levcanpharm.net]cheap Levitra[/url] , [url=http://tadalcanpharm.net]buy cialis online[/url] , [url=http://viacanpharm.net]how to buy viagra[/url]
Blpdycle - 2017-03-29  10:35:54
 good site: http://canpharm24.net , http://levcanpharm.net , http://tadalcanpharm.net , http://viacanpharm.net
Zebdycle - 2017-03-28  16:33:45
 good site: http://canpharm24.net , http://levcanpharm.net , http://tadalcanpharm.net , http://viacanpharm.net
Qyjvar - 2017-03-28  09:57:57
 aanxiousm cialis online cheapest cialis generic
Ujevar - 2017-03-28  07:03:52
 dwhomr http://cgenrx.com buy cialis pill
Krovar - 2017-03-28  01:19:36
 twhiteo http://cgenrx.com cialis generic vs brand
Uscvar - 2017-03-27  16:24:30
 dgentlemenc cialis order daily cialis pills online
Ydfvar - 2017-03-27  10:03:02
 vacquaintanceb http://sildph24.com
viagra original pfizer
bseatf [url=http://sildph24.com]can you buy viagra over the counter[/url]
Nycef - 2017-03-26  17:00:07
 Good site: http://tadalph24.com ;; http://sildph24.com
Mqcef - 2017-03-24  13:42:44
 doncex http://levited.com buy levitra without prescription
Dfcef - 2017-03-24  07:18:32
 rcannotc http://levited.com levitra online pharmacy discount
Txvvar - 2017-03-24  01:03:34
 iburstd buy viagra levitra online generic levitra suppliers
Jupvar - 2017-03-23  20:34:30
 vthat'su generic levitra 20mg buy levitra ottawa
Vxkvar - 2017-03-23  16:35:52
 jlargem buy levitra online buy levitra without prescription
Gewat - 2017-03-23  10:39:43
 wperfectlyg [url=http://levited.com]order levitra without doctor[/url] wnoblek
Yhcef - 2017-03-23  09:39:12
 jaunti http://levited.com shelf life levitra online pharmacy
Yxlvar - 2017-03-23  06:35:15
 hahc forum generic levitra order usa levitra online
*v komentářich nesmíte používat sprostá slova a odkazy!!!Děkuji za pochopeni.