E-Mails mit Anhang versenden
Wenn man E-Mails versendet, dann möchte man ja oft eine Datei als Anhang mitversenden. Dies können z.B. Bilder/Logos sein, Archive oder einfach die E-Mail als HTML-Datei, um Darstellungsprobleme zu verhindern. Mit der nachfolgend definierten Funktion könnt ihr beliebig viele Dateien als Anhang versenden. Diese Dateien können z.B. hochgeladen werden, oder bereits auf dem Server gespeichert sein.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
<?php function mail_att($to, $subject, $message, $sender, $sender_email, $reply_email, $dateien) { if(!is_array($dateien)) { $dateien = array($dateien); } $attachments = array(); foreach($dateien AS $key => $val) { if(is_int($key)) { $datei = $val; $name = basename($datei); } else { $datei = $key; $name = basename($val); } $size = filesize($datei); $data = file_get_contents($datei); $type = mime_content_type($datei); $attachments[] = array("name"=>$name, "size"=>$size, "type"=>$type, "data"=>$data); } $mime_boundary = "-----=" . md5(uniqid(microtime(), true)); $encoding = mb_detect_encoding($message, "utf-8, iso-8859-1, cp-1252"); $header = 'From: "'.addslashes($sender).'" <'.$sender_email.">\r\n"; $header .= "Reply-To: ".$reply_email."\r\n"; $header .= "MIME-Version: 1.0\r\n"; $header .= "Content-Type: multipart/mixed; charset=\"$encoding\"\r\n"; $header .= " boundary=\"".$mime_boundary."\"\r\n"; $content = "This is a multi-part message in MIME format.\r\n\r\n"; $content .= "--".$mime_boundary."\r\n"; $content .= "Content-Type: text/html; charset=\"$encoding\"\r\n"; $content .= "Content-Transfer-Encoding: 8bit\r\n\r\n"; $content .= $message."\r\n"; //$anhang ist ein Mehrdimensionals Array //$anhang enthält mehrere Dateien foreach($attachments AS $dat) { $data = chunk_split(base64_encode($dat['data'])); $content.= "--".$mime_boundary."\r\n"; $content.= "Content-Disposition: attachment;\r\n"; $content.= "\tfilename=\"".$dat['name']."\";\r\n"; $content.= "Content-Length: .".$dat['size'].";\r\n"; $content.= "Content-Type: ".$dat['type']."; name=\"".$dat['name']."\"\r\n"; $content.= "Content-Transfer-Encoding: base64\r\n\r\n"; $content.= $data."\r\n"; } $content .= "--".$mime_boundary."--"; return mail($to, $subject, $content, $header); } //Aufruf der Funktion, Versand von 1 Datei mail_att("[email protected]", "Betreff", "Euer Nachrichtentext", "Absendername", "[email protected]", "[email protected]", "datei.zip"); //Versand mehrerer Dateien, die sich im Unterordner befinden: $dateien = array("pfad/zu/datei1.zip", "pfad/zu/datei2.png"); mail_att("[email protected]", "Betreff", "Euer Nachrichtentext", "Absendername", "[email protected]", "[email protected]", $dateien); //Dateien vor dem Versenden umbennen $dateien = array("pfad/zu/alterName.zip" => "neuerName.zip"); mail_att("[email protected]", "Betreff", "Euer Nachrichtentext", "Absendername", "[email protected]", "[email protected]", $dateien); ?> |
Diese Funktion hat dabei folgende Parameter:
- $to - Empfängeradresse
- $subject - Betreff eurer E-Mail
- $message - Der Nachrichtentext
- $sender - Der Absender (Name)
- $sender_email - Der Absender (E-Mail)
- $reply_email - Die Antwortadresse
- $dateien - Ein Array mit dem Pfad zu euren Dateien
In der Variable $dateien gebt ihr entweder direkt die Pfade der Dateien an, oder aber ihr habt die Chance mittels assoziativem Array die Dateien vor dem Versenden einen neuen Namen zuzuweisen:
1 |
$dateien = array("pfad/zu/alterName.zip"); |
Hier würde der Empfänger eine Datei 'alterName.zip' erhalten. Möchtet ihr, dass beim Empfänger die Datei anders heißt, so könnt ihr das Array wie folgt definieren:
1 |
$dateien = array("pfad/zu/alterName.zip" => "neuerName.zip"); |
Hier wird die Datei alterName.zip verschickt, beim Empfänger hat diese Datei aber den Namen neuerName.zip.
Datei aus Upload versenden
Möchtet ihr eine Datei versenden die hochgeladen wurde, so könnt ihr die obige Funktion wie folgt verwenden:
1 2 3 4 5 6 |
<?php //Nicht vergessen mail_att() wie oben definiert zu haben $dateien = array($_FILES['datei_feld']['tmp_name'] => $_FILES['datei_feld']['name']); mail_att("empf@domain","Email mit Anhang","Im Anhang ist eine Datei", "Absender", "[email protected]", "[email protected]", $attachments); ?> |
Autor: Nils Reimers