MIME-header und mail()

Madjic

Grünschnabel
Moin allerseits,
ich versuche eine auf dem Server liegende pdf per mail() zu verschicken.
das Problem dabei ist, dass der Anhang nicht angehängt wird.
Der plaintext wird auch nicht in der Mail angezeigt, vermutlich hängt das mit "X-Amavis-Alert: BAD HEADER SECTION, MIME error: error: unexpected end of header" zusammen.
Sobald man chunk_split() dazunimmt, scheitert das versenden der Mail komplett.
Meine Vermutung ist, dass es was damit zu tun hat, dass ich auch kein \n\n einfügen kann, obwohl das ja bei MIME eigentlich so soll. aber ich bin vollkommen ratlos, warum das nicht geht. liegt das an mir? liegt das an der Konfiguration des Servers? oder am Wetter?

PHP:
<?php
error_reporting(E_ALL); 
include("header.php");
include("dbconnect.php");
include("vars.php");
$status = "Mails versendet";
while ($row =  mysql_fetch_assoc($result)) {
	include("fetch.php");

$filename = $date."-".$id.".pdf";
$filepath=$path."/".$year."/".$filename;

//Datei öffnen
/*
$handle = fopen ($filepath, "r");
//clearstatcache();
$anhang = fread($handle, filesize($filepath));
fclose($handle);
*/
$anhang = file_get_contents($filepath);
$anhang = base64_encode($anhang);
$anhang = chunk_split($anhang);
$betreff = "bla ".$year;
$rn = "\r\n";
//Trennzeichenfolge
$mime_boundary = "X[".md5(time())."]";

//Header
$mailheader = "From:\"Admin<admin@server\"".$rn;
$mailheader .= "Reply-To: <admin@server>".$rn;
$mailheader .= "To: ".$vname." ".$name."<".$email.">".$rn;
$mailheader .= "MIME-Version: 1.0".$rn;
$mailheader .= "Content-Type: multipart/mixed; boundary=".$mime_boundary.$rn ;
$mailheader .= "This is a multi-part message in MIME format.".$rn;
$mailheader .= "--".$mime_boundary.$rn;
$mailheader .= "Content-Type: text/plain; charset=\"utf-8\"".$rn;
$mailheader .= "Content-Transfer-Encoding: 8bit".$rn;
$mailheader .= "Sollten Sie Probleme beim öffnen des Anhangs haben, melden sie sich".$rn;
//attachment
$mailheader .= "--".$mime_boundary.$rn;
$mailheader .= "Content-Type: application/octetstream; name=\"".$filename."\"".$rn;
$mailheader .= "Content-Transfer-Encoding: base64".$rn;
$mailheader .= "Content-Disposition: attachment; file=\"".$filename."\"".$rn;
$mailheader .= $anhang.$rn;
$mailheader .= "--".$mime_boundary."--";

echo "Sende Mail an ".$vname." ".$name." (".$email.")";
$ok = mail($email, $betreff, "", $mailheader);
if ($ok) { echo "...done"; }
	else {echo "FEHLER";$status="FEHLER";};
	echo "<br>";
	};
	echo "<b>".$status."</b>";
?>
 
Zuletzt bearbeitet:
ne, hab ich noch nicht probiert, ich hatte den ehrgeiz das so weit wie möglich selber zu machen und jetzt würde ich gerne verstehen, warum zur Hölle das nicht funktioniert…aber wenn ich bis morgen da keine lösung zu gefunden habe, werde ich wohl doch eine der verfügbaren mail-klassen benutzen
 
ahaaa, man muss den anhang in den inhalt und nicht in die header schreiben…dann geht auch hinter Content- die doppelte newline
 
Zurück