E-Mail versenden mit PHP
Sie befinden sich: Home > Php >
E-Mail versenden mit PHP
Mit mail(); stellt PHP eine einfach zu
verwendende, und dennoch sehr hoch konfigurierbare
Funktion zum versenden von E-Mails zur Verfügung.
Der Syntax der mail(); Funktion ist fast
selbsterklärend.
Der Syntax ist:
mail ( string $empfänger, string $betreff, string
$nachricht
[, string $zusatz_header [, string $zusatz_parameters]]
)
Es wird von der Funktion direkt zurückgegeben true oder false,
nach der Ausführung. Dadurch haben sie die Möglichkeit
über eine If-
Anweisung die Erfolgsmeldung gegebenenfalls Fehlermeldung
nachträglich anzupassen. Ein
Beispiel wie man dies einsetzt, wird im unteren
Teil dieser Seite erklärt.
Als erstes wollen wir auf die einzelnen Variablen
eingehen, womit man die Funktion ansteuern kann.
$empfänger - mail() erlaubt es auch mehr
als einen Empfänger direkt anzugeben.
Dieser String für den Empf änger muss
RFC2822 konform sein, um dies zu verdeutlichen ein
paar Beispiele:
- benutzer@example.com
- benutzer@example.com, benutzer2@example.com
- Name <benutzer@example.com>
- Name <benutzer@example.com>, Name2 <benutzer2@example.com>
$betreff - Stellt den eigentlichen Betreff
der E-Mail dar. Wichtig ist, das $betreff keine
Zeilenumbrüche enthalten darf, da ansonsten
die E-Mail nicht richtig versendet werden kann.
$nachricht - ist der eigentlichen Inhalt
der Mail.
Zu beachten ist das jede Zeile durch ein LF - Zeichen
\n ( LF steht für Line Feed ) getrennt werden
muss, und das eine Zeile nicht mehr als 70 Zeichen
enthalten sollte. Sofern PHP direkt mit einem SMTP
Server kommuniziert und unter Windows verwendet wird,
ist zu beachten das ein Punkt (.) am Anfang einer
Zeile entfernt wird. Soll dies verhindert werden
kann der Punkt durch zwei Punkte ersetzt werden.
Hier ein kleines Beispiel wie einfach man dies mit
str_replace() machen kann.
<?php
$nachricht = str_replace("\n.", "\n..", $nachricht);
?>
$zusatz_headers - Ist optional und muss
nicht angegeben werden. Dieser String stellt eine
Zeichenkette dar, die am Ende des E-Mail-Headers
eingefügt werden soll. Dieses optionale Parameter
wird hauptsächlich für Angaben wie From,
CC oder BCC verwendet. Wenn mehrere dieser Parameter
verwendet werden sollen müssen diese durch ein
CRLF - Zeichen ( \r\n ) getrennt werden. Um überhaupt
eine Mail versenden zu können MUSS ein From-header
vorhanden sein.
Wichtig ist in diesem Zusammenhang der Umstand
das die php.ini Datei dahin gehend angepasst
werden kann, das nicht zwangläufig bei jedem
Aufruf der mail(); Funktion explizit dieser
String als additionales Parameter übergeben
werden muss. Zu beachten ist, das einige UNIX Mail
Transfer Agents das LF - Zeichen durch ein CRLF – Zeichen
ersetzen, wodurch dann das CR – Zeichen doppelt
vorhanden ist. In Ausnahmefällen reicht es dann,
nur ein LF zu verwenden. ( Dies verstößt
explizit gegen die RFC 2822 Norm )
$zusatz_parameters - Dieser Parameter ist
optional und muss nicht zwingend angegeben werden.
Der Parameter wird dazu verwendet zusätzliche
Parameter an das entsprechende Mail- Programm zu übergeben.
Hierbei ist es wichtig das der Sendmail Pfad in der php.ini Datei
entsprechend gesetzt ist, um das Ziel der Parameterübergabe
zu haben. Benutzt wird diese Funktion häufig,
um eine nicht zustellbar E-Mail an eine bestimmte
E-Mail-Adresse weiterzuleiten, dazu sollte Sendmail
mit der -f Option benutzt werden. Um Fehler
zu vermeiden sollte der Benutzer unter dem der Webserver
läuft ebenfalls als bekannter Benutzer in der
Sendmail - Konfiguration ( Diese Datei befindet sich
meistens unter /etc/mail/trusted-users )
eingetragen sein.
Hinweis: Um diesen Parameter zu
verwenden, ist es vonnöten, dass der SAFE_MOD
in der PHP Konfiguration auf OFF gestellt ist.
Ein
kurzes Beispiel zeigt den Gebrauch der mail() Funktion
<?php
/*
* In der Variabel $empfaenger wird
* die Empfänger E-Mail-Adresse gespeichert.
*/
$empfaenger = 'niemand@example.com';
/*
* In der Variabel $betreff wird
* der Betreff gespeichert. Es darf kein
* Zeilenumbruch enthalten sein.
*/
$betreff = 'Betreff der E-Mail';
/*
* In der Variabel $nachricht_text wird
* der Text der Nachricht gespeichert.
*/
$nachricht_text = 'Das ist der Nachrichtentext';
/*
* In der Variabel $header wird
* der Absender, Antwortet E-mail-Adresse sowie
* welche PHP-Version für den Versand zuständig
* ist gespeichert. Es muss explizit für die Angaben
* ein direkter Zeilenumbruch generiert werden.
*
* Den Zeilenumbruch machen wir mit "\r\n"
*/
$header = 'MIME-Version: 1.0'. "\r\n";
$header .= 'From: webmaster@example.com' . "\r\n";
$header .= 'Reply-To: webmaster@example.com' . "\r\n";
$header .= 'X-Mailer: PHP/' . phpversion(). "\r\n";
$header .= 'Content-Type:text/plain; charset=UTF-8';
/*
* Nach dem wir alle Parameter definiert haben
* können wir sie E-Mail direkt an unser Mailprogramm
* übergeben.
*
* Mit der If-Anweisung prüfen wir den zurückgegebenen
* Wert der Mailfunktion. Wir setzten direkt vor dem
* Mailfunktion ein @ Zeichen damit keine PHP
* Fehlermeldung ausgegeben werden.
*/
if (@mail($empfaenger, $betreff, $nachricht_text,
$header) === true) {
/*
* Wenn die Mailfunktion keinen Fehler
* zurückgeliefert geben wir den Text
* dafür aus, dass die E-Mail erfolgreich
* versendet wurde.
*/
echo 'Die erste E-Mail wurde erfolgreich versendet';
} else {
/*
* Sollte Mailfunktion einen Fehler
* zurückgeben, geben wir den Betrachter
* dieser Seite eine Fehlermeldung aus.
*/
echo 'Die erste E-Mail konnten nicht versendet werden';
}
/*
* Nachfolgend versenden wir eine E-Mail mit dem 5. Parameter.
* Diese E-Mail wird nur versendet, wenn der Safe_Mode=OFF ist.
*/
/*
* Prüfen ob Safe_Mode gesetzt ist, dies kann man mit der
* Funktion ini_get('safe_mode') machen. Es wird direkt ein
* String zurückgeliefert.
*/
if (ini_get('safe_mode') == '0' ) {
/*
* Wenn der Safe_Mode gesetzt ist auf OFF,
* versenden jetzt nun die E-Mail.
*/
if (@mail($empfaenger, $betreff, $nachricht_text,
$header, '-fwebmaster@example.com') === true) {
/*
* Wenn die Mailfunktion keinen Fehler
* zurückgeliefert geben wir den Text
* dafür aus, dass die E-Mail erfolgreich
* versendet wurde.
*/
echo 'Die zweite E-Mail wurde erfolgreich versendet';
} else {
/*
* Sollte Mailfunktion einen Fehler
* zurückgeben, geben wir den Betrachter
* dieser Seite eine Fehlermeldung aus.
*/
echo 'Die zweite E-Mail konnten nicht versendet werden';
}
}
?>
Wenn sie diesen Code in eine email_senden.php Datei
speichern und diese direkt in den Browser aufrufen,
versendet automatisch der Mailserver zwei E-Mails.
Man hat nun die Möglichkeit zum Beispiel, mit
der Übergabe
von Variablen an die email_senden.php Datei ein
einfaches Kontaktformular zu erstellen.
Häufig bekommen wir die Frage, wie so werden Umlaute in der E-Mail falsch dargestellt?
Dies kann verschiedene Ursachen haben.
Prüfen Sie den Charset ihrer Webseite. Der Browser sollte das Formular als UTF-8 interpretieren. Des Weiteren sollten Sie in ihren Editor überprüfen, ob die Kodierung der Datei auf UTF-8 gestellt ist. In PHPStorm ist das unten rechts. Über das Projektverzeichnis – File Encoding können Sie die Datei von zum Beispiel ISO-8859-1 auf UTF-8 stellen.
Zusätzlich muss der Charset im Mail Header angegeben werden. Diese wird in der Variable $header hinterlegt. Wenn die Umlaute immer noch falsch dargestellt werden in der E-Mail, müssen die PHP Einstellungen sowie die Apache Einstellungen überprüft werden. Dazu sollten Sie sich an ihren Webhoster wenden.
Eine Erklärung, wie Sie eine "E-Mail mit
einen
Dateianhang versenden" finden Sie in unsern Php
Tutorial Bereich.
Hier geht es weiter zu der nächsten Erklärung,
es wird hierbei direkt auf die Php
Function eingegangen.
|