Ich zeige ihnen, wie sie eine E-Mail mit einem Dateianhang versenden können. Ich habe dieses Tutorial geschrieben, weil ich eine Frage dazu im Forum des SELFPHP beantworten möchte. Im eigentlichen Sinne ist es recht einfach, eine E-Mail mit Dateianhang zu versenden. Es gibt einige Regeln zu beachten. Hier ist ein Beispiel dafür, wie man eine E-Mail mit einem Dateianhang über PHP verschickt.
Hierbei muss die Datei im gleichen Ordner vorhanden sein, wo das Script liegt. Nach dem Aufruf des Browsers wird die Datei automatisch eingelesen und an die vorkonfigurierten Daten versendet. Wenn die Datei nicht existiert, wird automatisch das Script abgebrochen.
Das Code-Beispiel:
<?php
/**
* E-Mail-Adresse vom Empfänger
*/
$empfaenger = "info@php-space.info";
/**
* Betreff der E-Mail
*/
$betreff = "E-Mail mit Anhang";
/**
* Name des Absenders
*/
$absender_name = "Php-Space.info";
/**
* E-Mail-Adresse vom Absender
*/
$absender_email = "info@php-space.info";
/**
* Dateiname, die im Anhang versendet werden
soll
*/
$dateiname = "bild.JPG";
/**
* Name der Datei, die im Anhang versendet wird
*/
$dateiname_mail = "anhang.JPG";
$boundary = md5(uniqid(time()));
if (@file_exists($dateiname) == false) {
echo 'Die Datei: '.$dateiname.' gibt es
nicht auf den Server!';
} else {
/**
* Dateiinhalt von Datei auslesen
*/
$dateiinhalt = fread(fopen($dateiname,
"r"), filesize($dateiname));
/**
* Absender Name und E-Mail-Adresse
*/
$mail_header = "From: ".$absender_name."
<".$absender_email.">\n";
$mail_header .= "MIME-Version: 1.0\n";
$mail_header .= "Content-Type:
multipart/mixed;
boundary=".$boundary."\n\n";
$mail_header .= "This is a multi-part
message in MIME format\n";
$mail_header .= "--".$boundary."\n";
$mail_header .= "Content-Type:
text/plain\n";
$mail_header .=
"Content-Transfer-Encoding: 8bit\n\n";
/**
* Text der Email
*/
$mail_header .= "Das ist eine E-Mail mit
Anhang!";
/**
* Dateianhang einfügen
*/
$mail_header .= "n--".$boundary."\n";
$mail_header .= "Content-Type: image/jpg;
name=".$dateiname_mail."\n";
$mail_header .=
"Content-Transfer-Encoding: base64\n";
$mail_header .= "Content-Disposition:
attachment;
filename=".$dateiname_mail."\n\n";
$mail_header .=
chunk_split(base64_encode($dateiinhalt));
$mail_header .= "\n--".$boundary."--";
/**
* Email versenden
*/
@mail($empfaenger, $betreff, "",
$mail_header) or die('Die Email
konnte nicht versendet werden');
}
?>
Ablaufdiagramm
Der gegebene PHP-Code ist ein Beispiel dafür, wie Sie eine E-Mail mit einem Anhang versenden können. In diesem Fall wird eine Bilddatei (.JPG) als Anhang an die E-Mail angehängt.
Erklärung:
Im Folgenden finden Sie eine ausführliche Erklärung zu den einzelnen Schritten und Funktionen des Codes. Zu Beginn werden verschiedene Variablen definiert, um die notwendigen Informationen für das Versenden der E-Mail bereitzustellen.
Dazu gehört die Empfänger-E-Mail-Adresse (Variable $empfaenger
), der Betreff der E-Mail ($betreff
), der Name des Absenders ($absender_name
) und die E-Mail-Adresse des Absenders ($absender_email
). Außerdem werden zwei weitere Variablen definiert: $dateiname
, welcher den Dateinamen auf dem Server enthält, und $dateiname_mail
, welcher den Dateinamen angibt, unter dem der Anhang in der empfangenen E-Mail angezeigt wird.
Danach erzeugt der Code eine Zeichenkette namens $boundary
, welche einen eindeutigen Wert enthält und später zur Trennung von verschiedenen Teilen in der MIME-Multipart-Nachricht verwendet wird. Mit einer if-Anweisung prüft der Code dann, ob die Datei (Anhang) auf dem Server existiert, indem er die Funktion file_exists() verwendet. Wenn die Datei nicht gefunden wird, gibt das Skript mithilfe von echo eine Fehlermeldung aus. Anschließend liest das Skript den Inhalt der Datei mithilfe von fread()
und speichert diesen in einer Variable namens $dateiinhalt
.
Das Skript beginnt damit, den Mailheader zusammenzusetzen, indem es verschiedene Werte zu einer einzigen Zeichenkette zusammenfügt. Es fügt unter anderem den From-Header mit dem Namen und der E-Mail-Adresse des Absenders hinzu. Danach fügt es einen Multipart-MIME-Typ hinzu, mit dem Boundary-Wert als Trennzeichen zwischen Textteil und Anhang.
Weiterhin erstellt das Skript den Textteil der Nachricht innerhalb eines Content-Type-Headers vom Typ text/plain. Dann kommt ein weiterer Content-Type Header für den eigentlichen Anhang (Bild), gefolgt von dessen base64-codierten Inhalt. Die Funktion chunk_split() wird hier verwendet, um diese codierte Zeichenkette in kleinere Teile gleicher Länge zu zerlegen, um sicherzustellen, dass sie korrekt übertragen wird.
Schließlich versendet das Skript die zusammengesetzte Nachricht anhand aller vorher festgelegten Parameter mittels PHPs eingebauter mail()-Funktion.
Ich hoffe, dass dieses Beispiel verständlich genug ist, um es verstehen zu können. Dieser Artikel wird Ihnen einen kurzen Einblick in die Funktionsweise einer E-Mail in PHP geben.