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

โšก Intelligente Zusammenfassung

PHP mail ist die integrierte Funktion, mit der E-Mails direkt aus einem PHP-Skript รผber die SMTP-Einstellungen des Servers versendet werden kรถnnen. Diese Anleitung behandelt die Syntax und die Parameter von mail(), die Konfiguration von SMTP in der php.ini, die Bereinigung von Benutzereingaben mit filter_var, den Versand sicherer E-Mails und die Verwendung von PHP.Mailer fรผr zuverlรคssige Lieferung.

  • ๐Ÿ“ง Was die Funktion mail() bewirkt: Die Funktion mail() versendet eine E-Mail aus einem Skript heraus und nimmt dabei Empfรคnger, Betreff, Nachricht und optionale Header entgegen.
  • ๐Ÿ“จ SMTP-Transport: PHP Mail verwendet SMTP, dessen Host, Port und Authentifizierung in der Konfigurationsdatei php.ini festgelegt werden.
  • ๐Ÿ“‹ CC und BCC: Optionale Header fรผgen Empfรคnger fรผr eine Kopie (Carbon Copy) und eine Blindkopie (BCC) hinzu, wobei die BCC fรผr die anderen Empfรคnger verborgen bleibt.
  • ๐Ÿ›ก๏ธ Eingabe desinfizieren: filter_var mit FILTER_SANITIZE_EMAIL und FILTER_VALIDATE_EMAIL blockiert die Header-Injection aus Kontaktformular-Eingaben.
  • ๐Ÿ”’ und geschรผtzt Mail: Durch die Verschlรผsselung der Verbindung mit SSL oder TLS wird der Nachrichteninhalt vor dem Lesen wรคhrend der รœbertragung geschรผtzt.
  • ๐Ÿงฐ Verwenden Sie PHPMailer: PHPMailer fรผgt SMTP-Authentifizierung, Anhรคnge und HTML-E-Mails hinzu und ist damit zuverlรคssiger als die reine Mail-Funktion.
  • ๐Ÿค– KI-Assistent: KI-Tools kรถnnen PHP konfigurierenMailer mit SMTP und schlagen Lรถsungen vor, die verhindern, dass Ihre E-Mails im Spam-Ordner landen.

PHP Mail

Was ist PHP-Mail?

PHP mail ist die in PHP integrierte Funktion, die zum Versenden von E-Mails aus PHP-Skripten verwendet wird.

Die Mail-Funktion akzeptiert die folgenden Parameter:

  • E-Mail-Adresse
  • Betreff
  • Nachricht
  • E-Mail-Adressen in CC oder BCC

Warum und wann man PHP-Mail verwenden sollte

Die E-Mail-Funktion ist in vielen Situationen nรผtzlich:

  • Es handelt sich um eine kostengรผnstige Methode, Benutzer รผber wichtige Ereignisse zu informieren.
  • Ermรถglichen Sie Benutzern die Kontaktaufnahme mit Ihnen per E-Mail, indem Sie auf der Website ein Kontaktformular bereitstellen, das den bereitgestellten Inhalt per E-Mail sendet.
  • Entwickler kรถnnen es nutzen, um Systemfehler per E-Mail zu erhalten.
  • Sie kรถnnen es verwenden, um Ihren Newsletter-Abonnenten E-Mails zu senden.
  • Sie kรถnnen es verwenden, um Benutzern, die ihr Passwort vergessen haben, Links zum Zurรผcksetzen des Passworts zu senden.
  • Sie kรถnnen es verwenden, um Aktivierungs- und Bestรคtigungslinks per E-Mail zu versenden. Dies ist hilfreich bei der Registrierung von Benutzern und der รœberprรผfung ihrer E-Mail-Adressen.

Senden von E-Mails mit PHP

Die PHP-Funktion mail hat folgende grundlegende Syntax.

<?php
mail($to_email_address,$subject,$message,[$headers],[$parameters]);
?>

HIER,

  • โ€ž$to_email_addressโ€œ ist die E-Mail-Adresse des Mailempfรคngers
  • โ€ž$subjectโ€œ ist der Betreff der E-Mail
  • โ€ž$messageโ€œ ist die zu sendende Nachricht.
  • โ€œ[$headers]โ€ ist optional; es kann verwendet werden, um Informationen wie CC und BCC einzuschlieรŸen.
    • CC ist die Abkรผrzung fรผr Carbon Copy (Kopie). Sie wird verwendet, wenn man eine Kopie an eine interessierte Person senden mรถchte, z. B. kann eine Beschwerde-E-Mail an ein Unternehmen auch als Kopie an die Beschwerdestelle weitergeleitet werden.
    • BCC ist die Abkรผrzung fรผr Blindkopie. Es ist รคhnlich wie CC, aber die im BCC-Feld aufgefรผhrten E-Mail-Adressen werden den anderen Empfรคngern nicht angezeigt.

Einfacher Mail Transmission Protokoll (SMTP)

PHP Mail verwendet die einfache Mail Transmission Protokoll (SMTP) zum Senden von E-Mails.

Auf einem gehosteten Server wรคren die SMTP-Einstellungen bereits konfiguriert.

Die SMTP-Mail-Einstellungen kรถnnen in der Datei โ€žphp.iniโ€œ im PHP-Installationsordner konfiguriert werden.

Um die SMTP-Einstellungen auf Ihrem lokalen Rechner zu konfigurieren (vorausgesetzt, Sie verwenden XAMPP), WindowsSuchen Sie die Datei โ€žphp.iniโ€œ im Verzeichnis โ€žC:\xampp\phpโ€œ.

  • ร–ffnen Sie die Datei mit Notepad oder einem beliebigen Texteditor. In diesem Beispiel verwenden wir Notepad. Klicken Sie auf das Menรผ โ€žBearbeitenโ€œ.

Einfacher Mail Transmission Protokoll

  • Klicken Sie auf das Menรผ โ€žSuchenโ€ฆโ€œ.

Einfacher Mail Transmission Protokoll

  • Der Dialog โ€žSuchenโ€œ wird angezeigt

Einfacher Mail Transmission Protokoll

  • Klicken Sie auf die Schaltflรคche โ€žNรคchstes suchenโ€œ.

Einfacher Mail Transmission Protokoll

Suchen Sie die Eintrรคge unter [mail function]. Die Standardzeilen sehen normalerweise so aus:

  • ; SMTP = lokaler Host
  • ; smtp_port = 25

Entfernen Sie die Semikolons vor SMTP und smtp_port und legen Sie SMTP auf Ihren Wert fest. SMTP-Server und den Port fรผr Ihren SMTP-Port. Ihre Einstellungen sollten wie folgt aussehen:

  • SMTP = smtp.example.com
  • smtp_port = 25

Hinweis: Die SMTP-Einstellungen erhalten Sie von Ihrem Webhosting-Anbieter. Falls der Server eine Authentifizierung erfordert, fรผgen Sie die folgenden Zeilen hinzu:

  • auth_username = example_username@example.com
  • auth_password = example_password

Speichern Sie die neuen ร„nderungen und starten Sie das Programm neu. Apache Server.

PHP Mail Beispiel

Schauen wir uns nun ein Beispiel an, das eine einfache E-Mail versendet.

<?php
$to_email = 'name@example.com';
$subject = 'Testing PHP Mail';
$message = 'This mail is sent using the PHP mail function';
$headers = 'From: noreply@example.com';
mail($to_email,$subject,$message,$headers);
?>

Ausgang:

Einfacher Mail Transmission Protokoll

Hinweis: Das obige Beispiel verwendet nur die vier Pflichtfelder. Ersetzen Sie die fiktive E-Mail-Adresse durch eine echte E-Mail-Adresse.

Bereinigen von E-Mail-Benutzereingaben

Das obige Beispiel verwendet der Einfachheit halber fest codierte Werte im Quellcode fรผr die E-Mail-Adresse und andere Details.

Nehmen wir an, Sie mรผssen ein Kontaktformular erstellen, in dem die Benutzer die Details ausfรผllen und es dann absenden.

  • Benutzer kรถnnen versehentlich oder absichtlich Code in die Header einfรผgen, was zum Versenden von Spam-Mails fรผhren kann.
  • Um Ihr System vor solchen Angriffen zu schรผtzen, kรถnnen Sie eine benutzerdefinierte Funktion erstellen, die die Werte vor dem Senden der E-Mail bereinigt und validiert.

Wir erstellen eine benutzerdefinierte Funktion, die die E-Mail-Adresse mithilfe der integrierten Funktion `filter_var` validiert und bereinigt. Die Funktion `filter_var` dient der Bereinigung und Validierung von Benutzereingaben.

Es hat die folgende grundlegende Syntax.

<?php
filter_var($field, SANITIZATION_TYPE);
?>

HIER,

  • โ€žfilter_var(โ€ฆ)โ€œ ist die Validierungs- und Bereinigungsfunktion
  • โ€ž$fieldโ€œ ist der Wert des zu filternden Feldes.
  • โ€žSANITIZATION_TYPEโ€œ ist die Art der Bereinigung, die am Feld durchgefรผhrt werden soll, z. B.:
    • FILTER_VALIDATE_EMAIL โ€“ Gibt โ€žtrueโ€œ fรผr gรผltige E-Mail-Adressen und โ€žfalseโ€œ fรผr ungรผltige E-Mail-Adressen zurรผck.
    • FILTER_SANITIZE_EMAIL โ€“ Entfernt ungรผltige Zeichen aus E-Mail-Adressen, sodass eine Adresse mit รผberflรผssigen Zeichen auf info@domain.com reduziert wird.
    • FILTER_SANITIZE_URL โ€“ entfernt ungรผltige Zeichen aus URLs, wodurch eine saubere Adresse wie z. B. https://www.example.com entsteht.
    • FILTER_SANITIZE_STRING โ€“ Entfernt Tags aus Zeichenkettenwerten, sodass aus โ€žam boldโ€œ โ€ž am boldโ€œ wird. Beachten Sie, dass dieser Filter in PHP 8.1 veraltet ist; verwenden Sie stattdessen htmlspecialchars().

Der unten stehende Code verwendet eine benutzerdefinierte Funktion zum Versenden sicherer E-Mails.

<?php
function sanitize_my_email($field) {
$field = filter_var($field, FILTER_SANITIZE_EMAIL);
if (filter_var($field, FILTER_VALIDATE_EMAIL)) {
return true;
} else {
return false;
}
}
$to_email = 'name@example.com';
$subject = 'Testing PHP Mail';
$message = 'This mail is sent using the PHP mail function';
$headers = 'From: noreply@example.com';
// check if the email address is invalid
$secure_check = sanitize_my_email($to_email);
if ($secure_check == false) {
echo "Invalid input";
} else { // send email
mail($to_email, $subject, $message, $headers);
echo "This email is sent using PHP Mail";
}
?>

Ausgang:

Bereinigen von E-Mail-Benutzereingaben

und geschรผtzt Mail

E-Mails kรถnnen wรคhrend der รœbertragung von unbeabsichtigten Empfรคngern abgefangen werden.

Dadurch kรถnnen die Inhalte der E-Mail unbeabsichtigten Empfรคngern zugรคnglich gemacht werden.

Sichere E-Mail lรถst dieses Problem, indem transmitE-Mails werden รผber eine verschlรผsselte Verbindung mit SSL oder TLS versendet, zum Beispiel SMTP รผber SSL auf Port 465 oder STARTTLS auf Port 587.

Durch die Verschlรผsselung wird die Nachricht vor dem Senden unleserlich gemacht, sodass sie nur vom Mailserver des beabsichtigten Empfรคngers gelesen werden kann.

PHPMailer: Eine bessere Alternative zu mail()

Fรผr reale Anwendungen verwenden die meisten Entwickler PHP.MailDie Bibliothek `er` wird anstelle der direkten `mail()`-Funktion verwendet. PHPMailDie Authentifizierung erfolgt รผber einen externen SMTP-Server, was die Zustellbarkeit deutlich verbessert und das Hinzufรผgen von Anhรคngen und HTML-E-Mails vereinfacht.

Installieren Sie es mit Composer und senden Sie dann E-Mails รผber eine authentifizierte, verschlรผsselte SMTP-Verbindung, wie unten gezeigt.

<?php
use PHPMailer\PHPMailer\PHPMailer;
require 'vendor/autoload.php';

$mail = new PHPMailer(true);
$mail->isSMTP();
$mail->Host = 'smtp.example.com';
$mail->SMTPAuth = true;
$mail->Username = 'user@example.com';
$mail->Password = 'secret';
$mail->SMTPSecure = 'tls';
$mail->Port = 587;

$mail->setFrom('noreply@example.com', 'My App');
$mail->addAddress('name@example.com');
$mail->Subject = 'Testing PHPMailer';
$mail->Body = 'This email is sent using PHPMailer over SMTP';
$mail->send();
?>

Im Vergleich zu mail(), PHPMailer bietet Ihnen SMTP-Authentifizierung, integrierte Verschlรผsselung, Unterstรผtzung fรผr Anhรคnge und eine รผbersichtlichere Fehlerbehandlung. Daher ist es die empfohlene Wahl fรผr produktive E-Mails.

Hรคufig gestellte Fragen

Die hรคufigste Ursache ist, dass kein Mailserver auf localhost konfiguriert ist. Legen Sie die korrekten SMTP-Werte in der php.ini fest oder verwenden Sie PHP.MailBitte verwenden Sie ein authentifiziertes SMTP-Konto. รœberprรผfen Sie auรŸerdem das Server-Fehlerprotokoll und Ihren Spam-Ordner.

Fรผgen Sie Header hinzu, die MIME-Version auf 1.0 und Content-Type auf text/html setzen, und fรผgen Sie dann HTML-Markup in den Nachrichtentext ein. PHPMailer kรผmmert sich automatisch darum, wenn Sie die Option isHTML(true) setzen.

Die Funktion FILTER_SANITIZE_STRING ist seit PHP 8.1 veraltet. Verwenden Sie stattdessen htmlspecialchars(), um die Ausgabe fรผr die Anzeige zu maskieren, oder einen spezifischen Validator wie FILTER_VALIDATE_EMAIL, je nachdem, ob Sie den Wert bereinigen oder รผberprรผfen.

Ja. Geben Sie der KI Ihren SMTP-Host, Port und Sicherheitstyp an, und sie kann die vollstรคndige PHP-Datei generieren.MailRichten Sie eine Umgebung mit Authentifizierung, Absender, Empfรคngern und Fehlerbehandlung ein. Speichern Sie die Zugangsdaten in Umgebungsvariablen, nicht im Code.

Ja. KI kann Sie zu SPF-, DKIM- und DMARC-Eintrรคgen beraten, einen authentifizierten SMTP-Absender verwenden, Spam-Triggerwรถrter vermeiden und eine gรผltige Absenderadresse festlegen und Ihnen dann beim Testen der Zustellbarkeit helfen.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: