Mail mit Anhang funzt nicht

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

  • #16
    Das mit dem Pfad habe ich geprüft. Es ist meiner Meinung nach egal wie
    man den Pfad schreibt. Die Datei wurde ja immer gefunden.

    Also prüfe ich nun mal noch die \n und \r

    Kennt jemand zufällig eine Seite auf der man genau erkennen kann wann welches Zeichen wohin kommt?

    Danke

    Kommentar


    • #17
      Salut

      du musst nicht unbedingt alle \n in \r\n ändern. Du kannst auch der chunk_split() Fkt sagen, dass sie \n als Ende verwenden soll.
      PHP-Code:
      $file_content chunk_split(base64_encode($file_content),76,'\n'); 
      Gruss

      tobi
      Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

      [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
      Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

      Kommentar


      • #18
        Also gerade da ich mich damals auch mal beim eigenständigen Kodieren "fast umgebracht" habe ^^ *lol* , kann ich immer nur weiterempfehlen wenn möglich auf PEAR zurückzugreifen, wenn man es nicht gerade zu lernzwecken macht o.ä. (z.B.. http://pear.php.net/manual/en/packag....mail-mime.php)

        Gerade das verwenden von Grafiken in einer Mail oder von Anhängen wird damit zum Kinderspiel und man kann sich um die wesentliche Programmierung des eigenen Skriptes kümmern.

        Beispiel:

        PHP-Code:
        <?php
        include('Mail.php');
        include(
        'Mail/mime.php');

        $text 'Text version of email';
        $html '<html><body>HTML version of email</body></html>';
        $file '/home/richard/example.php';
        $crlf "\n";
        $hdrs = array(
                      
        'From'    => 'you@yourdomain.com',
                      
        'Subject' => 'Test mime message'
                      
        );

        $mime = new Mail_mime($crlf);

        $mime->setTXTBody($text);
        $mime->setHTMLBody($html);
        $mime->addAttachment($file'text/plain');

        $body $mime->get();
        $hdrs $mime->headers($hdrs);

        $mail =& Mail::factory('mail');
        $mail->send('postmaster@localhost'$hdrs$body);
        ?>

        Kommentar


        • #19
          @ jahlives


          Momentan sieht mein script nun so aus:

          PHP-Code:
          $file "C:\....\regexp.pdf";
          $file_name "regulaere_expressions.pdf";
          $from "...@....com";
          $to "newuser@localhost";
          $message "Das sollte im Body stehen";
          $boundary strtoupper(md5(uniqid(time())));
          $mail_header  "From:Test <".$from.">\r\n";
          $mail_header .= "MIME-Version: 1.0\r\n";
          $mail_header .= "Content-Type: multipart/mixed; boundary=$boundary\r\n";
          $mail_header .= "This is a multi-part message in MIME format\r\n";
          $mail_header .= "--$boundary\r\n";
          $mail_header .= "Content-Type: text/plain charset=\"iso-8859-1\"\r\n";
          $mail_header .= "Content-Transfer-Encoding: 8bit\r\n";
          $mail_header .= "$message\r\n";
          $file_content fread(fopen($file,"r"),filesize($file));
          //$file_content = chunk_split(base64_encode($file_content));
          $file_content chunk_split(base64_encode($file_content),76,'\n');
          $mail_header .= "--$boundary\r\n";
          $mail_header .= "Content-Type: application/octet-stream; name=\"$file_name\"\r\n";
          $mail_header .= "Content-Transfer-Encoding: base64\r\n";
          $mail_header .= "Content-Disposition: attachment; filename=\"$file_name\"\r\n";
          $mail_header .= "$file_content\r\n";
          $mail_header .= "--$boundary--\r\n";

          $send imap_mail($to,"Betreff",$message,$mail_header); 
          Kann es nicht sein das ich den Header vorne irgendwie trennen muss in text und Datei oder so was???

          Wo kann ich den ein Beispiel finden was funktioniert???

          Kommentar


          • #20
            Versuche mal noch am Ende der folgenden header ein \r\n\r\n einzufügen.
            PHP-Code:
            $mail_header .= "Content-Type: multipart/mixed; boundary=$boundary\r\n\r\n";
            ...
            $mail_header .= "Content-Transfer-Encoding: 8bit\r\n\r\n";
            ...
            $mail_header .= "Content-Disposition: attachment; filename=\"$file_name\"\r\n\r\n";
            ...
            $mail_header .= "--$boundary--\r\n\r\n"
            Gem RFC sollte jeder letzte header eines "Blocks" und die letzte Zeile der gesamten Mail mit einem doppelten CRLF versehen werden.
            Probiers mal...

            Gruss

            tobi

            EDIT:

            Schau dir mal noch diesen Thread an

            Zuletzt geändert von jahlives; 15.09.2005, 13:31.
            Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

            [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
            Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

            Kommentar


            • #21
              Habe das versucht und auch den thread durchgelesen.Aber ich komm nicht weiter.

              Lasse ich den Teil des Headers weg, der die Datei verarbeitet, dann wird mir in der Mail zumindest mal der Body angezeigt.

              Lasse ich den Teil des Bodys weg und setze nur den Ahnabg rein funzt nichts.

              Die Mails sind von ihrer physichen grösse aber annähernd richtig.

              Filegrösse+base64(33%)=ungefähr die Mailgrösse

              Das paast anscheinend. Nur kann ich mir den Anhang nicht anschauen.


              Habe jetzt mal die 91kb Datei gegen eine 59 kb Datei ausgetauscht.
              Der Anhang in Outlook(den ich nicht öffnen kann) bleibt aber immer bei der Grösse von 18 Bytes.

              Wie kann das denn sein?!?

              Kommentar


              • #22
                Ich werde mir deinen Code mal zu Hause auf den Server hauen und auch mal nach dem Fehler suchen.
                Von der Arbeit aus kann ich aber leider ned viel machen.

                Gruss

                tobi
                Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                Kommentar


                • #23
                  @galaxy
                  PHP-Code:
                  $file_content chunk_split(base64_encode($file_content),76,'\n'); 
                  Hast du die Zeile oben noch so drinnen ? Dann haste vllt auch wieder ein Durcheinander mit den Zeilenenden. Weil im Code steht bei dir jetzt \r\n und die Fkt gibt aber ein \n.

                  Gruss

                  tobi
                  Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                  [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                  Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                  Kommentar


                  • #24
                    nein hab die Funktion nun wieder so drin:

                    PHP-Code:
                    $file_content chunk_split(base64_encode($file_content)); 
                    ka warum das nicht funzt.

                    Arbeite heute noch dran. Uber das we kann ich leider nicht.
                    Werde somit wohl erst deine Codeverbesserung am Montag lesen.

                    Aber mal vielen Dank das du mir hilfst. Ich verzweifel gleich, da ich überhaupt nicht weiss woran das liegen kann.

                    Kommentar


                    • #25
                      Tja Mails und ihre Header/Content sauber zu schreiben ist manchmal schon ziemlich kompliziert. Hatte auch lange bis es bei mir dann gefunzt hat.
                      Werde, falls ich eine Lösung mit deinem Code finde, diese hier posten.

                      Gruss und bonne weekend

                      tobi
                      Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                      [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                      Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                      Kommentar


                      • #26
                        Jetzt glaube ich, dass ich den Fehler gesehen habe. Sorry hätte ich auch gestern sehen sollen
                        Du musst alle Bestandteile des Bodys der Mail in eine Var auslagern z.B. $message. Nicht in $header...
                        Der erste Boundary muss im message Teil der Mail sein. Auch die Header für die einzelnen Bestandteile (text,attachment) müssen im Body sein.
                        Nur so kannst du die mail Fkt korrekt aufrufen
                        PHP-Code:
                        $send mail($to,"Betreff",$message,$mail_header); 
                        Alles was an Headern global für die gesamte Mail gilt, gibst du an $mail_header. Alle Boundaries und alle Header, die zu einem Bestandteil der Mail gehören (Text der Mail, Attachment, die Header für die Teile) gehören in die Var welche du als $message an die Fkt gibst.

                        Sollte eingentlich so dann funzen.
                        Sorry für meine lange Leitung...

                        Gruss

                        tobi
                        Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                        [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                        Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                        Kommentar


                        • #27
                          @ jahlives

                          Danke, hast mir echt sehr geholfen.

                          Der Tipp mit der Var war der entscheidende. Danach wurde der Anhang immerhin schon mal in voller Grösse koddiert im Body ausgegeben. Musste dann noch 3 Mal \r\n durch \r\n\r\n ersetzen und schon funktionierte es.

                          Hier nochmal der Quelcode welcher nun funzt:
                          PHP-Code:
                          $file "regexp.pdf";
                          $file_name "regulaere_expression.pdf";
                          $from "..@...";
                          $to "newuser@localhost";
                          $bodytext "Das sollte im Body stehen";
                          $file_content fread(fopen($file,"r"),filesize($file));
                          $file_content chunk_split(base64_encode($file_content));
                          $boundary strtoupper(md5(uniqid(time())));
                          $mail_header  "From:<".$from.">\r\n";
                          $mail_header .= "MIME-Version: 1.0\r\n";
                          $mail_header .= "Content-Type: multipart/mixed; boundary=$boundary\r\n\r\n";
                          $mail_header .= "This is a multi-part message in MIME format\r\n";
                          $message "--$boundary\r\n";
                          $message .= "Content-Type: text/plain charset=\"iso-8859-1\"\r\n";
                          $message .= "Content-Transfer-Encoding: 8bit\r\n\r\n";
                          $message .= "$bodytext\r\n";
                          $message .= "--$boundary\r\n";
                          $message .= "Content-Type: application/octet-stream; name=\"$file_name\"\r\n";
                          $message .= "Content-Transfer-Encoding: base64\r\n";
                          $message .= "Content-Disposition: attachment; filename=\"$file_name\"\r\n\r\n";
                          $message .= "$file_content\r\n";
                          $message .= "--$boundary--\r\n\r\n";

                          $send imap_mail($to,"Betreff",$message,$mail_header);

                          if(
                          $send)
                          {
                           echo 
                          "Mail versendet";
                          }
                          else{
                               echo 
                          "Mail <b>nicht</b> versendet";
                              } 

                          Eine Frage habe ich aber noch:

                          Wo kann man denn genau nachlesen wann ich \r\n im header einsetzen muss und wann \r\n\r\n?

                          Könnte mir da bitte noch jemand eine Internetseite nennen.

                          Vielen Dank

                          Kommentar


                          • #28
                            Such dich mal beim RFC durch. Ansonsten kann man sagen, dass jedes Ende eines Headerbereichs, sei es jetzt im Header der Mail oder im Header eines Mailparts, mit einem doppelten CRLF beendet werden sollte.
                            Ausserdem sollte an das Ende der Mail, meist die letzte Boudary bei Multipart Mails, oder an das Ende des Textes bei Textmails, ebenfalls ein doppeltes CRLF angehängt werden.
                            Die meisten Mailserver erwarten dieses Zeichen als Standardendzeichen.

                            Gruss

                            tobi
                            Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                            [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                            Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                            Kommentar

                            Lädt...
                            X