PHP-Einfach.de PHP lernen leicht gemacht

Navigation
» Startseite
» Newsübersicht
» Kontakt
» Impressum

Community
» Forum
» Gästebuch

Tutorial
» PHP Tutorial
» MySQL Tutorial
» PHP
» MySQL
» Codeschnipsel

Downloads
» Einführung
» Scripts
» Command Board

Sonstiges
» md5-Generator
» Generator
» Wissenswertes

PHP lernen


Dieses Projekt wird unterstützt von
Lichteffekte Shop

 
Partner:
PHP Forum
Mathe Nachhilfe
Suchmaschinenoptimierung

Email mit Anhang

Zurück zur Übersicht

Diese Funktion sendet eine Email mit einer Datei als Anhang.

Wenn man Emails versendet, dann möchte man ja oft eine Datei als Anhang mitversenden. Dies können z.B. Bilder/Logos sein, Archive oder einfach die Email als HTML-Datei, um Darstellungsprobleme zu verhindern.
Mit dieser Funktion kann man beliebig viele Dateien als Anhang versenden. Diese Dateien können z.B. hochgeladen werden, oder bereits auf dem Server gespeichert sein.

 PHP 
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:
<?php
function mail_att($to,$subject,$message,$anhang)
   {
   
$absender "Mein Name";
   
$absender_mail "ich@domain";
   
$reply "antwort@adresse";

   
$mime_boundary "-----=" md5(uniqid(mt_rand(), 1));

   
$header  ="From:".$absender."<".$absender_mail.">\n";
   
$header .= "Reply-To: ".$reply."\n";

   
$header.= "MIME-Version: 1.0\r\n";
   
$header.= "Content-Type: multipart/mixed;\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=\"iso-8859-1\"\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
   
if(is_array($anhang) AND is_array(current($anhang)))
      {
      foreach(
$anhang 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."--"
      }
   else 
//Nur 1 Datei als Anhang
      
{
      
$data chunk_split(base64_encode($anhang['data']));
      
$content.= "--".$mime_boundary."\r\n";
      
$content.= "Content-Disposition: attachment;\r\n";
      
$content.= "\tfilename=\"".$anhang['name']."\";\r\n";
      
$content.= "Content-Length: .".$dat['size'].";\r\n";
      
$content.= "Content-Type: ".$anhang['type']."; name=\"".$anhang['name']."\"\r\n";
      
$content.= "Content-Transfer-Encoding: base64\r\n\r\n";
      
$content.= $data."\r\n";
      } 
      
    
   

   if(@
mail($to$subject$content$header)) return true;
   else return 
false;
   }
?>


$anhang hat dabei folgende Struktur:
$anhang["name"] = Name der Datei
$anhang["size"] = Größe der Datei in Byte
$anhang["type"] = MIME-Dateityp
$anhang["data"] = Dateiinhalt

Für mehrere Dateien einfach $anhang als mehrdimensionales Array übergeben.

Z.B. so:
$anhang[] = array("name"=>$name1, "size"=>$size1, "type"=>$type1, "data"=>$data1);
$anhang[] = array("name"=>$name2, "size"=>$size2, "type"=>$type2, "data"=>$data2);




Also die Funktion könnte man beim Datei-Upload z.B. so benutzt:
 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
<?php
$anhang 
= array();
$anhang["name"] = $_FILES['datei_feld']['name'];
$anhang["size"] = $_FILES['datei_feld']['size'];
$anhang["type"] = $_FILES['datei_feld']['type'];
$anhang["data"] = implode("",file($_FILES['datei_feld']['tmp_name']));

mail_att("empf@domain","Email mit Anhang","Im Anhang ist eine Datei",$anhang);
?>


Falls man eine auf dem Server gespeicherte Datei versenden möchte, kann dies z.B. so erfolgen:
 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
<?php
$pfad
"ordner/datei.exe";

$anhang = array();
$anhang["name"] = basename($pfad);
$anhang["size"] = filesize($pfad);
$anhang["data"] = implode("",file($pfad));

if(
function_exists("mime_content_type"))
   
$anhang["type"] = mime_content_type($pfad);
else
   
$anhang["type"] = "application/octet-stream";


mail_att("empf@domain","Email mit Anhang","Im Anhang ist eine Datei",$anhang);
?>



Mehrere Dateien, die z.B. auf dem Server liegen, sendet man so:
 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
<?php
$pfad 
= array();
$pfad[] = "ordner/datei1.exe";
$pfad[] = "ordner/datei2.zip";
$pfad[] = "ordner/datei3.gif";
//....

$anhang = array();
foreach(
$pfad AS $name)
   {
 
   
$name basename($name);
   
$size filesize($name);
   
$data implode("",file($name));

   if(
function_exists("mime_content_type"))
      
$type mime_content_type($name);
   else
      
$type "application/octet-stream";
    
$anhang[] = array("name"=>$name"size"=>$size"type"=>$type"data"=>$data);
    }

mail_att("empf@domain","Email mit Anhang","Im Anhang sind mehrere Datei",$anhang);
?>


Natürlich könnte man auch einen String o.ä. welches der PHP Script vorher erstellt hat, als z.B. Textdatei-Anhang versenden.

Kommentare

Zurück zur Übersicht

Autor Andavos

News
13.08 - » Spam im Gästebuch
Endlich Schluss mit dem Spam

08.12 - » Clanletter 2.0
Clanletter wurde komplett neu programmiert

01.09 - » Command Board 1.0 - 2.0
Das Command Board 1.0 Beta 2.0 ist erschienen


Mehr

Forum
» Entwickler Forum

» insert nach login

» Tabellenzelle zu groß







© PHP-Einfach.de 2003 - 2012