Ciao Tobi,
danke für Deine sachliche Antwort. Das komische ist nur, dass der ganze Kram schon mal irgendwann ging und zur Zeit geht wieder nix mehr. Ich weiss einfach nicht warum. Also rein theoretisch habe ich Deine Mail verstanden, aber umsetzungstechnisch haperts doch gewaltig, da ich eher Delphianer bin.
Ich versuchs also mal zu erklären was ich mache. Ich habe ein Script, welche die Inhalte verschiedenster Formulare verarbeitet. Ihm ist es egal, welche Formularfelder es darin gibt. Ich will es eben selbst hinbekommen und nicht einfach nur ne fertige Klasse anderer verwenden, von der ich zwar weiss, dass sie funktioniert, ich sie aber niemals verstehen werde.
Hier mal Auszüge aus dem Script. In dem oberen Abschnitt, welchen ich weggelassen habe, werden alle Formularfelder in die Variable $text geschrieben. Das funktioniert ganz gut und fehlerfrei. Hier also das Handling für den Anhang. Das Feld im HTML-Formular heisst einfach nur upload.
Also das normale Versenden klappt problemlos. Habe ich ein Uploadfeld mit dabei, kracht es.
Wenn ich Dich also richtig verstanden habe, müsste ich es so machen, dass im $header nur die Headerdaten reinkommen und im $text der Inhalt aller Formularfelder reingeschrieben werden kann und anschliessend der Anhang aus dem Feld upload rein kommt.!?
Wäre es denn dann so richtiger!?
danke für Deine sachliche Antwort. Das komische ist nur, dass der ganze Kram schon mal irgendwann ging und zur Zeit geht wieder nix mehr. Ich weiss einfach nicht warum. Also rein theoretisch habe ich Deine Mail verstanden, aber umsetzungstechnisch haperts doch gewaltig, da ich eher Delphianer bin.
Ich versuchs also mal zu erklären was ich mache. Ich habe ein Script, welche die Inhalte verschiedenster Formulare verarbeitet. Ihm ist es egal, welche Formularfelder es darin gibt. Ich will es eben selbst hinbekommen und nicht einfach nur ne fertige Klasse anderer verwenden, von der ich zwar weiss, dass sie funktioniert, ich sie aber niemals verstehen werde.
Hier mal Auszüge aus dem Script. In dem oberen Abschnitt, welchen ich weggelassen habe, werden alle Formularfelder in die Variable $text geschrieben. Das funktioniert ganz gut und fehlerfrei. Hier also das Handling für den Anhang. Das Feld im HTML-Formular heisst einfach nur upload.
PHP-Code:
# Maximale Größe des Attachments in Bytes:
$max_attach_size = 1200000;
$filesize = false;
$int_filesize = $_FILES['upload']['size'];
$str_filename = $_FILES['upload']['name'];
if ($int_filesize > $max_attach_size)
{$filesize = false;
echo "<h3>Meldung vom FormMailer</h3>";
echo "Ihr Attachment <b>".$str_filename."</b> ist zu groß
(".number_format($_FILES['upload']['size']/1000,0,",","")." KB) -
Maximalgröße: ".number_format($max_attach_size/1000,0,",","")." KB<br>";
echo "<br><a href=\"javascript:history:back()\">Zurück zum Formular</a>";
}
else
{// Wenn Attachment vorhanden und grösse ok, dann MIME-Mail erstellen:
//bisher hierher dürfte es keine Probleme geben
$filesize = true;
if ($_FILES['upload']['name'] && $filesize == true)
{
// Datei einlesen und codieren:
$datei_content = fread(fopen($_FILES['upload']['tmp_name'],"r"),
filesize($_FILES['upload']['tmp_name']));
$datei_content = chunk_split(base64_encode($datei_content),76,"\n");
// Boundary festlegen:
$boundary = md5(uniqid(rand()));
// Mail-Header:
$header = "From: FormMailer<".$strFrom.">\r\n";
$header .= "X-Sender-IP: ".$ip."\n";
$header .= "MIME-Version: 1.0\n";
$header .= "Content-Type: multipart/mixed; boundary=\"".$boundary."\"\n";
$header .= "This is a multi-part message in MIME format.\n";
// Mail-Text:
$header .= "--".$boundary;
$header .= "\nContent-Type: text/plain";
$header .= "\nContent-Transfer-Encoding: 8bit";
$header .= "\n\n".$text."\n\n(".number_format($int_filesize/1000,0,",","")." KB)";
// Attachment:
$header .= "\n--".$boundary;
$header .= "\nContent-Type: ".$_FILES['upload']['type']."; name=\"".$_FILES['upload']['name']."\"";
$header .= "\nContent-Transfer-Encoding: base64";
$header .= "\nContent-Disposition: attachment; filename=\"".$_FILES['upload']['name']."\"";
$header .= "\n\n".$datei_content;
// Ende:
$header .= "\n--".$boundary."--";
// Sende E-Mail und gebe Fehler bzw. Bestaetigung aus
mail($email,$betreff,$text,$header) or die ("Fehler beim Übermitteln der Mail mit Anhang!");
//hier werden dann noch die kopien abgefrühstückt
if ($rec2 != "") mail($rec2,$betreff,"",$header);
if ($copy != "") mail($copyto,$betreff,"",$header);
}
else
{
//es handelt sich um ein Formular, ohne Uploadfeld
$header = "From: FormMailer<".$strFrom.">\r\n";
$header .= "X-Sender-IP: $ip\n";
$header .= "Content-Type: text/plain\n";
$header .= "Reply-To: ".$reply_to."\r\n";
mail($email,$betreff,$text,$header) or die ("Fehler beim Übermitteln!");
//hier werden dann noch die kopien abgefrühstückt
if ($rec2 != "") mail($rec2,$betreff,$text,$header);
if ($copy != "") mail($copyto,$betreff,$text2,$header);
}
}
Header("Location: ".$url);
}
?>
Wenn ich Dich also richtig verstanden habe, müsste ich es so machen, dass im $header nur die Headerdaten reinkommen und im $text der Inhalt aller Formularfelder reingeschrieben werden kann und anschliessend der Anhang aus dem Feld upload rein kommt.!?
Wäre es denn dann so richtiger!?
PHP-Code:
// Mail-Header:
$header = "From: FormMailer<".$strFrom.">\r\n";
$header .= "X-Sender-IP: ".$ip."\n";
$header .= "MIME-Version: 1.0\n";
$header .= "Content-Type: multipart/mixed; boundary=\"".$boundary."\"\n";
$header .= "This is a multi-part message in MIME format.\n";
// Mail-Text:
$content .= "--".$boundary;
$content .= "\nContent-Type: text/plain";
$content .= "\nContent-Transfer-Encoding: 8bit";
$content .= "\n\n".$text."\n\n(".number_format($int_filesize/1000,0,",","")." KB)";
// Attachment:
$content .= "\n--".$boundary;
$content .= "\nContent-Type: ".$_FILES['upload']['type']."; name=\"".$_FILES['upload']['name']."\"";
$content .= "\nContent-Transfer-Encoding: base64";
$content .= "\nContent-Disposition: attachment; filename=\"".$_FILES['upload']['name']."\"";
$content .= "\n\n".$datei_content;
//abschliessend
mail($email,$betreff,$content,$header);
Kommentar