Posíláme obrázek a soubor prostřednictvím PHP - část 2.

 2012-04-04 00:00:00
 Dmitry Burobin
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.

Toto už je trochu složitější, ale taky zajímavější příklad. Dnes Vám ukážu, jak se dá poslat nejen dopis, ale i obrázek či soubor. Taky uděláme z dopisu html šablonu, t.z., že dostaneme nástroj, pomocí kterého budeme moci generovat jakékoliv potřebné dopisy.

Pro zpracování dopisů jsem použíl zdroje, které jsem našel na Internetu před nějakou dobou, proto bohužel nemůžu uvést původní zdroj třídy, kterou Vám teď ukážu. Zde je odkaz: class.phpmailer.php. Na některých hostingech pro správnou úpravu obrázků je třeba do složky se skriptem přidat soubor .htaccess s následujícím obsahem:

<IfModule mod_charset.c
CharsetRecodeMultipartForms off 
</IfModule>

Jak vlastně použíjeme tuto třídu:
<?php
function show_form() 

?>
<form action="" method=post enctype="multipart/form-data"
<
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 />Zpráva:*<br /> 
              <
textarea rows="10" name="mess" cols="30"></textarea
              <
br />Soubor:<br /> 
              <
input name="attachfile" type="file" size="28"
              <
br />Obrázek:<br /> 
              <
input name="attachimage" type="file" size="28"
              <
br /><br /><input type="submit" value="Odeslat" name="submit"
</
div
</
form
Musíte vyplňit.
<?php 


function 
complete_mail() { 
        
// $_POST['title'] data z inputu Přemě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é. 
    
$_POST['title'] =  substr(htmlspecialchars(trim($_POST['title'])), 01000); 
        
$_POST['mess'] =  substr(htmlspecialchars(trim($_POST['mess'])), 01000000); 
        
$_POST['name'] =  substr(htmlspecialchars(trim($_POST['name'])), 030); 
        
$_POST['tel'] =  substr(htmlspecialchars(trim($_POST['tel'])), 030); 
        
$_POST['email'] =  substr(htmlspecialchars(trim($_POST['email'])), 050); 
        
// Jestli není vyplněno pole "Jméno" - chyba 0 
        
if (empty($_POST['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"$_POST['email'])) 
             
output_err(1); 
        
// Jestli není vyplněno pole "Zpráva" - chyba 2
        
if(empty($_POST['mess'])) 
             
output_err(2); 
        
// Všiměte si, teď můžeme udělat hezký dopis pomocí html značek 
        
$mess 
<strong>Jméno odesílatele:</strong>'
.$_POST['name'].'<br /> 
<strong>Telefonní číslo:</strong>'
.$_POST['tel'].'<br /> 
<strong>E-mail:</strong>'
.$_POST['email'].'<br /> 
'
.$_POST['mess']; 

        
// zahrnujeme soubor s třídou pro odesílani emailů 
        
require 'class.phpmailer.php'

        
$mail = new PHPMailer(); 
        
$mail->From 'test@test.cz';      // email odesílatele 
        
$mail->FromName 'www.koding.cz';   // jméno odesílatele 
        
$mail->AddAddress('to@seznam.cz''Jméno'); // příjemce - email, jméno 
        
$mail->IsHTML(true);        // formát dopisu HTML 
        
$mail->Subject $_POST['title'];  // Předmět 

        // Jestli byl přidán soubor, pak ho přiložíme k emailu  
        
if(isset($_FILES['attachfile'])) { 
                 if(
$_FILES['attachfile']['error'] == 0){ 
                    
$mail->AddAttachment($_FILES['attachfile']['tmp_name'], $_FILES['attachfile']['name']); 
                 } 
        } 
        
// Jestli obrázek, pak ho přiložíme v podobě obrázku k emailu  
        
if(isset($_FILES['attachimage'])) { 
                 if(
$_FILES['attachimage']['error'] == 0){ 
                    if (!
$mail->AddEmbeddedImage($_FILES['attachimage']['tmp_name'], 'my-attach''image.gif''base64'$_FILES['attachimage']['type'])) 
                         die (
$mail->ErrorInfo); 
                    
$mess .= 'Máme tady náš obrázek:<br /><img src="cid:my-attach" border=0><br />ukázal jsem Vám jak se dá přiložit obrázek, teď už jenom potřebujete vložit obrázek do správného místa ve zprávě.'
                 } 
        } 
        
$mail->Body $mess

        
// posílame email 
        
if (!$mail->Send()) die ('Mailer Error: '.$mail->ErrorInfo); 
        echo 
'Děkuji! Váš dopis 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();  
?>

Děkuji za pozornost, těšte se na další články.

Systém Orphus
Napište komentář.
Celkem komenrářů(0)