E-Mail versenden
Die mail() Funktion von PHP benötigt mindestens die drei Parameter für die Empfängeradresse, den Betreff und die Nachricht und einen Header mit der Absenderadresse. Zusätzliches kann optional im Header mitgeschickt werden.
E-Mail Parameter
mail()
In der php.ini wird additional_parameters im safe_mode deaktiviert!
mail($to,$subject,$message,$headers);
Zu den Parametern von PHP mail() gibt es einiges zu beachten, auch wenn sie nicht
alle aus einem Formular stammen:
Auch wenn PHP auf mail() TRUE zurückgibt, ist das E-Mail noch nicht wirklich beim Empfänger angekommen, bloss die Funktion wurde ausgeführt. Aber die Empfängeradresse wird z.B. nicht auf deren Existenz geprüft.
-
Die ersten 3 Parameter, ein Header und From (im $headers) sind Pflicht, zusätzliche Headers und Parameters sind optional.
$headers = "From: $lehrlingmail";
alternativ:$headers = "From: \"".$lehrlingmail."\"\n"; - Es können mehrere Empfänger durch Kommas getrennt aneinandergehängt werden!
$to = "somebody@example.com, somebodyelse@example.com"; - Die Adressen können mit vorangestelltem Namen kenntlich gemacht werden.
$from = "Somebody <somebody@example.com>";
Die $to-Adressen sollten unter Windows keinen Namen voranstellen! - Die Message soll keine längeren Zeilen als 70 Zeichen haben.
Jede Zeile in der Message muss durch einen Zeilenumbruch \n getrennt werden.wordwrap($message,70);ist die Funktion um dies zu erzielen -
Die zusätzlichen Headers sind durch Zeilenumbrüche von einander zu trennen:
$headers = "From: webmaster@example.com" . "\r\n" .
"CC: somebodyelse@example.com". "\r\n" ."BCC: somebodyelse@example.com";
Das CRLF-Zeichen (\r\n) funktioniert nicht immer, dann kann das LF-Zeichen (\n) als neue Zeile versucht werden.
Jede Headerzeile ist auf 76 Zeichen (codierte Charakter) beschränkt! -
Die Message kann auch eine ganze HTML-Seite mit Bildern und Tabellen sein.
Für eine HTML-E-Mail muss der 'Content-type'-Header gesetzt werden:
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; - Die Useriputs von Formularfelder müssen unbedingt geprüft werden,
sonst wird das Formular als Spammversender missbraucht.
Insbesondere sollten $to, CC und BCC maximal je 1 @-Zeichen aufweisen und keine Kommas (,) und keine Semikolons (;) enthalten, damit sie nicht hunderte von E-Mails versenden können.
Eine Spamschutz Rechnung kann bloss supperdoofe Robots abhalten.
Auch die Umwandlung mit htmlspecialchars() ist sehr empfohlen!
Weitere Sicherheitsmassnahmen beachten!
Es gibt auch PHP-Filter, welche zum Prüfen von Formularen benutzt werden: PHP Filter
Der ganze E-Mail Code
Folgender Beispielcode funktioniert, aber hier wird er lediglich dargestellt - nicht ausgeführt.
<?php
// User Variablen von Formular holen und entschärfen
$sender = htmlspecialchars($_POST["sender"], ENT_QUOTES);
$sender = strtr($sender,"@","W"); // beispiel ersetzen von @
$sendermail = htmlspecialchars($_POST["sendermail"], ENT_QUOTES);
$sendermail = strtr($sendermail,"\,;","XYZ"); // Beispiel: ersetzen von Backslash, Komma und Semikolon
$reason = htmlspecialchars($_POST["reason"], ENT_QUOTES);
$reason = wordwrap($reason,70); // je Zeile weniger als 70 Anschläge
$spamschutz = (int)$_POST["spamschutz"]; // in Zahl konvertieren
// eigene Variablen definieren
$recipient = "info@biefer.com";
$betreff = "Kontaktaufnahme via Formular";
$inhalt = "Sehr geehrter Herr Biefer "."\n";
$inhalt .= "Bitte nehmen Sie mit $sender Kontakt auf: $sendermail"."\n";
$inhalt .= "Es geht um: "."\n".$reason."\n";
$lehrlingmail = "lehrling@biefer.com";
$headers = "From: \"".$lehrlingmail."\"\n";
if($spamschutz == 16) {
// E-Mail Funktion
$versand = mail($recipient, $betreff, $inhalt, $headers);
}
// Bestaetigung
if ($versand == "TRUE") {
echo "<p><strong>Ihre E-Mail wurde versandt.</strong><br />Drucken Sie dieses Memo aus.</p>";
echo "<p>Empfänger: $recipient <br />Betreff: $betreff<br />Absender Name: $sender
<br />Absender E-Mail: $sendermail</p><p>Inhalt:<br />".nl2br($inhalt)."</p>";
} else {
echo "<p><strong>Ihre E-Mail konnte nicht versandt werden ...</strong>;
}
?>