So versenden Sie E-Mails mit der PHP mail()-Funktion

So versenden Sie E-Mails mit der PHP mail()-Funktion

Die PHP mail()-Funktion ist eine integrierte Möglichkeit, E-Mails direkt aus einem PHP-Skript zu versenden.

Entwickler verwenden sie häufig für einfache Aufgaben, etwa um Nachrichten aus Kontaktformularen zu versenden oder die E-Mail-Funktion zu testen.

Die Funktion mail() ist zwar einfach zu verwenden, hat jedoch Einschränkungen. Daher eignet sie sich eher zum Lernen und für kleine Projekte als für den produktiven Einsatz.

Was ist die PHP mail()-Funktion?

Mit der PHP mail()-Funktion kann Ihre Website E-Mails versenden, ohne dass dafür eine externe Bibliothek erforderlich ist. Dazu greift die Funktion auf den Mail-Transfer-Agent (MTA) des Webservers zurück, der die Zustellung übernimmt.

Die Funktion benötigt mindestens drei Parameter: die E-Mail-Adresse des Empfängers, den Betreff und den Nachrichtentext. Zusätzlich können Sie optionale Header wie From, Reply-To und den Content-Type angeben.

Damit gehört mail() zu den schnellsten Möglichkeiten, den E-Mail-Versand mit PHP zu testen. Moderne Features wie Authentifizierung, Anhänge oder zuverlässiger Spam-Schutz werden jedoch nicht unterstützt.

PHPMailer vs. mail(): Vor- und Nachteile

mail() ist einfach zu verwenden, bietet aber nur begrenzte Möglichkeiten. PHPMailer hingegen ist eine beliebte Bibliothek mit fortgeschrittenen E-Mail-Funktionen wie SMTP-Unterstützung, Authentifizierung, Anhängen und HTML-Formatierung.

Vorteile von mail():

  • In PHP integriert
  • Einfach zu verwenden
  • Keine Installation erforderlich

Nachteile von mail():

  • Begrenzter Funktionsumfang
  • Höheres Risiko, als Spam eingestuft zu werden
  • Schwierigere Fehlerdiagnose

Wenn Sie fortgeschrittene Funktionen benötigen, sollten Sie PHPMailer verwenden.

So versenden Sie E-Mails mit der PHP mail()-Funktion

Die grundlegende Syntax der Funktion mail() sieht folgendermaßen aus:

mail(to, subject, message, headers, parameters);
  • to – die E-Mail-Adresse des Empfängers.
  • subject – der Betreff der E-Mail.
  • message – der Inhalt der E-Mail.
  • headers – zusätzliche Angaben wie From, Reply-To oder Content-Type.
  • parameters – optionale zusätzliche Parameter, die an das sendmail-Programm des Systems übergeben werden.

Komponenten von PHP mail() verstehen

Damit eine E-Mail erfolgreich versendet werden kann, müssen Sie die Header korrekt konfigurieren:

<?php
$to = "example@domain.com";
$subject = "Test email from PHP";
$message = "This is a plain text email example.";
$headers = "From: hello@domain.com" . "\r\n" .
"Reply-To: hello@domain.com" . "\r\n" .
"X-Mailer: PHP/" . phpversion();
mail($to, $subject, $message, $headers);
?>
  • From – legt die Absenderadresse fest.
  • Reply-To – legt fest, an welche Adresse Antworten gesendet werden.
  • X-Mailer – gibt an, dass die Nachricht mit PHP versendet wurde.

Testdatei für PHP mail() erstellen

Um mail() zu testen, erstellen Sie im Stammverzeichnis Ihres Servers eine Datei namens testmail.php:

<?php
$to = "youraddress@example.com";
$subject = "PHP Mail Test";
$message = "This is a test message sent from PHP.";
$headers = "From: webmaster@yourdomain.com";
if (mail($to, $subject, $message, $headers)) {
    echo "Email sent successfully.";
} else {
    echo "Email delivery failed.";
}
?>

Laden Sie die Datei auf den Server hoch und rufen Sie sie in Ihrem Browser auf. Bei korrekter Konfiguration sollten Sie eine E-Mail erhalten.

HTML-E-Mails mit PHP versenden

Standardmäßig versendet mail() E-Mails als reinen Text. Um HTML-E-Mails zu versenden, fügen Sie einen Content-Type-Header hinzu:

<?php

$to = "example@domain.com";

$subject = "HTML Email Example";

$message = "
<html>
<head>
<title>HTML Email</title>
</head>
<body>
<h1>Hello!</h1>
<p>This is an <strong>HTML</strong> email sent with PHP.</p>
</body>
</html>
";

$headers = "MIME-Version: 1.0" . "\r\n";

$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";

$headers .= "From: hello@domain.com" . "\r\n";

mail($to, $subject, $message, $headers);

?>

So können Sie Text formatieren, Überschriften hinzufügen und die Nachricht mit HTML gestalten.

Wie kann ich E-Mail-Adressen vor dem Versand mit PHP mail() oder PHPMailer validieren?

Durch die Validierung von E-Mail-Adressen können Sie Fehler vermeiden und Probleme mit Spam reduzieren. PHP stellt dafür filter_var() bereit:

<?php

$email = "user@example.com";

if (filter_var($email, FILTER_VALIDATE_EMAIL)) {

    echo "Valid email address.";

} else {

    echo "Invalid email address.";

}

?>

So stellen Sie sicher, dass Sie E-Mails nur an Adressen mit einem gültigen Format versenden.

Häufige Fehler bei PHP mail() beheben

Die Funktion mail() kann aus verschiedenen Gründen fehlschlagen. Zu den häufigsten Problemen gehören:

  • E-Mails landen im Spam-Ordner
  • Verbindung zum SMTP-Host kann nicht hergestellt werden
  • Gmail konnte nicht bestätigen, dass domain.tld diese Nachricht gesendet hat
  • Absenderadresse abgelehnt: gehört nicht zum Benutzer
  • E-Mails werden überhaupt nicht zugestellt, ohne dass ein Fehler ausgegeben wird
  • Fehlerhafte Header oder Formatierung

E-Mails landen im Spam-Ordner

E-Mails landen häufig im Spam-Ordner, wenn Header unvollständig sind oder der Inhalt verdächtig erscheint. So reduzieren Sie das Risiko:

  • Verwenden Sie eine gültige From-Adresse, die zu Ihrer Domain gehört.
  • Vermeiden Sie Begriffe, die von Spamfiltern als verdächtig eingestuft werden.
  • Richten Sie DNS-Einträge wie SPF und DKIM zur Domain-Verifizierung ein.

Beispiel für das Hinzufügen von From- und Reply-To-Headern:

$headers = "From: no-reply@yourdomain.com\r\n";

$headers .= "Reply-To: support@yourdomain.com\r\n";

$headers .= "X-Mailer: PHP/" . phpversion();

Verbindung zum SMTP-Host kann nicht hergestellt werden

Dieser Fehler weist auf ein Problem mit der Serverkonfiguration hin. Mögliche Ursachen sind:

  • Der Hosting-Anbieter blockiert ausgehende E-Mails.
  • PHP mail() ist in der php.ini deaktiviert.
  • Firewall-Regeln verhindern die Verbindung.

Beispiel für die Überprüfung der mail()-Funktion in php.ini:

; Make sure this is not disabled

disable_functions =

Gmail konnte nicht bestätigen, dass domain.tld diese Nachricht gesendet hat

Gmail und andere Anbieter verlangen eine Domain-Authentifizierung, damit Ihre Nachrichten als vertrauenswürdig eingestuft werden. Um das Problem zu beheben, stellen Sie sicher, dass die folgenden TXT-Einträge in Ihren DNS-Einträgen vorhanden sind:

  • Fügen Sie einen SPF-Eintrag hinzu, um autorisierte Mailserver festzulegen.
  • Aktivieren Sie DKIM, um die Integrität der Nachrichten zu verifizieren.
  • Richten Sie DMARC ein, um sich vor Spoofing zu schützen.

Beispiel für einen SPF-Eintrag:

v=spf1 include:_spf.[domain.tld] ~all

Beispiel für einen DKIM-Eintrag:

Name: [selector]._domainkey.[domain.tld]

Content: v=DKIM1; p=[series of numbers]

Beispiel für einen DMARC-Eintrag:

Name: _dmarc.[domain.tld]

Content: v=DMARC1; p=none; rua=mailto:[yourname]@[domain.tld]

Absenderadresse abgelehnt: Sie gehört nicht zum Benutzer

Dieser Fehler tritt auf, wenn die E-Mail-Adresse des Absenders nicht zu Ihrer Domain gehört. So beheben Sie das Problem:

  • Verwenden Sie immer eine gültige Absenderadresse wie no-reply@yourdomain.com.
  • Verzichten Sie im From-Feld auf Adressen von Drittanbietern wie Gmail oder Yahoo.

Beispiel für eine korrekte Absenderadresse:

$headers = "From: no-reply@yourdomain.com\r\n";

E-Mails werden überhaupt nicht zugestellt, ohne dass ein Fehler ausgegeben wird

Manchmal gibt die Funktion mail() keinen Fehler aus, obwohl die Nachrichten nicht ankommen. Häufige Ursachen sind:

  • Der Hosting-Anbieter blockiert PHP mail() aus Sicherheitsgründen.
  • Der Server ist falsch konfiguriert.
  • Aus den Protokollen geht hervor, dass Nachrichten verworfen werden.

Beispiel für die Protokollierung der Ergebnisse von mail() in PHP:

if (mail($to, $subject, $message, $headers)) {

error_log("Mail sent successfully to $to");

} else {

error_log("Mail failed to send to $to");

}

Fehlerhafte Header oder Formatierung

Fehlerhafte Header können dazu führen, dass E-Mails nicht zugestellt oder beschädigt dargestellt werden. Beachten Sie daher Folgendes:

  • Verwenden Sie für Zeilenumbrüche in Headern immer \r\n.
  • Fügen Sie beim Versand von HTML-E-Mails MIME-Version und Content-Type hinzu.
  • Achten Sie auf eine einheitliche Formatierung, um Parsing-Fehler zu vermeiden.

Beispiel für korrekte HTML-Header:

$headers = "MIME-Version: 1.0\r\n";

$headers .= "Content-type: text/html; charset=UTF-8\r\n";

Wann Sie statt mail() eine andere Lösung verwenden sollten

Die PHP mail()-Funktion eignet sich zum Lernen, zur Fehlerdiagnose und zum Versenden einfacher Testnachrichten. Für den produktiven Einsatz ist sie jedoch nicht die beste Wahl. Wenn Sie eine zuverlässige Zustellung, Anhänge oder SMTP-Authentifizierung benötigen, verwenden Sie eine leistungsfähigere Bibliothek wie PHPMailer oder binden Sie einen externen E-Mail-Dienst an.

Alle Tutorial-Inhalte auf dieser Website unterliegen Hostingers strengen redaktionellen Standards und Normen.

Author
Erstellt von

Vera P.

Vera ist eine erfahrene Lokalisierungs-Spezialistin bei Hostinger und optimiert erfolgreich Inhalte für globale Zielgruppen. Dank ihres umfassenden SEO-Wissens sorgt sie dafür, dass Hostingers Webhosting-Dienste für ein breites Publikum sichtbar, zugänglich und attraktiv sind. Mit Kreativität und Präzision überwindet sie Sprachbarrieren in ihren Projekten und trägt so dazu bei, Hostingers Reichweite zu vergrößern und Kunden weltweit ein nahtloses Erlebnis zu bieten.

Was unsere Kunden sagen

Comments

0 responses

Write a respond

Please fill the required fields.Bitte akzeptieren Sie die Datenschutzklausel.Bitte füllen Sie die erforderlichen Felder aus und akzeptieren Sie die Datenschutzklausel.

Thank you! Your comment has been successfully submitted. It will be approved within the next 24 hours.