|
|
|
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
|
|
|
|