Daniel: mail() mit dateianhang

Ahoi @ll,

ich finde hier: http://de2.php.net/manual/de/function.mail.php
kein beispiel zum versenden von mails mit Anhang, könnte mir da vll jmd
weiterhelfen?

MfG

--
Alle Angaben wie immer ohne Gewähr
ich (Jahrgang 1985, 2meter, schlank) suche evt. dich
Vorausetzung:
kleiner wie ich, nicht magersüchtig
  1. Hallo Daniel,

    kein beispiel zum versenden von mails mit Anhang, könnte mir da vll jmd
    weiterhelfen?

    PHP-FAQ: Wie kann ich ein Attachment mit einer Mail versenden?

    Grüße aus Nürnberg
    Tobias

    1. Ahoi Tobias Kloth,

      PHP-FAQ: Wie kann ich ein Attachment mit einer Mail versenden?

      sieht intressant aus, habe nun auch ein paar informationen gefunden.
      nur eins versteh ich nicht, also die mail soll einen text/plain oder
      text/html inhalt haben und einen dateianhang mit belibigem dateityp.

      Also mach ich

        
      $to = "niemand@daheim.de";  
      $from = "baer.mit.der.rebschaer@weinberg.de";  
      $betreff = "gibts nicht";  
      $msg = "Nachricht in html oder plain, ist noch nicht klar";  
      $msg .= "base64 codierte Datei"; // wie auch immer das dies geht.  
        
      $headers = "Content-Type: text/plain;\r\n";  
      $headers .= "Content-Type: dateityp; name="dateiname";\r\n";  
      $headers .= "Content-Transfer-Encoding: base64\r\n";  
      $headers .= "Content-Disposition: attachment\r\n";  
      
      

      oder hab ich da was falsch verstanden? woher weis der browser,
      emailclient oder whatever wann der base64 teil beginnt? wo ist da die
      zuordung? den Content typ in $msg reinschreiben kann ja nicht die
      lösung sein, genausowenig die nachricht in den header, oder doch?

      MfG

      --
      Alle Angaben wie immer ohne Gewähr
  2. Hallo,

    ein gutes E-Mail-Script mit Dateianhang findest du hier: http://mylittlehomepage.net/form_mail_skript

    Gruß
    Thomas L.

    1. Ahoi Thomas L.,

      ein gutes E-Mail-Script mit Dateianhang findest du hier: http://mylittlehomepage.net/form_mail_skript

      ich würde das aber gerne selber machen, und vorallem verstehen. nutze
      nicht gern dinge von anderen leuten. zumindest nicht ohne ahnung davon
      zu haben.

      MfG

      --
      Alle Angaben wie immer ohne Gewähr
      1. Hallo,

        ich würde das aber gerne selber machen, und vorallem verstehen. nutze
        nicht gern dinge von anderen leuten. zumindest nicht ohne ahnung davon
        zu haben.

        da habe ich doch auch nichts dagegen, aber hier steht zumindest schon mal in etwa wie es geht. Ich habe auch mein eigenes Script zusammengeschrieben - hat aber auch eine Weile gedauert und das mit dem Dateianhang habe ich mir auch hier abgeschaut. Am besten ist aber, du schickst dir selbst mal eine Mail mit Anhang und schaust dir den Quelltext (mit Headerzeilen) an --> im Outlook unter Datei -> Eigenschaften.
        Wichtig für das Script ist der Teil:

        // Datei einlesen und codieren:
           $datei_content = fread(fopen($_FILES['probe']['tmp_name'],"r"),filesize($_FILES['probe']['tmp_name']));
           $datei_content = chunk_split(base64_encode($datei_content),76,"\n");

        // Boundary festlegen: (Trenner, der E-Mail-Bestandteile von einander trennt)
           $boundary = md5(uniqid(rand()));

        // Mail-Header:
           $mail_header = "From: ".$mail_name." <".$mail_email.">\n";
           $mail_header .= "X-Sender-IP: ".$ip."\n";
           $mail_header .= "MIME-Version: 1.0\n";
           $mail_header .= "Content-Type: multipart/mixed; boundary="".$boundary.""\n";
           $mail_header .= "This is a multi-part message in MIME format.\n";

        // Mail-Text:
           $mail_header .= "--".$boundary;
           $mail_header .= "\nContent-Type: text/plain";
           $mail_header .= "\nContent-Transfer-Encoding: 8bit";
           $mail_header .= "\n\n".$text;

        // Attachment:
           $mail_header .= "\n--".$boundary;
           $mail_header .= "\nContent-Type: ".$_FILES['probe']['type']."; name="".$_FILES['probe']['name'].""";
           $mail_header .= "\nContent-Transfer-Encoding: base64";
           $mail_header .= "\nContent-Disposition: attachment; filename="".$_FILES['probe']['name'].""";
           $mail_header .= "\n\n".$datei_content;

        // Ende:
           $mail_header .= "\n--".$boundary."--";

        // Sende E-Mail und gebe Fehler bzw. Bestaetigung aus
        mail($mailto,$mail_subject,"",$mail_header)

        Gruß
        Thomas L.

        1. Ahoi Thomas L.,

          // Datei einlesen und codieren:
             $datei_content = fread(fopen($_FILES['probe']['tmp_name'],"r"),filesize($_FILES['probe']['tmp_name']));
             $datei_content = chunk_split(base64_encode($datei_content),76,"\n");

          vielen dank, das wars, ich hab die datei per file() gehlt, mit einem
          foreach() in einen string umgewandeln und dann nur ein base64_encode
          gemacht. den rest hatte ich schon von anderen quellen dank google
          irgendwie zusammengelsen.
          Wobei es in meinem fall keine frisch upgeloadede datei ist sondern eine "stationäre".

          $mail_header .= "X-Sender-IP: ".$ip."\n";

          ^^^^^^wie bekomm ich die? darf ich mir da was ausdenken?

          $mail_header .= "\n--".$boundary."--";

          hier hatte ich noch ein \n hintendrann, war wohl auch etwas am misslingen schuld, jetzt funktioniert es aber. nur eine frage noch, was ist wenn es mehrere dateien sind? immerwieder:

          $mail_header .= "\n--".$boundary;
             $mail_header .= "\nContent-Type: ".$_FILES['probe']['type']."; name="".$_FILES['probe']['name'].""";
             $mail_header .= "\nContent-Transfer-Encoding: base64";
             $mail_header .= "\nContent-Disposition: attachment; filename="".$_FILES['probe']['name'].""";
             $mail_header .= "\n\n".$datei_content;

          oder nur ein Dateicontent nach dem andern?

          Vielen dank auf jedenfall an dich, hast mir sehr weitergeholfen.

          MfG

          --
          Alle Angaben wie immer ohne Gewähr
          1. Hallo,

            $mail_header .= "X-Sender-IP: ".$ip."\n";
                                                ^^^^^^wie bekomm ich die? darf ich mir da was ausdenken?

            $ip = $_SERVER["REMOTE_ADDR"];

            $mail_header .= "\n--".$boundary."--";

            hier hatte ich noch ein \n hintendrann, war wohl auch etwas am misslingen schuld, jetzt funktioniert es aber. nur eine frage noch, was ist wenn es mehrere dateien sind? immerwieder:

            $mail_header .= "\n--".$boundary;
               $mail_header .= "\nContent-Type: ".$_FILES['probe']['type']."; name="".$_FILES['probe']['name'].""";
               $mail_header .= "\nContent-Transfer-Encoding: base64";
               $mail_header .= "\nContent-Disposition: attachment; filename="".$_FILES['probe']['name'].""";
               $mail_header .= "\n\n".$datei_content;

            ich denke, so müsste es wohl gehen. Du brauchst dann aber auch ein zusätzliches Formularfeld. Allerdings habe ich mich damitnoch nicht befasst. Probier es doch einfach mal aus oder schick dir auch hier erst mal eine Mail mit mehreren Anhängen. Hier kannst du dann ja sehen, wie der Header aussieht und dementsprechend das Sript aufbauen.

            Gruß
            Thomas L.

            1. Ahoi Thomas L.,

              $ip = $_SERVER["REMOTE_ADDR"];

              danke.

              ich denke, so müsste es wohl gehen.

              dann werde ich das bei gelegenheit ausprobieren.

              Du brauchst dann aber auch ein zusätzliches Formularfeld.

              nein brauche ich nicht. zumindest nicht unbedingt, momentan sieht es
              bei meinem projekt so aus das zu einem Artikel Dateien runtergeladen
              werden können. die werden mit dateinamen aufgelistet und man klickt
              auf eine. und hier gibt es 2 Fälle, fall eins, die datei darf/kann
              direkt runtergeladen werden. also öffnet sich der typische DL-Dialog.
              und fall 2, die datei ist "geschützt", also muss der Benutzer Name,
              Email etc. angeben und bekommt dann eine eMail die als anhang die
              entsprechende Datei enthält. Das ganze soll evt. einmal erweitert
              werden das vor den Dateien Chackboxen sind, der Benutzer dort haken
              reinmacht und auf einen Button klickt der z.B. "Dateien anfordern"
              heißt. naja das ganze steckt noch in den Kinderschuhen. das versenden
              mit einem anhang klappt, und wenn ich mal zeit hab, bzw. es soweit ist
              schau ich mir das mal an.

              Probier es doch einfach mal aus oder schick dir auch hier erst mal eine Mail mit mehreren Anhängen.

              das mit dem sich selbst ne mail zu schicken scheint nicht zu
              funktionieren. ich habe mir selbst eine eMail geschickt, diese hatte
              aber scheinbar keinen header, zumindest habe ich ihn nicht entdeckt
              (im gegensatz zu denen wo ich mir mit dem script schickte) naja Outlook halt.

              MfG

              --
              Alle Angaben wie immer ohne Gewähr