PHP-Einfach.de
  • PHP Tutorial
  • MySQL Tutorial
  • Für Fortgeschrittene
  • Webhosting
  • Forum

E-Mails mit Anhang versenden

15. August 2019
  1. Home
  2. »
  3. Für Fortgeschrittene
  4. »
  5. Script-Beispiele
  6. »
  7. 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
Zurück: Angemeldet bleiben
Weiter: Gästebuch

Für Fortgeschrittene

  • Objektorientierte Programmierung
  • PHP Sicherheit
  • Script-Beispiele
    • Loginscript
    • E-Mails mit Anhang versenden
    • Gästebuch
    • PDFs erstellen
    • Besucherzähler mit Reload-Sperre
    • Kontaktformular
    • Logfiles mit PHP generieren
    • URLs im Text identifizieren
  • Codeschnipsel
  • Stellenmarkt
Mit freundlicher Unterstützung von:
  • Punkt191 Werbeagentur

Hoster – Geringste Ausfallzeit

  1. netcup Ø 0 Min.
  2. webgo Ø 0 Min.
  3. Linevast Ø 3 Min.
  4. All-Inkl.com Ø 3 Min.
  5. checkdomain Ø 4 Min.
  6. dogado Ø 6 Min.
  7. Strato Ø 8 Min.
  8. manitu Ø 10 Min.
  9. 1&1 Ø 10 Min.
  10. DomainFactory Ø 14 Min.
» Mehr erfahren

Impressum | Datenschutz | Auf PHP-Einfach.de werben

© PHP-Einfach.de 2003 - 2025

Cookie-Zustimmung verwalten
Um dir ein optimales Erlebnis zu bieten, verwenden wir Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wenn du diesen Technologien zustimmst, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn du deine Zustimmung nicht erteilst oder zurückziehst, können bestimmte Merkmale und Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Anbieter verwalten Lese mehr über diese Zwecke
Einstellungen ansehen
{title} {title} {title}