mail() + Attachment

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

  • mail() + Attachment

    Mornin'g @ll.
    Wiedereinmal eine ganze Nacht durchgecoded... und nun sitze ich an einem nervtötenden Problem mit eMail Attachmants ! Ich krieg den Fehler nicht raus. Meiner meinung nach müsste der header korrekt sein ...

    PHP-Code:

    <?    /* Beginne den Mail-Header mit der Definition des Absenders */
            $mail_header = "xxx@yyy";

                /* Dateianhang aufbauen */
                $datei_content='';
                  exec("htmldoc -t pdf --no-localfiles --no-title --no-toc --size A4 --textfont Arial --quiet --webpage \"http://".$HTTP_HOST."/page.php"\"",$datei_content2);

                foreach ($datei_content2 AS $content_add) {
                    $datei_content.=$content_add."\n";
                }

                /* Codiere Datei ins BASE64-Format */
                 $datei_content = chunk_split(base64_encode($datei_content));

                /* Generiere einen Boundary */
                $boundary = strtoupper(md5(uniqid(time())));

                /* Beginne den Mail-Header mit MIME-Mail-Header */
                $mail_header .= "\nMIME-Version: 1.0";
                $mail_header .= "\nContent-Type: multipart/mixed; boundary=$boundary";
                $mail_header .= "\n\nThis is a multi-part message in MIME format  --  Dies ist eine mehrteilige Nachricht im MIME-Format";

                /* Hier faengt der normale Mail-Text an */
                $mail_header .= "\n--$boundary";
                $mail_header .= "\nContent-Type: text/plain";
                $mail_header .= "\nContent-Transfer-Encoding: 8bit";
                $mail_header .= "\n\n$mail_content";

                /* Hier faengt der Datei-Anhang an */
                $mail_header .= "\n--$boundary";
                $mail_header .= "\nContent-Type: application/pdf; name=\"Dateianhang.pdf\"";
                $mail_header .= "\nContent-Transfer-Encoding: base64";
                $mail_header .= "\nContent-Disposition: inline; filename=\"Dateianhang.pdf\"";
                $mail_header .= "\n\n$datei_content";

                /* Gibt das Ende der eMail aus */
                $mail_header .= "\n--$boundary--";

            /* Sende eMail und gebe Fehler bzw. Bestaetigung aus */
            mail("XXX@xxx","Betreff6","TEXT",$mail_header) ?>
    [


    Sieht jemand zufällig den Fehler ? Die PDF Datei kommt mit der richtigen Seitenzahl an, nur die Seiten sind alle weiß,

    Danke im Voraus...

  • #2
    Stehe vor einem ähnlichen Problem..
    Möchte eine PDF-Datei dynamisch generieren lassen und im Anhang direkt als Emailanhang verschicken.
    Wie gehe ich dazu am besten vor?
    PDFlib vorhanden.
    Zuletzt geändert von zzet; 07.04.2004, 17:49.

    Kommentar


    • #3
      Meinst du pdf oder php Datei? Ich verschicke in meinem Rechnungsssystem PDFs folgendermaßen:

      PHP-Code:
      $file "$file.pdf";
      $file_name "rechnung_".$datumjetzt.".pdf";
      $from $sales;
      $to $beMail;
      $message $nachricht;
      $boundary strtoupper(md5(uniqid(time())));
      $mail_header  "From:$namevon <$emailvon>\n";
      $mail_header .= "MIME-Version: 1.0";
      $mail_header .= "\nContent-Type: multipart/mixed; boundary=$boundary";
      $mail_header .= "\n\nThis is a multi-part message in MIME format  --  Dies ist eine mehrteilige Nachricht im MIME-Format";
      $mail_header .= "\n--$boundary"
      $mail_header .= "\nContent-Type: text/plain";
      $mail_header .= "\nContent-Transfer-Encoding: 8bit";
      $mail_header .= "\n\n$message";
      $file_content fread(fopen($file,"r"),filesize($file));
      $file_content chunk_split(base64_encode($file_content));
      $mail_header .= "\n--$boundary";
      $mail_header .= "\nContent-Type: application/octetstream; name=\"$file_name\"";
      $mail_header .= "\nContent-Transfer-Encoding: base64";
      $mail_header .= "\nContent-Disposition: attachment; filename=\"$file_name\"";
      $mail_header .= "\n\n$file_content";
      $mail_header .= "\n--$boundary--";
      mail($emailan,$betreff,"",$mail_header); 

      Kommentar


      • #4
        meinte natürlich PDF - habs entsprechend geändert, danke!
        Ich werde Deins mal anschauen und testen.

        Kommentar


        • #5
          Ok, nach einem 1. Test habe ich folgendes Problem:

          "Adobe Reader kann die Datei nicht öffnen, da der Dateityp nicht unterstützt wird, oder die Datei beschädigt ist...."

          Kommentar


          • #6
            ich habe genau das selbe problem adobe sagt mri sogar, dass es wahrscheinlich so ist, dass die file per email versendet und falsch decoded wurde.

            wie habt ihr das problem gelöst?

            Kommentar


            • #7
              Geht es Dir eher um das "per Mail versenden" oder um das dynamische Generieren der PDFs?

              Kommentar


              • #8
                die pdf habe ich fix fertig am server liegen. und diese will ich jetzt verschicken per mail als attachment.

                mfg rudi

                Kommentar


                • #9
                  Hier mal eine einfache 'quick 'n dirty' - Version für PHP5:

                  PHP-Code:
                  <?

                  $filename = "datei.pdf";
                  $handle = fopen ($filename, "r");
                  $inhalt = fread ($handle, filesize($filename));
                  fclose($handle);

                  $email = "Betreff hier einfuegen";
                  $mailheader  = "From: $email\nReply-To: $email\nX-MAILER: PHP/" . phpversion();

                  $mailtext = "begin 666 datei.pdf\r\n";
                  $mailtext .= convert_uuencode($inhalt);
                  $mailtext .= "end\r\n";
                  $mailtext .= "hier mailtext";
                  mail('bla@blubb.de',$email,$mailtext,$mailheader);

                  ?>
                  Version für PHP < 5.x reiche ich gleich nach

                  Kommentar


                  • #10
                    Habe jetzt nochmal getestet...
                    Die von Viktor gepostete Version für PHP < 5.x läuft bei mir tadellos.

                    Mein Problem lag damals glaube ich bei der PDF-Generierung. Kann mich aber nicht mehr genau erinnern - ist ja schon ne Weile her.
                    Zuletzt geändert von zzet; 16.11.2004, 18:27.

                    Kommentar


                    • #11
                      kannst du einmal den gesamten code posten. bei mir funktioniert es nicht.

                      mfg rudi

                      Kommentar


                      • #12
                        Warum soll ich hier nochmals Code posten, der im selben Thread schonmal gepostet wurde? Schau Dir doch bitte mal den Beitrag von Viktor M. an - da ist doch der Code.
                        Nur weil bei mir die Variablen anders heißen ändert sich nicht gleich was an der Funktionsweise.

                        Auch sind die Angaben "funktioniert" bei mir nicht etwas ungenau. Ok, weiter oben hast Du schonmal eine Fehlermeldung gepostet, aber ein bisschen mehr Input wäre nicht schlecht.
                        Z.b. ob es nur mit dem dynamisch generierten PDF nicht funktioniert, oder ob auch ein manuell hochgeladenes PDF nicht verschickt wird.
                        Dann könntest Du mal die Mail-Funktion auf die Basics zusammenkürzen, um erstmal deren korrekten Betrieb zu prüfen.
                        Dann schrittweise mehr dazunehmen, um so dem Fehler langsam auf die Spur zu kommen.
                        Sorry - ich werde es mir nochmals anschauen, aber bei einem groben Überfliegen (aus Zeitmangel) kann ich bei der Version von Viktor M. und meiner keine Unterschiede (bis auf Variablennamen) feststellen.

                        Kommentar


                        • #13
                          habe ich dir schon geschrieben, dass es mit nicht dynamischen pdf's nicht funktioniert. mir geht es rein um das verschicken der pdf's....die liegt auf dem server. ich bekomme eine mail, mein opera client zeigt mir auch einen anhang in der mail an (in der übersicht über die mails fehtl jedoch das anhangszeichen (im outlook die büronadel)), die mail hat ca. 900 Byte und das Pdf hat ca. 100 k also kann das auch nicht hinhauen. udn wenn ich öffne kommt wie gesagt die fehlermeldung, dass die pdf nicht geöffnet werden kann, da sie falsch decodiert wurde.

                          mfg rudi

                          Kommentar


                          • #14
                            Versuch mal
                            PHP-Code:
                            $file "pdfdatei.pdf";
                            $file_name "wie_soll_anhang_heissen.pdf";
                            $from "email@adresse.de";
                            $to "empfaenger@adresse.de";
                            $message "Hier steht dann die Nachricht der Mail";
                            $boundary strtoupper(md5(uniqid(time())));
                            $mail_header  "From:Test <$from>\n";
                            $mail_header .= "MIME-Version: 1.0";
                            $mail_header .= "\nContent-Type: multipart/mixed; boundary=$boundary";
                            $mail_header .= "\n\nThis is a multi-part message in MIME format  --  Dies ist eine mehrteilige Nachricht im MIME-Format";
                            $mail_header .= "\n--$boundary"
                            $mail_header .= "\nContent-Type: text/plain";
                            $mail_header .= "\nContent-Transfer-Encoding: 8bit";
                            $mail_header .= "\n\n$message";
                            $file_content fread(fopen($file,"r"),filesize($file));
                            $file_content chunk_split(base64_encode($file_content));
                            $mail_header .= "\n--$boundary";
                            $mail_header .= "\nContent-Type: application/octetstream; name=\"$file_name\"";
                            $mail_header .= "\nContent-Transfer-Encoding: base64";
                            $mail_header .= "\nContent-Disposition: attachment; filename=\"$file_name\"";
                            $mail_header .= "\n\n$file_content";
                            $mail_header .= "\n--$boundary--";
                            mail($to,"Betreff",$message,$mail_header); 
                            und sag mir, ob es geklappt hat.

                            Kommentar


                            • #15
                              Super es funktioniert! Danke.
                              Auria Informations-Technologien
                              http://www.auria-it.de

                              Kommentar

                              Lädt...
                              X