PHP Handbuch
Zurück |  | Weiter

# 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 | Weiter
ezmlm_hash | Nach oben | mailparse Functions