Start · Sprachen · PHP · Referenz · mb_send_mail

mb_send_mail

Funktion

Sendet eine E-Mail mit korrekter Multibyte-Kodierung (z. B. UTF-8) für Betreff, Empfänger und Nachrichtentext.

seit PHP 4.0.6 Kategorie: string

Signatur

mb_send_mail(string $to, string $subject, string $message, array|string $additional_headers = [], string $additional_params = ""): bool

Beschreibung

mb_send_mail() funktioniert ähnlich wie die eingebaute mail()-Funktion, kodiert jedoch Betreff, Empfänger-Adressen und den Nachrichtentext automatisch gemäß der aktuell eingestellten internen Zeichenkodierung (mb_internal_encoding()). Dadurch können E-Mails mit internationalen Zeichen (Umlaute, CJK-Zeichen usw.) zuverlässig versendet werden, ohne dass der Entwickler manuell mit mb_encode_mimeheader() o. Ä. arbeiten muss.

Die Funktion kodiert den Betreff automatisch nach RFC 2047 (MIME Encoded-Word) und setzt passende Header wie Content-Type mit dem korrekten Charset sowie Content-Transfer-Encoding. Die interne Kodierung lässt sich vorab mit mb_language() und mb_internal_encoding() konfigurieren.

Zusätzliche Header (z. B. From, CC, Reply-To) können als assoziatives Array (ab PHP 7.2) oder als CRLF-getrennter String übergeben werden. Der Parameter $additional_params ermöglicht das Setzen von MTA-spezifischen Optionen wie dem Envelope-Sender (-f user@example.com).

Diese Funktion ist besonders nützlich bei mehrsprachigen Webanwendungen, bei denen E-Mail-Inhalte in nicht-lateinischen Zeichensätzen übertragen werden müssen. Für komplexere Anwendungsfälle (HTML-Mails, Anhänge) empfiehlt sich jedoch der Einsatz einer dedizierten Bibliothek wie PHPMailer oder Symfony Mailer.

Parameter

Name Typ Default Beschreibung
$to Pflicht string Empfänger-Adresse(n) der E-Mail. Mehrere Empfänger werden durch Komma getrennt (z. B. "user1@example.com, user2@example.com"). Enthält die Adresse Multibyte-Zeichen (z. B. im Display-Namen), werden diese automatisch kodiert.
$subject Pflicht string Betreffzeile der E-Mail. Wird automatisch nach RFC 2047 MIME-kodiert, sodass auch Umlaute und andere Multibyte-Zeichen korrekt übertragen werden.
$message Pflicht string Nachrichtentext der E-Mail. Wird entsprechend der internen Zeichenkodierung und dem via mb_language() gesetzten Sprachprofil kodiert (z. B. Base64 oder Quoted-Printable). Zeilenumbrüche sollten \n sein.
$additional_headers array|string [] Zusätzliche E-Mail-Header wie From, CC, BCC oder Reply-To. Ab PHP 7.2 kann ein assoziatives Array übergeben werden (z. B. ["From" => "sender@example.com"]); alternativ ein CRLF-getrennter String. Achtung: Nicht valide Eingaben können Header-Injection ermöglichen.
$additional_params string "" Zusätzliche Kommandozeilenparameter, die an das Mail-Programm (MTA) übergeben werden, z. B. "-f sender@example.com" zum Setzen des Envelope-Senders. Nur mit vertrauenswürdigen Eingaben verwenden, da sonst Shell-Injection möglich ist.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die E-Mail erfolgreich an den MTA übergeben wurde, andernfalls false. Ein Rückgabewert von true bedeutet nicht, dass die E-Mail tatsächlich zugestellt wurde.

Beispiele

Einfache UTF-8-E-Mail mit deutschen Umlauten senden

<?php
mb_language('uni');
mb_internal_encoding('UTF-8');

$to      = 'empfaenger@example.com';
$subject = 'Bestellbestätigung – Vielen Dank!';
$message = "Hallo Müller,\n\nIhre Bestellung wurde erfolgreich aufgenommen.\n\nMit freundlichen Grüßen\nIhr Shop-Team";

$headers = [
    'From'     => 'shop@example.com',
    'Reply-To' => 'support@example.com',
    'X-Mailer' => 'PHP/' . PHP_VERSION,
];

$result = mb_send_mail($to, $subject, $message, $headers);

if ($result) {
    echo 'E-Mail erfolgreich übergeben.';
} else {
    echo 'Fehler beim Senden der E-Mail.';
}
E-Mail erfolgreich übergeben.

Mehrsprachige E-Mail mit japanischen Zeichen

<?php
// Japanisches Sprachprofil aktivieren
mb_language('ja');
mb_internal_encoding('UTF-8');

$to      = 'tanaka@example.jp';
$subject = 'ご注文の確認';
$message = "田中様、\n\nご注文ありがとうございます。\n\n敬具";

$headers = [
    'From' => 'info@example.jp',
];

$result = mb_send_mail($to, $subject, $message, $headers);
var_dump($result);
bool(true)

// Wichtig · Fallstricke

Sicherheitshinweise:

  • Header-Injection: Benutzereingaben in $to, $subject oder $additional_headers müssen unbedingt validiert werden. Zeichen wie \r und \n in diesen Feldern können es Angreifern ermöglichen, eigene Header einzuschleusen und damit z. B. Spam-Mails zu versenden. Eingaben sollten mit filter_var() und FILTER_VALIDATE_EMAIL geprüft werden.
  • Shell-Injection via $additional_params: Dieser Parameter wird direkt an die Kommandozeile übergeben. Niemals ungeprüfte Benutzerdaten hier einsetzen. PHP aktiviert den safe_mode-Schutz (in alten Versionen) bzw. prüft den Benutzer in neueren Versionen – dennoch ist Vorsicht geboten.
  • Die Funktion setzt voraus, dass ein MTA auf dem Server konfiguriert ist (z. B. Sendmail, Postfix). In Docker- oder Cloud-Umgebungen ohne MTA schlägt der Aufruf fehl.
  • Für produktive Anwendungen mit komplexeren Anforderungen (HTML-Mails, Anhänge, SMTP-Auth) sind Bibliotheken wie PHPMailer oder Symfony Mailer empfehlenswert.