>> Inhaltsverzeichnis >> Anleitung für Entwickler

E-Mails versenden

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.

Allgemeines zum Versand von Mails

Das Framework bietet die Funktion Mailer::mail() zum Versand von Mails. Diese Funktion implementiert eine Reihe von Sicherheitsvorkehrungen, zum Schutz vor verschiedenen Arten von Header-Injection.

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.

bool Mailer::mail(string $recipient, string $subject, string $text [, array $header ] )

Aus Sicherheitsgründen gelten folgende Einschränkungen.

Die Liste der von Header akzeptierten Parameter lautet:

Parameter Typ Default Beschreibung

from

mail

n/a

Eine gültige Mailadresse

return-path

mail

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;
charset="8859-1"

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 Belegungen für den Parameter $header der Funktion Mailer::mail()

Die Verwendung von "BCC" ist aus Sicherheitsgründen nicht gestattet.

Wie sende ich einen Text als Mail?

<?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";
}
?>

Wie sende ich eine Mail auf Basis eines Templates?

Das Template "beispiel.mail" könnte wie folgt aussehen:

Hallo [%$NAME%]!

Jemand hat dir eine Nachricht hinterlassen, sie lautet:

[%$NACHRICHT%]

IP des Besuchers: [%$IP%]

Dies ist der Quelltext zum Versenden der Mail:
<?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";
}
?>
Eine versandte Mail könnte dann wie folgt aussehen:

Hallo Thomas!

Jemand hat dir eine Nachricht hinterlassen, sie lautet:

Hallo Welt

IP des Besuchers: 127.0.0.1

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.

Wie versende ich Daten aus einem Formular als Mail?

Dies ist der Quelltext zum Versenden der Mail:
<?php 
$formMailer = new FormMailer();
// Betreff
$formMailer->subject "Benachrichtigung";
// Kopf- und Fusszeile
$formMailer->headline "Inhalte des Kontaktformulars:\n\n"
$formMailer->footline "\n\nYANA formmailer at ".$_SERVER['SERVER_NAME'];
// Formularinhalt
$formMailer->content $_POST;

$test $formMailer->send("meineMail@domain.tld");

if ($test === true) {
    print "Versand erfolgreich";
} else if ($test === false) {
    print "Versand nicht erfolgreich";
}
?>
Eine versandte Mail könnte dann wie folgt aussehen:

Inhalte des Kontaktformulars:

==========================================
  Benachrichtigung
==========================================

    name:      Walter
    alter:     35
    betreff:   Neueintrag
    dringend:  [x]
    nachricht: Bitte Passwort senden!

==========================================
Datum: 11.08.2006 10:06:41
IP: 127.0.0.1

YANA formmailer at foo.server.tld

Autor: Thomas Meyer, www.yanaframework.net