Trimiterea de mailuri

postat acum 2 ani de Stefanescu Mihai in categorie PHP

In primul rand trebuie sa setam totul corect in php.ini pentru a putea trimite mailuri. Deschide fisierul php.ini si cauta urmatoarea sectiune: [mail function]

Utilizatorii de windows trebuie sa asigure doua directive. Prima se numeste SMTP si defineste conexiunea la serverul de mail. A doua se numeste sendmail_from si defineste propria adresa de email.

Fisierul de configurare din windows ar trebuii sa arate ceva de genul:

[mail function]
; For Win32 only.
SMTP = smtp.server.net

; For win32 only
sendmail_from = [email protected]

In linux trebuie doar sa-i da-ti PHP-ului o locatie pentru aplicatia sendmail. Calea trebuie setata in directiva sendmail_path.

[mail function]
; For Win32 only.
SMTP = 

; For win32 only
sendmail_from = 

; For Unix only
sendmail_path = /usr/sbin/sendmail -t -i

Trimiterea de mailuri textPHP pune la dispozitie functia mail() pentru a trimite emailuri. Aceasta functie are nevoie de 3 parametri pentru a functiona, adresa de email la care sunt trimise mailurile, subiectul si mesajul, dar mai sunt si 2 parametri aditionali.

mail( to, subject, message, headers, parameters );

Descrierea parametrilor:

Parametru Descriere
to Obligatoriu. Specifica emailul destinatarului.
subject Obligatoriu. Specifica subiectul emailului.
message Obligatoriu. Mesajul emialului.
headers Optional. Specifica headere optionale precum Cc, Bcc, etc.
parameters Optional. Parametri optionali

Imediat ce functia mail() este apelata PHP va incerca sa trimita emailul si va returna true in caz de succes si false in caz contrar.

Pot fi specificate mai multe recipiente pe post de prim argumen, separate de virgula.

   $to = "[email protected]";
   $subject = "Subiectul";
   $message = "Mesajul.";
   $header = "From: [email protected] \r\n";
   $retval = mail ($to,$subject,$message,$header);
   if( $retval == true ) {
      echo "Mail trimis!";
   }else{
      echo "Mailul nu a putut fi trimis!";
   }

Trimiterea de emailuri HTML

Cand trimiti un mesaj folosind PHP tot continutul va fi tratat ca simplu text.  Chiar daca includeti si tag-uri HTML in acel mesaj, tot v-or fi afisate ca simplu text. Dar PHP ne pune la dispozitie o optiune ce ne permite sa trimitem mailuri cu mesaj HTML.

Cand trimitem un mail putem specifica tipul de Mime.Iata si un exemplu:

<html>
<head>
<title>Trimitere email cu HTML</title>
</head>
<body>
<?php
   $to = "[email protected]";
   $subject = "Subiectul aici";
   $message = "<b>Mesajul cu cod HTML.</b>";
   $message .= "<h1>Continuarea mesajului.</h1>";
   $header = "From:[email protected] \r\n";
   $header .= "MIME-Version: 1.0\r\n";
   $header .= "Content-type: text/html\r\n";
   $retval = mail ($to,$subject,$message,$header);
   if( $retval == true ){
      echo "Mesaj Trimis!";
   }else{
      echo "Mesaj netrimis";
   }
?>
</body>
</html>

Trimitere de emailuri cu Atasament

Pentru a trimite un email cu continut mixt trebuie sa setam header-ul Content-type la multipart/mixed. Apoi putem specifica un anumit atasament.

As putea sa va explic linie cu linie codul pe care am sa-l scriu mai jos, dar am sa va arat exemplul direct pentru ca este mai simplu sa vedeti voi cum sunt asezate toate lucrurile:

<html>
<head>
<title>Mailuri cu atasament</title>
</head>
<body>
<?php
  $to = "[email protected]";
  $subject = "Subiectul";
  $message = "Mesajul";
  # Deschidem fisierul
  $file = fopen( "/tmp/fisier.txt", "r" );
  if( $file == false )
  {
     echo "Nu pot deschide fisierul";
     exit();
  }
  # Citeste continutul si salveaza-l intr-o avriabila
  $size = filesize("/tmp/fisier.txt");
  $content = fread( $file, $size);

  # encodare informatii pentru transmitere in siguranta
  $encoded_content = chunk_split( base64_encode($content));
  
  # Obtinem un string de 32 bit folosind un md5 de time()
  $num = md5( time() );

  # Definim headere
  $header = "From:[email protected]\r\n";
  $header .= "MIME-Version: 1.0\r\n";
  $header .= "Content-Type: multipart/mixed; ";
  $header .= "boundary=$num\r\n";
  $header .= "--$num\r\n";

  # mesajul
  $header .= "Content-Type: text/plain\r\n";
  $header .= "Content-Transfer-Encoding:8bit\r\n\n";
  $header .= "$message\r\n";
  $header .= "--$num\r\n";

  # atasamentul
  $header .= "Content-Type:  multipart/mixed; ";
  $header .= "name=\"test.txt\"\r\n";
  $header .= "Content-Transfer-Encoding:base64\r\n";
  $header .= "Content-Disposition:attachment; ";
  $header .= "filename=\"test.txt\"\r\n\n";
  $header .= "$encoded_content\r\n";
  $header .= "--$num--";

  # trimitere mail
  $retval = mail ( $to, $subject, "", $header );
  if( $retval == true )   {
      echo "Mesaj trimis.";
   }else{
      echo "Mesajul nu a putut fi trimis!";
   }
?>
</body>
</html>

Avand in vedere ca aceasta este o lectie mai complicata am sa va rog sa postati orice intrebari aveti in comentarii (mai jos).

Sunt un tanar programator din Bucuresti ce lucreaza in PHP/Mysql (MySqli/PDO), Laravel, CodeIgniter, MySQL, PostgreSQL, Wordpress, HTML5/CSS3, Sass, Photoshop si multe altele.
Google+ Community Facebook Group
Acest articol a fost mutat de pe vechea platforma.
Pentru orice eroare aparuta la mutare va rog sa ma contactati!