Email Anhang kommt nicht richtig an

Antoniodc

Mitglied
Hi zusammen,

vielleicht findet einer den Fehler. Ist egal ob ich ein Anhang mitsende, die Datei die ich empfange heißt immer "Part_2.bin". Ich möchte alle Dateiformen gelten lassen.
Für die Hilfe bedanke ich mich schon einmal vorab.
Code:
<?php

$Empfaenger = "info@gtm-dienstleistungen.de";
 if ($_POST['action'] == "sende") {
 if ($_POST['Name'] != "" && $_POST['Mail'] != "") {
$Mailbetreff = "Kontakt:";
$Mailbetreff .= $_POST['Kontakt'];
$absendername = $_POST['Mail'];

$Trenner = md5(uniqid(time()));

$Header = "From: ".$_POST['Mail'];
$Header .= "\n";
$Header .= "MIME-Version: 1.0";
$Header .= "\n";
$Header .= "Content-Type: multipart/mixed; boundary=$Trenner";
$Header .= "\n\n";
$Header .= "This is a multi-part message in MIME format";
$Header .= "\n";
$Header .= "--$Trenner";
$Header .= "\n";
$Header .= "Content-Type: text/plain";
$Header .= "\n";
$Header .= "Content-Transfer-Encoding: 8bit";
$Header .= "\n\n";
$Header .= "Sie haben folgende Nachricht erhalten: \n\n";

while(list($Formularfeld, $Wert) = each($_REQUEST))
{
if($Formularfeld != "Send" && $Formularfeld != "Anhang")
{
$Header .= $Formularfeld.": ".$Wert."\n";
}
}

$Header .= "\nDatum/Zeit: ";
$Header .= date("d.m.Y H:i:s");
$Header .= "\n";
$Header .= "--$Trenner";
$Header .= "\n";
$Header .= "Content-Type: ";
$Header .= $_FILES['Anhang']['type'];
$Header .= "; name=";
$Header .= $_FILES['Anhang']['name'];
$Header .= "\n";
$Header .= "Content-Transfer-Encoding: base64";
$Header .= "\n";
$Header .= "Content-Disposition: attachment; filename=";
$Header .= $_FILES['Anhang']['name'];
$Header .= "\n\n";
$Header .= chunk_split(base64_encode($_FILES['Anhang']['name']));
$Header .= "\n";
$Header .= "--$Trenner--";

mail($Empfaenger, $Mailbetreff,"From: $absendername <$absendermail>", $Header);
echo"<strong>Vielen Dank für Ihre eMail!<br> In der Regel beantworten wir ihre Anfrage innerhalb der nächsten 24 Stunden. <br>Ihr GTM Team</strong>";
}
}
?>
 
Ui,ui,ui ... Email-Attachements gehören zu den weniger trivialen Dingen mit PHP. Außerdem öffnet man durch geringe Nachlässigkeiten bei der korrekten Formulierung der Header Angreifern Tür und Tor. Daher solltest du eine fertige mailerklasse verwenden, beispielsweise: http://swiftmailer.org/
 
Nur so als Gedanke: Hast du mal geprüft, ob die Datei überhaupt gefunden wird? Wo ist der Code, der den Anhang aus $TEMP in den aktuellen Ordner (also dem, in dem auch das PHP-Script liegt), kopiert bzw. verschiebt?

Ich würde die Mail erstmal nicht senden, sondern folgendes machen:

PHP:
<?php
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 1);

$Empfaenger = "info@gtm-dienstleistungen.de";
 if ($_POST['action'] == "sende") {
 if ($_POST['Name'] != "" && $_POST['Mail'] != "") {
$Mailbetreff = "Kontakt:";
$Mailbetreff .= $_POST['Kontakt'];
$absendername = $_POST['Mail'];
 
$Trenner = md5(uniqid(time()));
 
$Header = "From: ".$_POST['Mail'];
$Header .= "\n";
$Header .= "MIME-Version: 1.0";
$Header .= "\n";
$Header .= "Content-Type: multipart/mixed; boundary=$Trenner";
$Header .= "\n\n";
$Header .= "This is a multi-part message in MIME format";
$Header .= "\n";
$Header .= "--$Trenner";
$Header .= "\n";
$Header .= "Content-Type: text/plain";
$Header .= "\n";
$Header .= "Content-Transfer-Encoding: 8bit";
$Header .= "\n\n";
$Header .= "Sie haben folgende Nachricht erhalten: \n\n";
 
while(list($Formularfeld, $Wert) = each($_REQUEST))
{
if($Formularfeld != "Send" && $Formularfeld != "Anhang")
{
$Header .= $Formularfeld.": ".$Wert."\n";
}
}
 
$Header .= "\nDatum/Zeit: ";
$Header .= date("d.m.Y H:i:s");
$Header .= "\n";
$Header .= "--$Trenner";
$Header .= "\n";
$Header .= "Content-Type: ";
$Header .= $_FILES['Anhang']['type'];
$Header .= "; name=";
$Header .= $_FILES['Anhang']['name'];
$Header .= "\n";
$Header .= "Content-Transfer-Encoding: base64";
$Header .= "\n";
$Header .= "Content-Disposition: attachment; filename=";
$Header .= $_FILES['Anhang']['name'];
$Header .= "\n\n";
$Header .= chunk_split(base64_encode($_FILES['Anhang']['name']));
$Header .= "\n";
$Header .= "--$Trenner--";
 
//mail($Empfaenger, $Mailbetreff,"From: $absendername <$absendermail>", $Header);

echo "Header: <pre>$Header</pre>";
if( !file_exists($_FILES['Anhang']['name']))
{
  echo "Achtung! Datei für den Email-Anhang wurde nicht gefunden!<br/>";
}
else
{
  echo"<strong>Vielen Dank für Ihre eMail!<br> In der Regel beantworten wir ihre Anfrage innerhalb der nächsten 24 Stunden. <br>Ihr GTM Team</strong>";
}
}
}
?>
 
"$Header = "From: ".$_POST['Mail'];" das ist extrem gefährlich. Dadurch kann man ja alles in den header schreiben, was man will. Also auch andere empfänger hinzufügen und sogar eigene Anhänge versenden.
 
Muss dann ein Anhang vorhanden sein? Er sendet dann ja nicht, wenn nichts im Anhang ist, oder?

Natürlich wird die E-Mail auch ohne Anhang versendet. Hast du die part_2.bin mal im Editor aufgemacht und nachgesehen, ob es überhaupt deine Datei sein kann?

Prinzipiell würde ich aber alxy zustimmen. Es gibt 1000 und eine Mailer-Klasse, die auch Anhang können. Verwende doch was fertiges. Ich hätte da noch phpmailer als Tipp.
 
Zurück