mit diesem Code versuche ich, eine mail mit Anhang zu verschicken.
die Mail kommt auch an, der Anhang leider nicht (es kommt auch nirgendwo eine Fehlermeldung).
$Trenner = md5(uniqid(time()));
Nur nebenbei: Das ist reichlich sinnlos. uniqid() erzeugt, wie Du ja sicher in der Anleitung gelesen hast, eine Kennung basierend auf der aktuellen Zeit. Klatscht man die aktuelle Zeit nochmals davor, wird die Kennung nur länger, aber die Eindeutigkeit nicht besser (erst recht nicht, wenn zwei zeitmäßig synchron laufende Rechner involviert sind, Stichwort UTC / NTP).
Der erste Parameter für uniqid() ist eher für etwas Systemidentifizierendes gedacht, zum Beispiel die IP-Adresse. Du kannst auch rand() bzw. mt_rand() benutzen, um die Kennung durch eine Zufallszahl zu ergänzen.
Ob das alles in diesem Fall überhaupt nötig ist, lasse ich mal dahingestellt.
$Header .= "\n";
Und nur der Korrektheit halber: Die Syntax für Kopfzeilen lautet
field = field-name ":" [ field-body ] CRLF
Also \r\n und nicht \n am Ende. Siehe RFC 822, Abschnitt 3.2.
$Header .= "MIME-Version: 1.0";
$Header .= "\n";
$Header .= "Content-Type: multipart/mixed; boundary=$Trenner";
$Header .= "\n\n";
Mit \n\n (bzw. eigentlich \r\n\r\n, s.o.) leitest Du den Körper der Mail ein. Sowas hat eigentlich in $Header nichts zu suchen.
$Header .= $mailtext;
Und weiter: Was macht der Text in $Header?
$Dateiinhalt .= fread(fopen($Dateiname, "r"), filesize($Dateiname));
//$Header .= chunk_split(base64_encode($Dateiinhalt));
Wenn man die Zeile auskommentiert, in der die Datei in die Mail kopiert wird, ist es kein Wunder, dass die Datei nicht ankommt.
if(mail($Empfaenger, $Betreff, "", $Header))
Du verschiffst die komplette Mail über die Kopfzeilen. Das mag funktionieren, aber es wäre schöner, wenn Du den Inhalt als dritten Parameter und _nur_ die Kopfzeilen als vierten übergibst. Die Kopfzeilen sind dabei nur die drei bis zum ersten \r\n\r\n (wie oben kommentiert).
Gruß,
soenk.e