Home Ontwerp je site PHP HTML-mail versturen

HTML-mail versturen

Het e-mailbericht zoals wij het tot nu toe hebben opgesteld in de artikels "Een e-mailformulier maken" en "Een e-mailformulier maken gevorderd", was erg eenvoudig. Het bericht dat we versturen kunnen we echter ook gaan opmaken (de zogenaamde HTML-mail) en we kunnen ook nog een aantal extra opties gaan instellen bij het verzenden.

Om een mailbericht op te maken, moeten we het mailprogramma op de hoogte brengen dat de mail opmaak bevat. De opmaak wordt verzorgd door HTML of CSS, net zoals bij een webpagina dus. We plaatsen aan het begin van de headers van het mailbericht deze code:

<?php
    
// Content-type header instellen om HTML-mail te versturen 
    
$headers "Content-type: text/html; charset=iso-8859-1\r\n"
    
$headers .= "MIME-Version: 1.0\r\n";    
   
?>

Als we deze code niet toevoegen, zullen onze HTML- en CSS-codes gewoon worden afgedrukt i.p.v. geïnterpreteerd.


Overige mailopties

Andere opties die we nog kunnen instellen in de headers zijn:

  • het reply-adres;
  • de CC (Carbon Copy) en BCC (Blind Carbon Copy);
  • versienummer van de PHP-mailer waarmee de mail werd verzonden;
  • de prioriteit van de mail.
<?php
    $headers 
.= "Reply-To: Webmaster < Dit e-mailadres is beschermd tegen spambots. U heeft Javascript nodig om het te kunnen zien. >\r\n"// reply-adres
    
$headers .= "Cc:  Dit e-mailadres is beschermd tegen spambots. U heeft Javascript nodig om het te kunnen zien. , Dit e-mailadres is beschermd tegen spambots. U heeft Javascript nodig om het te kunnen zien. \r\n"//copy
    
$headers .= "Bcc:  Dit e-mailadres is beschermd tegen spambots. U heeft Javascript nodig om het te kunnen zien. \r\n"// blind copy
    
$headers .= "From: $naam <$email>\r\n"// de afzender van de mail
    
$headers .= "X-Mailer: PHP/" phpversion() . "\r\n";
    
$headers .= "X-Priority: 3\r\n"// 1 voor belangrijk 
    
$headers .= "Priority: Urgent\r\n";
    
$headers .= "Importance: Low\r\n"// High voor belangrijk
    
$headers .= "X-MSMail-Priority: Low\r\n"// High voor belangrijk
?>

Je ziet dat we op het einde heel veel regels hebben toegevoegd om de prioriteit van een mail te behandelen. Toch geven al deze codes dezelfde opdracht. We plaatsen ze allemaal omdat verschillende mailclients andere regels gebruiken. Door ze allemaal te plaatsen, zijn we er zeker van dat de mail correct wordt behandeld, ongeacht met welke mailclient de surfer de mail ontvangt.

Op het einde van elke regel hebben we een nieuwe regel begonnen met

\r\n
. Officieel is dit de methode om de verschillende headers van elkaar te scheiden, maar in de praktijk blijkt dat niet elke mailclient hiermee overweg kan. Dit resulteert dan meestal in het gewoon afdrukken van de headers en HTML-codes, wat zeker niet de bedoeling is!
Je kunt dit oplossen door de headers gewoon met
\n
van elkaar te scheiden, maar eerst testen blijft de boodschap!


Eindresultaat

Wie onderweg de weg is kwijtgeraakt, vindt hier het volledige script zoals wij het hebben gebouwd in de twee artikelen over het formulier maken.

<?php
$onderwerp 
"Mijn eerste formulier";
$ontvanger " Dit e-mailadres is beschermd tegen spambots. U heeft Javascript nodig om het te kunnen zien. ";
$reply htmlspecialchars($_POST['je_email']);

if(
$_POST['verzenden'])
{
    
$naam htmlspecialchars($_POST['naam']);
    
$leeftijd htmlspecialchars($_POST['leeftijd']); 
    
$bericht "<strong>Je naam: </strong>" $naam "<br /><strong>Je leeftijd: </strong>" $leeftijd;
    
    if(
strlen($naam) < 2)
    { 
     
$error .= "<p>Je hebt geen naam ingevuld.</p>";
    } 
   if(!
is_numeric($leeftijd) || strlen($leeftijd) > 3
   { 
    
$error .= "<p>Je hebt geen geldige leeftijd opgegeven.</p>";
   }
   if(
strlen($bericht) < 15)
   { 
    
$error .= "<p>Je hebt geen bericht ingevuld.</p>";
   } 

  if (isset(
$error)) 
  { 
   
// error afdrukken
   
echo "<p><strong>Je bericht is niet verzonden.</strong></p>"
   echo 
$error "<br />"
   echo 
"<p><a href=\"javascript&amp;#058;history.back()\">Probeer opnieuw</a>.<br /><br /></p>";
  } 
    
    else
    {
    
      
// Content-type header instellen om HTML-mail te versturen 
      
$headers "Content-type: text/html; charset=iso-8859-1\r\n"
      
$headers .= "MIME-Version: 1.0\r\n";    
 
      
$headers .= "Reply-To: Webmaster < Dit e-mailadres is beschermd tegen spambots. U heeft Javascript nodig om het te kunnen zien. >\r\n"// reply-adres
      
$headers .= "Cc:  Dit e-mailadres is beschermd tegen spambots. U heeft Javascript nodig om het te kunnen zien. , Dit e-mailadres is beschermd tegen spambots. U heeft Javascript nodig om het te kunnen zien. \r\n"//copy
      
$headers .= "Bcc:  Dit e-mailadres is beschermd tegen spambots. U heeft Javascript nodig om het te kunnen zien. \r\n"// blind copy
      
$headers .= "From: $naam <$reply>\r\n"// de afzender van de mail
      
$headers .= "X-Mailer: PHP/" phpversion() . "\r\n";
      
$headers .= "X-Priority: 1\r\n"// 3 voor onbelangrijk 
      
$headers .= "Priority: Urgent\r\n";
      
$headers .= "Importance: High\r\n"// Low voor onbelangrijk
      
$headers .= "X-MSMail-Priority: High\r\n"// Low voor onbelangrijk  
      
      
mail($ontvanger,$onderwerp,$bericht,$headers);
      echo 
"<p>Uw bericht is succesvol verzonden. Bedankt voor je feedback.</p>";
    }
}
else { 
?>
<form method="post" action="<?php echo($_SERVER['PHP_SELF']); ?>">
  Naam: 
  <input type="text" name="naam">
  <br />
  Leeftijd: 
  <input type="text" name="leeftijd">
  <br />
  E-mailadres: 
  <input type="text" name="je_email">
  <br />
  <input type="submit" name="verzenden">
  <br />
</form>
<?php
}
?>

Dat was het dan! Natuurlijk kun je dit script nog uitbreiden; ik denk maar aan een IP-ban, uitgebreidere validatie met reguliere expressies, gegevens, hostgegevens van de verzender meesturen,...
Hiermee kom je echter toch al een heel eind. Veel plezier ermee!


1 + 3 =
 

GOOGLE adsense