Hallo,
ich habe ein Skript, dass es mir erlaubt, Dateien als Anhang einer eMail mitzuschicken.
Nun werden die Dateien zwar mitgeschickt, allerdings sind sie meist kleiner als das Original und lassen sich auch nicht öffnen. Bilder lassen sich zum Beispiel nicht anzeigen.
Hier der Code:
Kann es evtl daran liegen, dass ich die Datei erst hochladen muss, bevor ich sie einer eMail anfüge? In meinem Beispiel wird die Datei nämlich im Selben Schritt mit dem Versand der eMail hochgeladen.
Mfg Vercetti
ich habe ein Skript, dass es mir erlaubt, Dateien als Anhang einer eMail mitzuschicken.
Nun werden die Dateien zwar mitgeschickt, allerdings sind sie meist kleiner als das Original und lassen sich auch nicht öffnen. Bilder lassen sich zum Beispiel nicht anzeigen.
Hier der Code:
PHP:
$contenttypes = array(
"text/plain" => array("encoding"=>"8bit" ,"info"=>"purer Text"),
"text/html" => array("encoding"=>"8bit" ,"info"=>"HTML-Dokument"),
"image/gif" => array("encoding"=>"base64","info"=>"Bild: GIF"),
"image/jpeg" => array("encoding"=>"base64","info"=>"Bild: JPEG"),
"image/png" => array("encoding"=>"base64","info"=>"Bild: PNG"),
"application/x-zip-compressed" => array("encoding"=>"base64","info"=>"Komprimiert: ZIP"),
"application/x-gzip" => array("encoding"=>"base64","info"=>"Komprimiert: GZ"),
"application/x-tar" => array("encoding"=>"base64","info"=>"Komprimiert: TAR")
);
$message = $_POST['message'];
$subject = $_POST['subject'];
$mail_header = "From: system@XXXX.de";
/* Wenn eine Datei als Anhang ausgewaelt wurde... */
if($_FILES['datei']['tmp_name'] != "") {
$dateiname = $_FILES['datei']['name'];
$anhang_content_type = $_FILES['datei']['type'];
/* Lese die temporaere Datei, die der Benutzer hochgeladen hat aus */
$datei_content = fread(fopen($_FILES['datei']['tmp_name'],"r"),filesize($_FILES['datei']['tmp_name']));
/* Codiere Datei ins BASE64-Format, falls noetig */
if($contenttypes[$anhang_content_type][encoding]=="base64") $datei_content = chunk_split(base64_encode($datei_content));
else $datei_content = $datei_content;
/* Generiere einen Boundary */
$boundary = strtoupper(md5(uniqid(time())));
/* Beginne den Mail-Header mit MIME-Mail-Header */
/* (siehe http://www.php3-forum.de/mime_mail.htm) */
$mail_header .= "\nMIME-Version: 1.0";
$mail_header .= "\nContent-Type: multipart/mixed; boundary=$boundary";
$mail_header .= "\n\nThis is a multi-part message in MIME format -- Dies ist eine mehrteilige Nachricht im MIME-Format";
/* Hier faengt der normale Mail-Text an */
$mail_header .= "\n--$boundary";
$mail_header .= "\nContent-Type: text/plain";
$mail_header .= "\nContent-Transfer-Encoding: 8bit";
$mail_header .= "\n\n$message";
/* Hier faengt der Datei-Anhang an */
$mail_header .= "\n--$boundary";
$mail_header .= "\nContent-Type: $anhang_content_type; name=\"$dateiname\"";
/* Lese aus dem Array $contenttypes die Codierung fuer den MIME-Typ des Anhangs aus */
$mail_header .= "\nContent-Disposition: attachment; filename=\"$dateiname\"";
$mail_header .= "\n\n$datei_content";
/* Gibt das Ende der eMail aus */
$mail_header .= "\n--$boundary--";
} else {
$mail_header .= "\nContent-Type: text/plain";
$mail_header .= "\nContent-Transfer-Encoding: 8bit";
$mail_header .= "\n\n".$message;
}
mail($emp,$subject,"",$mail_header);
Mfg Vercetti