PHP Handbuch
Zurück |  | Nach vorne

# mail

(PHP 3, PHP 4 , PHP 5)

mail -- Sende Mail

## Beschreibung

bool mail ( string to, string subject, string message [, string additional_headers [, string additional_parameters]])

mail() veschickt die Nachricht in `message` an den Empfänger in `to`. Mehrere Empfänger können angegeben werden, indem ein Komma zwischen die Adressen in `to` gesetzt wird. E-Mails mit angehängten Dateien und speziellen Inhaltstypen können mit dieser Funktion gesendet werden. Dies wird durch MIME-Kodierung ermöglicht. Für weitere Informationen siehe diesen Zend-Artikel oder die PEAR Mime-Klassen.

Die folgenden RFCS könnten auch hilfreich sein: RFC 1896, RFC 2045, RFC 2046, RFC 2047, RFC 2048 und RFC 2049.

mail() gibt `TRUE` zurück, wenn die Mail erfolgreich für den Versand akzeptiert wurde, sonst `FALSE`.

Warnung
Die Windows-Implementierung der mail()-Funktion unterscheidet sich stark von der Unix-Implemtierung. Zum einen benutzt sie keine 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. `PHP` < 4.3 unterstützte nur den `Cc:`-Header (und berücksichtigte die Groß-/Kleinschreibung). `PHP` >= 4.3 unterstützt alle genannten Header und ist berücksichtigt nicht mehr die Groß-/Kleinschreibung.

Beispiel 1. Verschicke von Mail.
    <?php
    mail("nobody@example.com", "Betreff", "Zeile 1\nZeile 2\nZeile 3");
    ?>

Wenn ein vierter String-Parameter übergeben wird, dann wird dieser an das Ende des Mail-Headers gehängt. Mehrfache Header werden durch einen Zeilenumbruch getrennt.

> Anmerkung: Sie müssen die Header mit `\r\n` trennen, auch wenn einige Unix-MTAs auch mit einem einfachen Zeilenumbruch (`\n`) korrekt arbeiten.

Beispiel 2. Verschicke Mail mit zusätzlichen Headern.
    <?php
    mail("nobody@example.com", "Betreff", $message,
         "From: webmaster@{$_SERVER['SERVER_NAME']}\r\n"
        ."Reply-To: webmaster@{$_SERVER['SERVER_NAME']}\r\n"
        ."X-Mailer: PHP/" . phpversion());
    ?>

Der Parameter `additional_parameters` kann benutzt werden, um zusätzliche Parameter an das Programm zu übergeben, das für den Mail-Versand über die Option `sendmail_path` konfiguriert wurde. Zum Beispiel kann dies genutzt werden, um die Envelope-Absenderadresse anzugeben, wenn sendmail benutzt wird (Option `-f`). Eventuell müssen Sie den Benutzer, unter dem Ihr Webserver läuft, als sendmail-Option übergeben, um zu verhindern, dass Ihrer Mail ein 'X-Warning'-Header angehängt wird, wenn Sie die Envelope-Absenderadresse auf diese Art setzen.

Beispiel 3. Verschicke Mail mit zusätzlichen Headern und einem zusätzlichen Kommandozeilen-Parameter.
    <?php
    mail("nobody@example.com", "Betreff", $message,
         "From: webmaster@{$_SERVER['SERVER_NAME']}", "-fwebmaster@{$_SERVER['SERVER_NAME']}");
    ?>

> Anmerkung: Der fünfte Parameter wurde in PHP 4.0.5 hinzugefügt. Seit PHP 4.2.3 ist dieser Parameter im safe_mode deaktiviert; mail() gibt eine Warnung aus und gibt `FALSE` zurück, wenn Sie den Parameter trotzdem verwenden.

Sie können einfache String-Zusammensetzungen verwenden, um komplexe Mails zu erstellen.

Beispiel 4. Verschicke komplexe Mail.
    <?php
    /* Empfänger */
    $to  = "Mary <mary@example.com>" . ", " ; // beachten Sie das Komma
    $to .= "Kelly <kelly@example.com>";

    /* Betreff */
    $subject = "Geburtstags-Erinnerung für August";

    /* Nachricht */
    $message = '
    <html>
    <head>
     <title>Geburtstags-Erinnerung 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>Joe</td><td>3.</td><td>August</td><td>1970</td>
     </tr>
     <tr>
      <td>Sally</td><td>17.</td><td>August</td><td>1973</td>
     </tr>
    </table>
    </body>
    </html>
    ';

    /* Um eine HTML-Mail zu senden, können Sie den den "Content-type"-Header.
       setzen */
    $headers  = "MIME-Version: 1.0\r\n";
    $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";

    /* zusätzliche Header */
    $headers .= "From: Geburtstags-Erinnerung <geburtstag@example.com>\r\n";

    $headers .= "Cc: geburtstagsarchiv@example.com\r\n";
    $headers .= "Bcc: geburtstagscheck@example.com\r\n";

    /* Verschicken der Mail */
    mail($to, $subject, $message, $headers);
    ?>

> Anmerkung: Achten Sie darauf, dass Sie keine Zeilenumbruch-Zeichen in den Parametern `to` oder `subject` verwenden, da sonst Ihre Mail eventuell nicht korrekt gesendet werden kann.

> Anmerkung: Der `to`-Parameter darf nicht in der Form "irgendwas <irgendwer@example.com>" sein, da dies von PHP nicht korrekt an den MTA übergeben werden kann.

Siehe auch imap_mail().

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