Anhang in mail()
Inga
- php
0 Tom
Hallo,
schlage mich seit zwei Tagen mit mail() und Anhang herum.
Verschiedene Scripts ausprobiert, die bei anderen auch funktionieren, bei mir stürzt PHP ab [aus ApacheLog Premature end of script header].
Habe PHP php-4.3.3
Datei liegt im selben Ordner ...
Nutze zB folgendes Script
<?php
$file = "test.xls";
$file_name = "test.xls";
$subject = "Testmail";
$from = "xx@xx.de";
$to = "xy@xy.de
$message = "Dies ist ein Test";
$boundary = strtoupper(md5(uniqid(time())));
$mail_header = "From:$from\n";
$mail_header .= "MIME-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";
$mail_header .= "\n--$boundary";
$mail_header .= "\nContent-Type: text/plain";
$mail_header .= "\nContent-Transfer-Encoding: 8bit";
$mail_header .= "\n\n$message";
$file_content = fread(fopen($file,"r"),filesize($file));
$file_content = chunk_split(base64_encode($file_content));
$mail_header .= "\n--$boundary";
$mail_header .= "\nContent-Type: application/x-excel; name="$file_name"";
$mail_header .= "\nContent-Transfer-Encoding: base64";
$mail_header .= "\nContent-Disposition: attachment; filename="$file_name"";
$mail_header .= "\n\n$file_content";
$mail_header .= "\n--$boundary--";
mail($to,$subject,"",$mail_header);
?>
Hallo Inga,
$file_content = chunk_split(base64_encode($file_content));
es könnte sein, dass Dir diese Zeile die Kopfschmerzen macht. Habe ich auch mal ganz lange daran geknabbert.
Chunc_split nutzt als default "\n"
die RFC schreibt aber bei base64 zwingend "\r\n" vor.
Leider halten sich die Mailserver auch daran und meinen, bei der anderen Version dürften sie schlafen gehen... ;-(
string chunk_split ( string body [, int chunklen [, string end]])
Ich habe in meine Funktion deshalb aufgenommen:
string chunk_split ( string body , 74 , "\r\n");
Und dann hats funktioniert und ich habe den Mailserver nicht mehr zum Abstürzen gebracht.
Grüße
Tom