Kontaktformular erstellen
Tutorials | letzte Änderung am 20. April '10 um 16:25 Uhr
Mail() ist tot, wir verwenden eine Mailerklasse
In diesem Tutorial werden wir eine fertige Mailerklasse - den Swift Mailer in der Version 4.0.6 - verwenden, um uns Arbeit beim Versenden der Email zu sparen.
Die aktuellste Version der Klasse kann unter http://swiftmailer.org/download heruntergeladen werden.
Das Versenden von HTML-Mails und das Hinzufügen von Anhängen ist alles bereits über die Mailerklasse möglich.
Weitere Informationen sind auf der zugehörigen Website und unter http://www.robo47.net/text/38-Mail-ist-tot-es-lebe-mail zu finden.
Das Formular
Zunächst einmal benötigen wir ein kleines Formular, über das der User per Email zu uns Kontakt aufnehmen kann. Dazu legen wir einige Formularfelder wie Betreff, Email, Name und Nachricht an.
<form method="post" action="">
<p>
<label for="l_subject">Betreff</label><br />
<input type="text" name="subject" id="l_subject" />
</p>
<p>
<label for="l_email">Email</label><br />
<input type="text" name="email" id="l_email" />
</p>
<p>
<label for="l_name">Name</label><br />
<input type="text" name="name" id="l_name" />
</p>
<p>
<label for="l_message">Nachricht</label><br />
<textarea name="message" id="l_message" rows="6" cols="40"></textarea>
</p>
<p>
<input type="submit" value="Absenden" />
</p>
</form>
Diese Daten werden auf Knopfdruck an unsere PHP-Datei gesendet, die wir dann sofort an unsere Emailadresse per Email weiterleiten wollen.
Die Verarbeitung
Um nicht bei jedem Seitenaufruf direkt eine leere Mail zu versenden, prüfen wir zunächst auf einige Bedingungen, die erfüllt sein müssen, damit überhaupt eine Mail über unser Formular rausgehen darf.
<?php
$msg = '';
if ($_POST) {
if (isset($_POST['subject'], $_POST['email'], $_POST['name'], $_POST['message'])) {
if (trim($_POST['subject']) != '' && trim($_POST['name']) != '' && trim($_POST['message']) != '') {
if (emailIsValid($_POST['email'])) {
// ...
}
}
}
}
In der zweiten Zeile initialisieren wir eine Variable, in der wir eine Nachricht ablegen können, die den User informiert, ob seine Email versendet wurde oder ob eventuell Fehler aufgetreten sind.
Gleich danach prüfen wir, ob alle notwendigen Formulardaten übermittelt wurden und ob der User überhaupt etwas eingegeben hat. Die Emailadresse wird zusätzlich in der Funktion
emailIsValid()
auf ein bestimmtes Muster überprüft:
<?php
function emailIsValid($email) {
$regex = '/^[0-9a-zäöü\.\-]+\@[0-9a-zäöü\.\-]+\.[a-z]{2,6}$/i';
if (preg_match($regex, $email)) {
return true;
}
return false;
}
Es gibt zahlreiche reguläre Ausdrücke, die versuchen, Emails auf Gültigkeit zu untersuchen. Einen wirklich perfekten Ausdruck gibt es nicht! Es steht also jedem frei, seinen eigenen Ausdruck in der verwendeten Funktion einzusetzen wenn er glaubt, dass dieser exakter prüft, ohne dabei bestimmte Adressmuster auszuschließen.
Sind alle Bedingungen erfüllt, können wir bereits die Mailerklasse einbinden und damit beginnen, die Email mit Inhalt zu füllen und zu versenden.
Das fertige Script
Wie Mails mit Hilfe des Swift Mailers versendet werden, ist ausreichend durch die Dokumentation zur Mailerklasse dokumentiert, daher werde ich darauf nicht näher eingehen.
Lediglich der Addressat - deine Emailadresse - ist noch in folgender Zeile anzupassen:
define('MAIL_TO', 'mail@example.com');
Das komplette Script - samt Formular - sieht am Ende so aus:
<?php
header("Content-Type: text/html; charset=utf-8");
define('MAIL_TO', 'mail@example.com');
function emailIsValid($email) {
$regex = '/^[0-9a-zäöü\.\-]+\@[0-9a-zäöü\.\-]+\.[a-z]{2,6}$/i';
if (preg_match($regex, $email)) {
return true;
}
return false;
}
$msg = '';
if ($_POST) {
if (isset($_POST['subject'], $_POST['email'], $_POST['name'], $_POST['message'])) {
if (trim($_POST['subject']) != '' && trim($_POST['name']) != '' && trim($_POST['message']) != '') {
if (emailIsValid($_POST['email'])) {
require_once './Swift-4.0.6/lib/swift_required.php';
try {
// create an object for our message
$message = Swift_Message::newInstance($_POST['subject']);
// set the sender
$message->setFrom($_POST['email']);
// message
$message->setBody(
'
<html>
<head><title>' . $_POST['subject'] . '</title></head>
<body>
<p>' . $_POST['message'] . '</p>
<p>von ' . $_POST['name'] . '</p>
</body>
</html>', 'text/html');
$transport = Swift_MailTransport::newInstance();
$mailer = Swift_Mailer::newInstance($transport);
// set the addressee
$message->setTo(MAIL_TO);
// send the message
$mailer->send($message);
$msg = 'Die Nachricht wurde erfolgreich versendet';
} catch (Swift_Message_MimeException $e) {
$msg = 'Beim Senden der Nachricht ist ein Fehler aufgetreten: ' .
$e->getMessage();
}
}
else {
$msg = 'Die Mailadresse ist nicht valide.';
}
}
else {
$msg = 'Bitte füllen Sie alle Felder aus.';
}
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Mein Kontaktformular</title>
</head>
<body>
<?php
if ($msg != '') {
?>
<p>
<strong>Hinweis:</strong> <?php echo $msg; ?>
</p>
<?php
}
?>
<form method="post" action="">
<p>
<label for="l_subject">Betreff</label><br />
<input type="text" name="subject" id="l_subject" />
</p>
<p>
<label for="l_email">Email</label><br />
<input type="text" name="email" id="l_email" />
</p>
<p>
<label for="l_name">Name</label><br />
<input type="text" name="name" id="l_name" />
</p>
<p>
<label for="l_message">Nachricht</label><br />
<textarea name="message" id="l_message" rows="6" cols="40"></textarea>
</p>
<p>
<input type="submit" value="Absenden" />
</p>
</form>
</body>
</html>