Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] PHP5 Script verschickt Datei mit 0 KB?!

Einklappen

Neue Werbung 2019

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

  • [Erledigt] PHP5 Script verschickt Datei mit 0 KB?!

    Hi,
    hab folgendes Problem. Habe ein Script umgebaut, sodass man Anhänge mitschicken kann. Wenn man das Formular ohne Anhang ausfüllt und wegschickt, funktioniert es wunderbar. Füllt man aber das Formular mit Anhang aus, kommt die email zwar auch an, aber die Datei hat immer 0 KB. Hat jemand ein Tip?! Danke.

    PHP-Code:
    <?php

    error_reporting
    (E_ALL); 
    ini_set('display_errors'true);  

    ### Konfiguration ###

    $Empfaenger "xxx@domain.de";
    $Mailbetreff    'Anfrage';
    $strReturnhtml 'http://www.xxx.de/ok.php';
    $strDelimiter  ":\t";
    $allowedfiletype = array('pdf');
    $maxfilesize 8;

    ### Ende Konfiguration ###

    if(isset($_REQUEST['Send']))  
    {
    if(empty(
    $_REQUEST['Email']) || empty($_REQUEST['Firma']) || empty($_REQUEST['Name']) || filesize($_FILES['Anhang']['tmp_name'])/1024/1024 >= $maxfilesize
    {

    ?>

    (Hier kommt die Fehlermeldung)

    <?php
    }
    else
    {

    if(empty(
    $_REQUEST['Anhang']))
    {
    $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 .= "\n";
    $Header .= "--$Trenner--";
    }
    else
    {
    $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";
    $Dateiinhalt fread(fopen($_FILES['Anhang']['tmp_name'], "r"), $_FILES['Anhang']['size']);
    $Header .= chunk_split(base64_encode($Dateiinhalt));
    $Header .= "\n";
    $Header .= "--$Trenner--";
    }  
    }
    }
    else
    {
    ?>
    <form action="<?php echo$_SERVER['PHP_SELF']; ?>" enctype="multipart/form-data" method="post" name="Formular" >
    <input name="Anhang" size="50" type="file">
    <input type="submit" name="Send" value="Daten senden" class="btn">&nbsp;&nbsp;<input class="btn" type="reset">
    </form>
    <?php
    }
    ?>

  • #2
    Hat jemand ein Tip?!
    Klar, den selben wie immer, wenn es um einen Mailversand geht: Benutze eine Mailerklasse: http://www.php.de/adventskalender-20...fverkehrs.html .

    Gruß
    [URL]http://hallophp.de[/URL]

    Kommentar


    • #3
      Kann ich leider nichts mit anfangen :/

      Kommentar


      • #4
        Wieso nicht? Jede Mailerklasse hat ne schöne Doku, ich denke das sollte man schon hinbekommen.

        Kommentar


        • #5
          Inwiefern nicht? Hast du denn überprüft, ob dein Anhang korrekt hochgeladen wurde, damit du die Datei überhaupt versenden kannst?
          [URL]http://hallophp.de[/URL]

          Kommentar


          • #6
            Weil das Script so z.B. mit Anhang funktioniert, nur wenn kein Anhang dran ist wird es nicht abgeschickt!
            Dann habe ich es umgebaut und es funktioniert auch ohne und mit Anhang. Doch leider hat der Anhang jetzt 0 KB?!

            Mein vorheriges Script:
            PHP-Code:
            <?php

            error_reporting
            (E_ALL); 
            ini_set('display_errors'true);  

            ### Konfiguration ###

            $Empfaenger "xxx@domain.de";
            $Mailbetreff    'Anfrage';
            $strReturnhtml 'http://www.xxx.de/ok.php';
            $strDelimiter  ":\t";
            $allowedfiletype = array('pdf');
            $maxfilesize 8;

            ### Ende Konfiguration ###

            if(isset($_REQUEST['Send']))  
            {
            if(empty(
            $_REQUEST['Email']) || empty($_REQUEST['Firma']) || empty($_REQUEST['Name']) || filesize($_FILES['Anhang']['tmp_name'])/1024/1024 >= $maxfilesize
            {

            ?>

            (Hier kommt die Fehlermeldung)

            <?php
            }
            else
            {

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

            $Header "From: ".$_REQUEST['Email'];
            $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";
            $Dateiinhalt fread(fopen($_FILES['Anhang']['tmp_name'], "r"), $_FILES['Anhang']['size']);
            $Header .= chunk_split(base64_encode($Dateiinhalt));
            $Header .= "\n";
            $Header .= "--$Trenner--";

            mail($Empfaenger$Mailbetreff""$Header);
             
            header("Location: $strReturnhtml");
            exit;
            }
            }
            else
            {
            ?>
            <form action="<?php echo$_SERVER['PHP_SELF']; ?>" enctype="multipart/form-data" method="post" name="Formular" >
            <input name="Anhang" size="50" type="file">
            <input type="submit" name="Send" value="Daten senden" class="btn">&nbsp;&nbsp;<input class="btn" type="reset">
            </form>
            <?php
            }
            ?>
            Ja so, aber ich bekomme keine Fehlermeldung, die Mail wird trotzdem verschickt.

            PHP-Code:
            function file_upload_error_message($error_code) {
                switch (
            $error_code) {
                    case 
            UPLOAD_ERR_INI_SIZE:
                        return 
            'The uploaded file exceeds the upload_max_filesize directive in php.ini';
                    case 
            UPLOAD_ERR_FORM_SIZE:
                        return 
            'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form';
                    case 
            UPLOAD_ERR_PARTIAL:
                        return 
            'The uploaded file was only partially uploaded';
                    case 
            UPLOAD_ERR_NO_FILE:
                        return 
            'No file was uploaded';
                    case 
            UPLOAD_ERR_NO_TMP_DIR:
                        return 
            'Missing a temporary folder';
                    case 
            UPLOAD_ERR_CANT_WRITE:
                        return 
            'Failed to write file to disk';
                    case 
            UPLOAD_ERR_EXTENSION:
                        return 
            'File upload stopped by extension';
                    default:
                        return 
            'Unknown upload error';
                }
            }

            // Example
            if ($_FILES['anhang']['error'] === UPLOAD_ERR_OK) {
                
            mail($Empfaenger$Mailbetreff""$Header);
             
            header("Location: $strReturnhtml");
             exit;
             }
            else
              {  
            $error_message file_upload_error_message($_FILES['anhang']['error']);
            }

            Kommentar


            • #7
              Hmm, Sorry, wenn Du Dich entscheidest, keine Mailerklasse zu benuzten ist das Deine Sache. Das zwingt uns allerdings nicht, dann Deinen Crap-Code analysieren zu müssen.
              [COLOR="#F5F5FF"]--[/COLOR]
              [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
              [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
              [COLOR="#F5F5FF"]
              --[/COLOR]

              Kommentar


              • #8
                Muss ich dann nicht alles umschreiben?! Kenn mich mit Mailerklasse nicht aus?!

                Kommentar


                • #9
                  Dann solltest du dir mal ein paar Beispiele und die Dokumentation zur Mailerklasse deiner Wahl anschauen.
                  [URL]http://hallophp.de[/URL]

                  Kommentar


                  • #10
                    PHP-Code:
                    $Dateiinhalt fread(fopen($_FILES['Anhang']['tmp_name'], "r"), $_FILES['Anhang']['size']); 
                    Gewöhne dir ab, solche Einzeiler zu schreiben, in denen möglichst viel Funktionalität in eine Zeile gequetscht werden soll.

                    Und gewöhne dir an, zu debuggen.
                    Hast du dir mal ausgeben lassen, was nach dieser Zeile in $Dateiinhalt steht? Nein? Warum nicht?

                    fopen kann schief gehen - also überprüfe zuerst, ob es geklappt hat, bevor du im Code weiter machst, als ob nichts gewesen wäre.
                    [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

                    Kommentar


                    • #11
                      OK Danke für die Tips, werde es jetzt mal versuchen umzusetzen.
                      @ ChrisB Ja habe ich, doch leider kommt das Script nicht bis dahin, anscheind überspringt der eine if Anweisung ?!

                      So eine Doku vll?!
                      htmlmimemail5

                      Kommentar


                      • #12
                        Sooo habs jetzt weitgehend umgeschieben, so dass eine Email mit Anhang ankommt. Doch nun ist ein neues Problem aufgetaucht :/ Ich bekomme nur eine Email mit Anhang ohne Text. Doch im Quellcode der Email ist der Text drin.

                        Habe meherere Sachen ausprobiert und denke es liegt irgendwie am Content-Type: multipart/mixed?! Jemand ein Tipp?! Danke.

                        Jemand ein Tipp?!

                        PHP-Code:
                        $Trenner md5(uniqid(time()));
                            
                                    
                        $Header "From: ".$_REQUEST['email'];
                                    
                        $Header .= "\r\n";
                                    
                        $Header .= "MIME-Version: 1.0";
                                    
                        $Header .= "\r\n";
                                    
                        $Header .= "Content-Type: multipart/mixed; boundary=$Trenner";
                                    
                        $Header .= "\r\n";
                                    
                        $Header .= "This is a multi-part message in MIME format";
                                    
                        $Header .= "\r";
                                    
                        $Header .= "--$Trenner";
                                    
                        $Header .= "\r\n";
                                    
                        $Header .= "Content-Type: text/plain";
                                    
                        $Header .= "\r";
                                    
                        $Header .= "Content-Transfer-Encoding: quoted-printable";
                                    
                        $Header .= "\r\n";
                                    
                        $Header .= "Sie haben folgende Nachricht erhalten: \r";
                                    
                        $Header .= "\r\n";

                                    
                                    while(list(
                        $Formularfeld$Wert) = each($_REQUEST))
                                    {
                                    if(
                        $Formularfeld != "send")
                                    {
                                    
                        $Header .= $Formularfeld.":   ".$Wert."\r";
                                    }
                                    }

                                    
                        $Header .= "\rDatum/Zeit: ";
                                    
                        $Header .= date("d.m.Y H:i:s");
                                    
                        $Header .= "\r\n";
                                    
                        $Header .= "--$Trenner";
                                    
                        $Header .= "\r\n";
                                    
                        $Header .= "Content-Type: ";
                                    
                        $Header .= $_FILES['anhang']['type'];
                                    
                        $Header .= "; name=";
                                    
                        $Header .= $_FILES['anhang']['name'];
                                    
                        $Header .= "\r\n";
                                    
                        $Header .= "Content-Transfer-Encoding: base64";
                                    
                        $Header .= "\r\n";
                                    
                        $Header .= "Content-Disposition: attachment; filename=";
                                    
                        $Header .= $_FILES['anhang']['name'];
                                    
                        $Header .= "\r\r";
                                    
                        $Dateiinhalt file_get_contents($_FILES['anhang']['tmp_name']);
                                    
                        $Header .= chunk_split(base64_encode($Dateiinhalt),76,"\n");
                                    
                        $Header .= "\r\n";
                                    
                        $Header .= "--$Trenner--";    

                            
                                    
                                        
                        mail($Empfaenger$Mailbetreff""$Header"-f info@domain.de");
                                         
                        header("Location: $strReturnhtml"); 
                        Email Quellcode:
                        PHP-Code:
                        DateTue13 Jul 2010 10:58:55 +0200
                        Message
                        -Id: <E1OYbKJ-0003f5-Rj@wp066.webpack.hosteurope.de>
                        Toinfo@domain.de
                        Subject
                        Anfrage
                        X
                        -PHP-Scriptwww.domain.de/kontakt.php for xx.xxx.xxx.xx
                        From
                        info@domain.de
                        MIME
                        -Version1.0
                        Content
                        -Typemultipart/mixedboundary=688b7cb36699d99337b1c14128d59312
                        X
                        -bounce-keywebpack.hosteurope.de;info@domain.de;1279011536;5a333436;
                        Envelope-Tomichi@messadesign.de

                        This is a multi
                        -part message in MIME format
                         
                        --688b7cb36699d99337b1c14128d59312
                        Content
                        -Typetext/plain
                        Content
                        -Transfer-Encodingquoted-printable
                        Sie haben folgende Nachricht erhalten
                        :

                        NameTestname

                        Datum
                        /Zeit13.07.2010 10:58:55
                        --688b7cb36699d99337b1c14128d59312
                        Content
                        -Typeimage/jpegname=datei.JPG
                        Content
                        -Transfer-Encodingbase64
                        Content
                        -Dispositionattachmentfilename=datei.JPG

                        /9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAsICAgJCAwJCQwRCwoLERQPDAwPFBcSEhISEhcYExQU
                        FBQTGBYaGxwbGhYiIiQkIiIuLi4uLjAwMDAwMDAwMDD
                        /2wBDAQwMDBAQEBcRERcYFBMUGB4bHBwb
                        HiQeHh8eHiQpIyAgICAjKSYoJCQkKCYrKykpKyswMDAwMDAwMDAwMDAwMDD
                        /wAARCADJArwDAREA
                        AhEBAxEB
                        /8QAHAABAAIDAQEBAAAAAAAAAAAAAAYHAQQFAwII/8QATxAAAQMCAwMGBw0FBQcFAAAA..... 

                        Kommentar


                        • #13
                          <Messiasmode>

                          PHP-Code:
                          require("class.phpmailer.php");
                          $mail = new PHPMailer();

                          $mail->From     "deine@email.de";
                          $mail->FromName "Dein Name";

                          $mail->CharSet  =  "utf-8";

                          $mail->AddAddress($mailto);
                          $mail->Subject $betreff;
                          $mail->Body $message_text;

                          if (
                          $esgibteinedatei) {
                             
                          $mail->AddAttachment('./datei.pdf','datei.pdf');

                          </Messiasmode>

                          Also lass die Finger von ellenlangen Headerzusammenmatschereien.

                          Und schau dir das mal an:
                          http://www.php.net/manual/de/functio...oaded-file.php
                          [PHP]if ($var != 0) {
                          $var = 0;
                          }[/PHP]

                          Kommentar


                          • #14
                            Danke, hab jetzt ein PHPMailer benutzt und es funktioniert wunderbar und einfach Mit dem Anhang habe ich auch schon gelöst.

                            PHP-Code:
                            $mail->AddAttachment($_FILES['anhang']['tmp_name'], $_FILES['anhang']['name']); 
                            Muss nur noch die Input-Felder auslesen?!

                            Kommentar


                            • #15
                              Und das hat jetzt so lange gedauert? Warum haste nicht einmal ordentlich den Link in der ersten Antwort gelesen, dann hättest du dir viel Arbeit sparen können.

                              Kommentar

                              Lädt...
                              X