PHP Handbuch
Zurück |  | Weiter

# mail

(PHP 3, PHP 4, PHP 5)

mail -- E-Mails senden

## 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.

  > Anmerkung: 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.

  > Anmerkung: 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

Beispiel 1. Verschicken einer E-Mail.

mail() wird benutzt, um eine einfache E-Mail zu versenden:

`<?php // Die Nachricht $nachricht = "Zeile 1\Zeile 2\Zeile 3"; // Falls eine Zeile der Nachricht mehr als 70 Zeichen enthälten könnte, // sollte wordwrap() benutzt werden $nachricht = wordwrap($nachricht, 70); // Send mail('benutzer@example.com', 'Mein Betreff', $nachricht); ?>`

Beispiel 2. Verschicken einer E-Mail mit zusätzlichen Headern.

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); ?>`

Beispiel 3. Verschicken einer E-Mail mit einem zusätzlichen Kommandozeilen-Parameter.

Der additional_parameters-Parameter kann benutzt werden, um zusätzliche Parameter an das über sendmail_path konfigurierte Programm zu senden.

`<?php mail('niemand@example.com', 'Betreff', 'Nachricht', null, '-fwebmaster@example.com'); ?>`

Beispiel 4. Verschicken einer HTML-E-Mail.

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 = '
<html>
<head>
<title>Geburtstags-Erinnerungen für August</title>
</head>
<body>
<p>Hier sind die Geburtstage im August:</p>
<table>
<tr>
<th>Person</th><th>Tag</th><th>Monat</th><th>Jahr</th>
</tr>
<tr>
<td>Julia</td><td>3.</td><td>August</td><td>1970</td>
</tr>
<tr>
<td>Tom</td><td>17.</td><td>August</td><td>1973</td>
</tr>
</table>
</body>
</html>
';
// 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 <simone@example.com>, Andreas <andreas@example.com>' . "\r\n";
$header .= 'From: Geburtstags-Erinnerungen <geburtstag@example.com>' . "\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);
?>`

> Anmerkung: Wenn Sie HTML- oder komplexe E-Mails versenden möchten, sollten Sie das PEAR-Paket PEAR::Mail verwenden.

## Anmerkungen

> Anmerkung: 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.

> Anmerkung: 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 Zend-Artikel und in den PEAR-Mime-Klassen.

> Anmerkung: 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.

> Anmerkung: 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.

## Siehe auch

imap_mail()
PEAR::Mail
PEAR::Mail_Mime

Zurück | Zum Anfang | Weiter
ezmlm_hash | Nach oben | mailparse Functions