Attachment mit mail() ....

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

  • Attachment mit mail() ....

    Hallo, wie kann ich ein Attachment mit der mail()-Funktion
    verschicken?
    Ich habe verschieden möglichkeiten versucht, kam aber nur mist bei raus.

    Danke schon Mal ...

    MfG Kaffi
    Kaffi
    Errare humanum est

    W32.Schmalle.H@mm

  • #2
    $boundary = strtoupper(md5(uniqid(time())));
    $file = chunk_split(base64_encode($file));

    $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";
    $mail_header .= "\n--$boundary";
    $mail_header .= "\nContent-Type: text/plain";
    $mail_header .= "\nContent-Transfer-Encoding: 8bit";
    $mail_header .= "\n\n$Hier_der_normale_Text_der_Email";
    $mail_header .= "\n--".$boundary;
    $mail_header .= "\nContent-Type: image/jpeg; name=\"".$wirklicher_filename."\"";
    $mail_header .= "\nContent-Transfer-Encoding: base64;
    $mail_header .= "\nContent-Disposition: attachment; filename=\"".$wirklicher_filename."\"";
    $mail_header .= "\n\n".$file;

    und dann noch abschicken. Das Beispiel ist für ein JPG-Bild gedacht. du müßtest an gewissen Stellen eben für andere Attachment-Arten anpassen. Bei "Content-Transfer-Encoding" ist für .txt und .html -> 8bit anzugeben, sonst fast immer base64 -> dafür mußt du zuerst auch das File encoden (2.Befehlszeile).

    Bis dann

    P.S.: bei mehreren Files einfach den unteren Block ab dem $boundary wiederholen.

    Kommentar


    • #3
      Danke, dass attachment wird gesendet.

      Allerdings funktioniert es nicht ganz so wie es soll.
      Und zwar wenn ich ein JPG sende ist das bild von ca. 65KB
      auf ca. 4KB geschrumpft.

      Hier 2x das Bild:
      voher - http://www.kaffi.de/geo_card.jpeg
      hinterhet - http://www.kaffi.de/geo_card2.jpeg

      Woran kann das liegen? Ich habe ein bischen experimentiert aber nichts gefunden.

      Kaffi
      Kaffi
      Errare humanum est

      W32.Schmalle.H@mm

      Kommentar


      • #4
        wie ich gerade bemerkt habe, kann zumindest der IE das 2. Bild nicht darstellen. Wenn mans downloadert kann man es öffnen ...
        Kaffi
        Errare humanum est

        W32.Schmalle.H@mm

        Kommentar


        • #5
          bei mir hat auch immer alles zur Zufriedenheit geklappt, egal ob GIF, JPG, ZIPs, DOCs o.ä.

          aber scheint ja bei dir jetzt doch irgendwie zu klappen, oder?!

          Kommentar


          • #6
            Ist auf deinem Server vielleicht die Länge von Attachments begrenzt?
            mein Sport: mein Frühstück: meine Arbeit:

            Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

            Kommentar


            • #7
              Leider funktioniert es noch nicht.
              Ich habe versucht zu testen ob es an der größe des Attachments liegen könnte und zwar so:
              Ich habe bei dem fehlerhaften Versuch ein 65 KB JPG
              versendet und ein 15 KB JPG zurückbekommen. Mein Versuch war nun ein 13KB großes JPG zu versenden.
              Was nun zurück kam, konnte garnicht mehr angezeigt werden und hatte eine Größe von 4,95 KB ... ?!?!?
              Zu erkennen waren nur noch ein Paar zeilen des JPGs (etwa ein drittel - wie die Größe)
              Am Skript hatte ich nichts mehr Verändert ...
              Wie kommt das? Ich bin völlig Ratlos!

              Kaffi
              Kaffi
              Errare humanum est

              W32.Schmalle.H@mm

              Kommentar


              • #8
                hmmmmmmmmmmm .... vielleicht codiert er das Bild gar nicht, sondern erwartet, daß die Datei schon codiert ist?
                Versuch erstmal, einen kurzen ASCII-Text (so wie den hier) a) unkodiert b) explizit Mime-kodiert zu schicken.
                (also einmal die Datei so, einmal durch base64encode() geschickt speichern). Dann wissen wir mehr (hoffentlich).
                mein Sport: mein Frühstück: meine Arbeit:

                Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                Kommentar


                • #9
                  He, wo ist denn meine Antwort hin? Ich hatte noch vor Titus geantwortet, ist auch schon ne halbe Stunde her... naja, stand nur drin, daß du vielleicht mal dein Skript postest. Vielleicht versteckt sich da ja ein Fehler...

                  Kommentar


                  • #10
                    Das Script:
                    <?php
                    $pic = "bild.jpg";
                    $name = "Tester Nr.1";
                    $email = "tester1@mail.de";
                    $absname = "Tester Nr.2";
                    $absemail = "tester2@mail.de";
                    $betreff = "Test";

                    $fsize = filesize($pic);
                    $faus = fopen("$pic","r");
                    $file = fread($faus,$fsize);
                    fclose($faus);

                    $php = phpversion();
                    $XMailer = "PHP/4php";

                    $boundary = strtoupper(md5(uniqid(time())));
                    $file = chunk_split(base64_encode($file));

                    $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";
                    $mail_header .= "\n--$boundary";
                    $mail_header .= "\nContent-Type: text/plain";
                    $mail_header .= "\nContent-Transfer-Encoding: 8bit";
                    $mail_header .= "\n\n$Hier_der_normale_Text_der_Email";
                    $mail_header .= "\n--".$boundary;
                    $mail_header .= "\nContent-Type: image/jpeg; name=\"".$pic."\"";
                    $mail_header .= "\nContent-Transfer-Encoding: base64";
                    $mail_header .= "\nContent-Disposition: attachment; filename=\"".$pic."\"";
                    $mail_header .= "\n\n".$file;

                    $vonadr = "From: $absname <$absemail>\nReply-To: $absmail\nX-Mailer: $XMailer\n$mail_header";

                    mail("$name <$email>","$betreff",$vonadr);
                    ?>
                    Kaffi
                    Errare humanum est

                    W32.Schmalle.H@mm

                    Kommentar


                    • #11
                      Upps ...
                      Bitte den kleinen Fehler in mail() ignorieren ...
                      Der hat sich eingeschlichen als ich vorm posten noch was verändert habe ...

                      Kaffi
                      Kaffi
                      Errare humanum est

                      W32.Schmalle.H@mm

                      Kommentar


                      • #12
                        aber genau da steckt dein Fehler. meine Variable $mail_header heisst nicht umsonst so
                        die mail() muß so aussehen:

                        mail($name,$betreff,"",$mail_header);

                        d.h. deine Attachments und normaltext und überhaupt alles wird als Header definiert und verschickt. OKay?

                        Kommentar


                        • #13
                          Das war mir schon kalr deshalb hatte ich das ja in $vonadr
                          eingebunden...

                          Was ich mit kleiner fehler gemeint hatte war das ich zwischen $betreff und $vonadr die "" vergessen hatte.

                          Oder reden wir jetzt total aneinader vorbei ?

                          Wenn ja erklär mir bitte noch mal wie du es gemeint hast.

                          Kaffi
                          Kaffi
                          Errare humanum est

                          W32.Schmalle.H@mm

                          Kommentar


                          • #14
                            Okay, ne, schon richtig, das war's was ich meinte. Aber bei mir klappt das so immer prima. Allerdings laß ich auch immer das Zeugs mit reply und x-mailer weg:

                            $msg = $msg.$mailtext;
                            $msg = trim($msg);
                            $boundary = strtoupper(md5(uniqid(time())));

                            $mail_header = "From:meineadresse@ich.de";
                            $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";
                            $mail_header .= "\n--$boundary";
                            $mail_header .= "\nContent-Type: text/plain";
                            $mail_header .= "\nContent-Transfer-Encoding: 8bit";
                            $mail_header .= "\n\n$msg";

                            den Rest kennst du ja und die mail()-Funktion scheint ja bei dir richtig zu sein. Versuch mal, deine From: und Reply: ohne Leerzeichen zu bauen. Und häng mal die Attachments ohne X-Mailer: an.
                            Zu den Leerzeichen muß ich nämlich sagen, daß die sich bei mir oft als Fehlerquelle herausgestellt haben.

                            Kommentar


                            • #15
                              Also...

                              ich habe das Script angepasst aber es funktioniert, obwohl ich den kleinen fehler mit de3n "" behoben habe nicht.
                              und zwar ist das problem z.Z. nicht das attachment sondern der header... Ich bekomme diesen als nachrich gesendet gesendet.
                              das script sieht aus wie ich es gepostet hatte, nur mit dem behobenen fehler und der anpassung...

                              CU Kaffi
                              Kaffi
                              Errare humanum est

                              W32.Schmalle.H@mm

                              Kommentar

                              Lädt...
                              X