Forum und email

mail

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

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

Example#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($nachricht70);

// Send
mail('[email protected]''Mein Betreff'$nachricht);
?>

Example#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 
'[email protected]';
$betreff 'Der Betreff';
$nachricht 'Hallo';
$header 'From: [email protected]"\r\n" .
    
'Reply-To: [email protected]"\r\n" .
    
'X-Mailer: PHP/' phpversion();

mail($empfaenger$betreff$nachricht$header);
?>

Example#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
('[email protected]''Betreff''Nachricht'null,
   
'[email protected]');
?>

Example#4 Verschicken einer HTML-E-Mail.

Auch HTML-E-Mails können mit mail() versendet werden.

<?php
// mehrere Empfänger
$empfaenger  '[email protected]', '// beachten Sie das Komma
$empfaenger .= '[email protected]';

// 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 <[email protected]>, Andreas <[email protected]>' "\r\n";
$header .= 'From: Geburtstags-Erinnerungen <[email protected]>' "\r\n";
$header .= 'Cc: [email protected]"\r\n";
$header .= 'Bcc: [email protected]"\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 <[email protected]>" 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 » 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.