|
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&#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!
|