Function.mail
Aus PHP-Wiki
mail — E-Mails senden
Inhaltsverzeichnis |
Beschreibung
bool mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]] )
Sends an email.
Parameter-Liste
- to
- Empfänger (einer oder mehrere) der E-Mail. Das Format dieses String muss nach [RFC 2822] erfolgen. Beispiele: benutzer@example.com benutzer@example.com, benutzer2@example.com Name <benutzer@example.com> Name <benutzer@example.com>, Name2 <benutzer2@example.com>
- subject
- Betreff der E-Mail. Achtung Der Betreff darf keine Zeilenumbrüche enthalten, da sonst die E-Mail nicht korrekt gesendet werden kann. message Die zu sendende Nachricht. Jede Zeile muss durch ein LF-Zeichen (\n) getrennt werden. Außerdem sollten die Zeilen nicht mehr als 70 Zeichen enthalten. Achtung (Nur unter Windows:) Falls PHP direkt mit einem SMTP-Server kommuniziert und wenn ein Punkt (.) an einem Zeilenanfang steht, wird dieser Punkt entfernt. Um das zu verhindern, können Sie diese Punkte durch zwei Punkte ersetzen. <?php
$text = str_replace("\n.", "\n..", $text);
?> additional_headers (optional) String, der am Ende des E-Mail-Headers eingefügt werden soll. Dies kann benutzt werden, um zusätzliche Header-Angaben wie From, Cc oder Bcc anzugeben. Falls mehrere solcher zusätzlichen Header-Angaben angegeben werden soll, müssen diese durch ein CRLF-Zeichen (\r\n) getrennt werden. Hinweis: Um eine E-Mail zu senden, muss die E-Mail einen From-Header enthalten. Dies kann entweder durch Setzen eines additional_headers -Parameters oder durch Setzen eines Standardwertes in der php.ini geschehen.
Falls dies nicht geschieht, wird eine Fehlermeldung ähnlich wie Warning: mail(): "sendmail_from" not set in php.ini or custom "From:" header missing ausgegeben. Der From: Header setzt unter Windows auch den Return-Path: Header.
Hinweis: Wenn E-Mails nicht ankommen, versuchen Sie bitte, nur das LF-Zeichen (\n) zu verwenden. Einige UNIX-MTAs (mail transfer agents) ersetzen leider LF durch CRLF (\r\n) automatisch (wodurch das CR-Zeichen verdoppelt wird, wenn CRLF verwendet wird). Dies sollte aber nur in Ausnahmefällen geschehen, da es gegen [RFC 2822] verstößt.
additional_parameters (optional) Der additional_parameters -Parameter kann benutzt werden, um zusätzliche Parameter an das Programm zu senden, das für den E-Mail-Versand konfiguriert ist (wenn die sendmail_path-Einstellung verwendet wird). Zum Beispiel kann hiermit die "envelope sender address" (Absenderadresse) gesetzt werden, wenn sendmail mit der -f-Option benutzt wird. Der Benutzer, unter dem der Webserver läuft, sollte als bekannter Benutzer in der sendmail-Konfiguration eingetragen werden, um zu verhindern, dass ein 'X-Warning'-Header zu den E-Mails hingefügt wird, wenn mit dieser Methode (-f) der Absender gesetzt wird. Sendmail-Benutzer finden diese Datei hier: /etc/mail/trusted-users.
Rückgabewerte
Gibt TRUE zurück, wenn die E-Mail erfolgreich für den Versand akzeptiert wurde, sonst FALSE. Dass eine E-Mail für den Versand akzeptiert wurde, bedeutet nicht, dass sie auch wirklich den gewünschten Empfänger erreichen wird.
ChangeLog
Version
Beschreibung
4.3.0 (nur Windows)
Alle benutzerdefinierten Header wie (From, Cc, Bcc und Date) werden
unterstützt und sind nicht abhängig von der Groß-/Kleinschreibung.
(Da benutzerdefinierte Header nicht direkt vom MTA interpretiert
werden, sondern von PHP geparst werden, unterstützte PHP < 4.3
nur den Cc-Header, das dort auch abhängig von der
Groß-/Kleinschreibung war.
4.2.3
Der additional_parameters
-Parameter ist
im safe_mode deaktiviert;
mail() gibt eine Warnung aus und gibt
FALSE zurück, wenn Sie den Parameter trotzdem verwenden.
4.0.5
Der additional_parameters
-Parameter wurde
hinzugefügt.
Beispiele
#1 Verschicken einer E
Hier werden einfache Header gesetzt, um dem MUA (mail user agent, z.B. ein E-Mail-Programm) die From- und die Reply-To-Adressen mitzuteilen:
<?php $empfaenger = 'niemand@example.com'; $betreff = 'Der Betreff'; $nachricht = 'Hallo'; $header = 'From: webmaster@example.com' . "\r\n" . 'Reply-To: webmaster@example.com' . "\r\n" . 'X-Mailer: PHP/' . phpversion(); mail($empfaenger, $betreff, $nachricht, $header); ?>
#3 Verschicken einer E
Auch HTML-E-Mails können mit mail() versendet werden.
<?php // mehrere Empfänger $empfaenger = 'max@example.com' . ', '; // beachten Sie das Komma $empfaenger .= 'moritz@example.com'; // Betreff $betreff = 'Geburtstags-Erinnerungen für August'; // Nachricht $nachricht = ' Geburtstags-Erinnerungen für August Hier sind die Geburtstage im August: PersonTagMonatJahr Julia3.August1970 Tom17.August1973 '; // für HTML-E-Mails muss der 'Content-type'-Header gesetzt werden $header = 'MIME-Version: 1.0' . "\r\n"; $header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; // zusätzliche Header $header .= 'To: Simone , Andreas ' . "\r\n"; $header .= 'From: Geburtstags-Erinnerungen ' . "\r\n"; $header .= 'Cc: geburtstagsarchiv@example.com' . "\r\n"; $header .= 'Bcc: geburtstagscheck@example.com' . "\r\n"; // verschicke die E-Mail mail($empfaenger, $betreff, $nachricht, $header); ?>
Hinweis: Wenn Sie HTML- oder komplexe E-Mails versenden möchten, sollten Sie das PEAR-Paket » PEAR::Mail_Mime verwenden.
Anmerkungen
Hinweis:
Die Windows-Implementierung vonmail() unterscheidet
sich auf mehrere Arten von der Unix-Implementation. Zum einen benutzt
sie kein lokales Programm, um die Mails zu erstellen, sondern sie
arbeitet auf Sockets. D.h., dass ein MTA benötigt
wird, der auf einem Netzwerk-Socket lauscht (entweder auf dem eigenen
oder einem entfernten Rechner).
Zum anderen, werden die benutzerdefinierten Header wie
From:,
Cc:,
Bcc: und
Date:
nicht direkt durch den
MTA interpretiert, sondern zunächst
von PHP geparst.
Daher sollte der to
-Parameter keine Adresse
der Form "Irgendwas <irgendwer@example.com>" enthalten,
da dies von PHP möglicherweise nicht korrekt an den MTA übergeben
werden kann.
Hinweis:
E-Mails mit Anhängen und speziellen Inhalten (wie HTML) können mit dieser
Funktion versendet werden. Dazu wird MIME-Encoding verwendet. Weitere
Informationen dazu finden Sie in einem [[http://www.zend.com/zend/spotlight/sendmimeemailpart1|»
Zend-Artikel]] und in den
[PEAR-Mime-Klassen].
Hinweis:
Bitte beachten Sie, dass die mail()-Funktion nicht
dazu geeignet ist, große Mengen von E-Mails in einer Schleife zu senden,
da die Funktion für jede E-Mail ein SMTP-Socket öffnet und schließt,
was nicht sehr effizient ist.
Um große Mengen von E-Mails zu senden, schauen Sie sich bitte die
PEAR-Pakete [PEAR::Mail] und
[PEAR::Mail_Queue] an.
Hinweis:
Die folgenden RFCs könnten nützlich für Sie sein:
[RFC 1896],
[RFC 2045],
[RFC 2046],
[RFC 2047],
[RFC 2048],
[RFC 2049] und
[RFC 2822].