E-Mail-Formular mit Attachment - RAR- und ZIP-Archive werden vom Server nicht erkannt

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    Syntaxfehler im Header der E-Mail

    Hallo,

    nun habe ich endlich den Fehler gefunden. Pekka, Du hast mich auf die richtige Spur gebracht. Es lag an dem Script, dass den E-Mail-Header erzeugt. Dort war ein Syntaxfehler drin:

    PHP-Code:
    // Falscher Code

    $Header .= "\n--$Trenner"
    $Header .= "\nContent-Type: ".$_FILES['Anhang']['type']."; name=\'".$_FILES['Anhang']['name']."\'";
    $Header .= "\nContent-Transfer-Encoding: base64";

    //Der Filename ist in Anführungszeichen gesetzt,
    //das führt zu einer fehlerhaften Übermittlung der Datei

    $Header .= "\nContent-Disposition: attachment; filename=\'".$_FILES['Anhang']['name']."\'";

    //########################################

    $Header .= "\n\n";
    $Dateiinhalt fread(fopen($anhang_mail"r"), filesize($anhang_mail)); 
    $Header .= chunk_split(base64_encode($Dateiinhalt)); 

    PHP-Code:
    // So geht es
    //Die Information aus der Autoglobalen $_FILES muss zunächst in eine normale Variable $filename1 übertragen werden 

    $filename1=$_FILES['Anhang']['name'];
        

    $Header. = "\n--$Trenner"
    $Header .= "\nContent-Type:".$_FILES['Anhang']['type']."; name=$filename1";
    $Header .= "\nContent-Transfer-Encoding: base64";
    $Header .= "\nContent-Disposition:attachment"

    //Als Filename die Variable $filename1, ohne Anführungszeichen einsetzen
    filename=$filename1;
    //#########################################

        
    $Header .= "\n\n";
        
    $Dateiinhalt fread(fopen($anhang_mail"r"), filesize($anhang_mail)); 
        
    $Header .= chunk_split(base64_encode($Dateiinhalt)); 
    Wenn der Server den MIME-Typ nicht erkennen sollte und diesen so auch falsch in den E-Mail-Header schreibt, muss vor dem Erzeugen des Header der MIME-Typ manuell ermittelt und an den Header weitergeben werden:

    PHP-Code:
     // ZIP- und RAR-Archive manuell MIME- Typ erkennen und richtig zuweisen
    $anhang_ext strrchr($_FILES['Anhang']['name'],'.');
    if(
    strtolower($anhang_ext)==".zip")
    {
    $anhang_typ="application/x-zip-compressed";
    }
    if(
    strtolower($anhang_ext)==".rar")
    {
    $anhang_typ="application/x-rar-compressed";
    }

    //E-Mail-Header
    $Trenner md5(uniqid(time()));
    $Header "From: $Email"
    $Header .= "\n"
    $Header .= "MIME-Version:1.0"
    $Header .= "\r\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/html"
    $Header .= "\n"
    $Header .= "Content-Transfer-Encoding: 8bit"
    $Header .= "\n\n"
    $Header .= $mein_text;    



    //Anhang mit MIME-Typ an E-Mail-Header übergeben
    $filename1=$_FILES['Anhang']['name'];
    $Header .= "\n--$Trenner"
    $Header .= "\nContent-Type:$anhang_typ; name=$filename1";
    $Header .= "\nContent-Transfer-Encoding: base64";
    $Header .= "\nContent-Disposition:attachment"
    filename=$filename1;
    $Header .= "\n\n";
    $Dateiinhalt fread(fopen($anhang_mail"r"), filesize($anhang_mail)); 
    $Header .= chunk_split(base64_encode($Dateiinhalt)); 
    //Ende Anhang 
    Gruß Gabi

    Kommentar

    Lädt...
    X