Inhaltsverzeichnis
Anleitung für Entwickler
Kochbuch
Versionsinformation: Die Funktionen send_mail und form_mail, sowie die Klasse form_mailer wurden in Version 2.8 umbenannt in sendMail, formMail und formMailer, um der Namenskonvention des Frameworks zu entsprechen. Die Funktion sendMail ist ab Version 2.8 eine statische Funktion der Klasse Mailer. Die Funktion formMail ist ab Version 2.8 eine statische Funktion der Klasse FormMailer.
YANA bietet die Funktion Mailer::mail() zum Versand von Mails, welche Reihe von Sicherheitsvorkehrungen implementiert, welche vor verschiedenen Arten von Header-Injection schützen.
Die Funktion „Mailer::mail“ ist eine gegen Missbrauch und „Header-Injection“ abgesicherte Variante der nativen PHP-Funktion „mail“. Anders als „mail“ werden alle Eingabedaten geprüft und auch nicht alle Header-Informationen, welche „mail“ prinzipiell gestattet sind erlaubt.
Es wird „true“ zurückgegeben, wenn die Mail versandt werden konnte, „false“ sonst. Der Wert „true“ bedeutet jedoch nicht, dass die Mail erfolgreich zugestellt wurde. Er bedeutet lediglich, dass die Eingabedaten im Sinne dieser Funktion syntaktisch korrekt waren.
Die Funktion erzeugt im Header der Mail die zusätzlichen Einträge „x-yana-php-header-protection“ und „x-yana-php-spam-protection“.
Wenn Sie eine Mail empfangen, die über YANA versendet wurde, können Sie im Header der Mail die entsprechenden Einträge prüfen, um zu sehen ob das Framework im Nachrichtentext Unregelmäßigkeiten entdeckt hat.
Aus Sicherheitsgründen gelten folgende Einschränkungen.
Empfänger: $recipient
Der Parameter muss eine
gültige Mailadresse sein gemäß des
regulären
Ausdrucks
(Perl-Syntax)
/^[äöüß\w\d-_\.]{1,}\@[äöüß\w\d-_\.]{2,}\.[\w\d-_\.]{2,}$/i
Betreff: $subject
Alle Sonderzeichen außer
„()äÄüÜöÖß[]“,
alle Tags
sowie alle Zeilenumbrüche werden still (ohne Warnung)
entfernt.
Bei einer Länge von mehr als 128 Zeichen werden alle
nachfolgenden Zeichen still entfernt.
Nachrichtentext: ($text)
Alle '@'-Zeichen werden still durch die
Zeichenkette „[at]“ ersetzt. Bei Textnachrichten
erfolgt ein
automatischer Zeilenumbruch nach spätestens 70 Zeichen. Bei
HTML-Nachrichten werden einige potentiell gefährliche Tags
still entfernt (Blacklist-Ansatz).
Header: $header
Dieser Parameter ist ein assoziatives
Datenfeld. Es darf beliebige X-Header-Daten enthalten, sowie einige
unkritische Header-Informationen (Whitelist-Ansatz).
Die Liste der von Header akzeptierten Parameter lautet:
Parameter | Typ | Default | Beschreibung |
---|---|---|---|
from |
|
n/a |
Eine gültige Mailadresse |
return-path |
|
n/a |
Eine gültige Mailadresse |
cc |
mixed |
n/a |
Entweder eine gültige Mailadresse oder ein numerisches Datenfeld mit mehreren Mailadressen. An alle angegebenen Adressen wird eine Kopie der Nachricht versandt. Anders als bei „bcc“ ist die Liste der Empfänger jedoch für alle Empfänger sichtbar. |
content-type |
string |
text/plain; |
Bestimmt den MIME-Type der Nachricht. Nur MIME-Type und Charset sind als Eingaben erlaubt. Andere Werte werden ignoriert. |
mime-version |
float |
1.0 |
Angabe muss entsprechend folgendes regulären Ausdrucks erfolgen (Perl-Syntax): /^\d\.\d$/ |
content-transfer-encoding |
string |
n/a |
Angabe muss entsprechend folgendes regulären Ausdrucks erfolgen (Perl-Syntax): /^\d{,2}bit$/i |
gültige Werte für Parameter header Funktion Mailer::mail
Die Verwendung von „BCC“ ist aus Sicherheitsgründen nicht gestattet.
<?php $recipient = "meineMail@domain.tld"; $subject = "Benachrichtigung"; $text = "Du hast einen neuen Eintrag!\nSchau mal wieder vorbei."; $header = array("cc" => "andereMail@domain.tld"); $test = Mailer::mail($recipient, $subject, $text, $header); if ($test === true) { print "Versand erfolgreich"; } else if ($test === false) { print "Versand nicht erfolgreich"; } ?>
Eine versandte Mail könnte dann wie folgt aussehen:<?php $recipient = "meineMail@domain.tld"; $subject = "Benachrichtigung"; $mailer = new Mailer("skins/mein_skin/beispiel.mail"); $mailer->subject = $subject; $mailer->sender = $ARGS["mail"]; $mailer->insert("NAME", $ARGS["name"]); $mailer->insert("NACHRICHT", $ARGS["nachricht"]); $mailer->insert("IP", $_SERVER["REMOTE_ADDR"]); $test = $mailer->send($recipient); if ($test === true) { print "Versand erfolgreich"; } else if ($test === false) { print "Versand nicht erfolgreich"; } ?>
Anmerkung: vor dem Versand der E-Mail prüft die Funktion $mailer->send() die Eingabedaten automatisch auf Versuche von Header-Injection und säubert alle Eingaben. Es kann jedoch absolut nichts schaden, wenn Sie die Syntax der Eingabedaten trotzdem auch in Ihrem Skript noch einmal überprüfen bevor Sie die Funktion aufrufen.
Eine versandte Mail könnte dann wie folgt aussehen:<?php $recipient = "meineMail@domain.tld"; $subject = "Benachrichtigung"; $headline = "Inhalte des Kontaktformulars:\n\n"; $footline = "\n\nYANA formmailer at ".$_SERVER['SERVER_NAME']; $formMailer = new Mailer("skins/mein_skin/beispiel.mail"); $formMailer->subject = $subject; $formMailer->content = $formulardaten; $formMailer->headline = $headline; $formMailer->footline = $footline; $test = $formMailer->send($recipient); if ($test === true) { print "Versand erfolgreich"; } else if ($test === false) { print "Versand nicht erfolgreich"; } ?>
yana framework by:Thomas Meyer, www.yanaframework.net