Warum ein Form-Mailer
Forms mit der Methode "mailto" gelten als unprofessionell weil
es sehr viele Browser gibt, deren eMail-Versand nicht funktioniert. Beispielsweise
surfen Sie mit Netscape und benutzen Outlook Express zum mailen -- unter Umständen
haben
Sie in Netscape gar kein Konto zum Versenden eingerichtet. Oder Sie sind im
Internet-Cafe, benutzen einen Browser wie Lynx, oder Sie sind bei einem
Freund und möchten die Antwort auf Ihr eigenes eMail-Konto. Auch möchte man
gerne dem Benutzer nach Klick auf Absenden einen Text zeigen wie "Ihre Mail wird umgehend
bearbeitet".
Was uns nichts nützt
Wie in Formulardaten übernehmen gesehen
verarbeitet PHP die übergebenen Variablen sehr komfortabel. Die einzige Ausnahme,
wo das nichts bringt,
ist die, bei der man nicht weiß wie die Variablen heißen, die übergeben werden sollen.
Das
ist hier leider hier der Fall, denn um den Form-Mailer so universell wie möglich zu
halten, sollen alle
übergebenen Variablen gemailt werden.
Wir bedienen uns also den beiden PHP-Internen Arrays die die Formulardaten speichern:
if (!empty($HTTP_POST_VARS)) {
while(list($name, $value) = each($HTTP_POST_VARS))
$message.="$name = $value\n";
}
Fragt z.b. die HTTP_POST_VARS ab. Diese werden belegt, wenn ein Formular mit der Methode
"Post"
übergeben wird. Um Kompatibilität zu erreichen und "weils nicht viel kost'" machen
wir das auch mit
den Get-Variablen (obwohl es eigentlich nicht empfehlenswert ist, irgendwelche Formulare
per
Get zu übermitteln: Diese werden dann in die URL kodiert und können z.B. in Logdateien
zu finden
sein oder im Verlaufs-Cache des Browsers).
Zur Funktion: Erst wird überprüft, ob das Array HTTP_POST_VARS leer ist ansonsten
wird, solange
es ein neues Element gibt (while (...=each)), die zwei Elemente die darin als Liste
vorliegen in
den Variablen $name und $value gepeichert. Die Nchricht wird sodann um die Zeile Name
= Wert
ergänzt.
Die Mail-Funkion
ist in Ausgabefunktionen genau beschrieben.
Mailen der Variablen
Diese Zeilen
$message=rawurldecode($message);
$message=str_replace("+", " ", $message);
mail("vetterheinz@provinz.de", "$betreff", $message, "From: $email\nReply-To: $email\nX-Mailer: PHP/" . phpversion(). "\nCC: sie@provider.de");
Bereiten die Nachricht auf den Versand vor (sollte Sie aus Get-Variablen bestehen
muss sie nämlich noch dekodiert werden, eine
dekodierung von POST-Variablen macht zumindest nichts kaputt) schickt sie an vetterheinz@proinz.de.
Eine Kopie geht an sie@provider.de;
falls sie keine Kopien versenden wollen, löschen Sie einfach den letzten Teil der
Mail-Funktion ". "\nCC: sie@provider.de"" (ohne die äußeren
Hochkommata).
die Punkte fügen wie gewohnt die Strings zusammen
(objektierientierte Programmierer: lasst euch hier nicht verarschen).
Die Variablen betreff und email sollten im Formular definiert sein und sich selbst
erklären.
Betreff kann man hidden deklarieren und mit value zuweisen, email ist die Absenderadresse.
Diese wird übrigens als reply-to benutzt; möchten Sie also auf eine solche Mail vom
Form-Mailer
im Posteingang antworten, genügt ein freundlicher Klick auf "Antworten".
Mehr Komfort
Diese Fassung des Form-Mailers gibt noch eine Variable namens thankyou als Text aus
- diese definiere
ich im Formular versteckt und da kommt dass z.B. rein: Vielen Dank für Ihr Feedback.
Ausserdem hat
der Benutzer die Möglichkeit, per Link auf die Datei backfromform.html zu springen
-- diese
muss dann im entsprechenden Verzeichnis noch existieren. Ansonsten kann man das Ding
tatsächlich
gebrauchen. Und ehe ich es vergesse: Ändern Sie die CC-Adresse (sie@provider.de)
und die Empfängeradresse (vetterheinz@provinz.de) nach Ihren Bedürfnissen.
PS: Die Absenderadresse zu ändern geht hier ganz leicht - mit entsprechender Eingabe
im Formular.
Das ist ein (vom mailserver abhängig) cooler Weg, Freunde glauben zu machen, jemand
anders,
den sie kennen, hätte ihnen die Mail geschickt.
Beispiels-HTML-Datei:
<HTML>
<HEAD>
<TITLE>Formular</TITLE>
</HEAD>
<BODY>
<form action="formmailer.php" method="post">
<input type="hidden" name="thankyou" value="Vielen Dank für Ihre Mail.">
<input type="hidden" name="betreff" value="Mail vom Form-Mailer.">
Ihre eMail-Adresse:<input name="eMail"><br>
Straße: <input name="beliebige"><br>
Ort: <input name="elemente"><br>
Nachricht: <textarea name="werdenuebermittelt"></textarea><br>
<input type="submit"><input type="reset"><br>
</form>
</BODY>
</HTML>
Beispiels-PHP-Datei:
<HTML>
<!-- Mailbearbeitung: Angabe absender in email, betreff in betreff, nachricht dass Feedback/bestellung abgeschickt wurde in thankyou
WICHTIG: Formular leitet zurück auf Seite backfromform.html, diese muss existieren und sollte die Ebene über dem Mailformular sein.
Alternativ ändern Sie bitte den Eintrag in javascript:history.back(); o.Ä.
Bitte Empfänger (vetterheinz@provinz.de) und CC-Empfänger (sie@provider.de) nach Bedarf ändern.
-->
<HEAD>
<TITLE>eMail versandt</TITLE>
</HEAD>
<BODY>
<?
$message = "";
if (!empty($HTTP_GET_VARS))
{
while(list($name, $value) = each($HTTP_GET_VARS))
$message.="$name = $value\n";
}
if (!empty($HTTP_POST_VARS))
{
while(list($name, $value) = each($HTTP_POST_VARS))
$message.="$name = $value\n";
}
$message=rawurldecode($message);
$message=str_replace("+", " ", $message);
mail("vetterheinz@provinz.de", "$betreff", $message, "From: $email\nReply-To: $email\nX-Mailer: PHP/" . phpversion(). "\nCC: sie@provider.de");
?>
<font face="Verdana, Arial, Helvetica">
<center><b><p/>
<?
echo $thankyou;
?>
<p/>
<a href="backfromform.html">Zurück</a> zur Indexseite
</font>
</b>
</center>
</BODY>
</HTML>