dateianhang im kontaktformular wird nicht mit gesendet !!!

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

  • #16
    hier schickst Du ja Deine Datei ab:

    $msg = "Sie haben Post ;-)\n";
    $msg .= "name=".$HTTP_POST_VARS["fld_name"]."\n";
    $msg .= "forname=".$HTTP_POST_VARS["fld_forname"]."\n";
    $msg .= "email=".$HTTP_POST_VARS["fld_email"]."\n";
    mail("eclipse_240_hp@gmx.net","Nachricht von Ihrem Formmailer",
    $msg);

    wobei mail (), die funktion zum Abschicken ist.

    Da ist nirgends die Rede von einer Datei, die Du mitschickst.

    Es genügt aber auch nicht einfach den Namen der Datei anzugeben, denn es gibt einen sogenannten mail-Header, den Du mit den entsprechenden Werten angeben mußt.

    Dort wird dan angegeben, daß die mail aus mehreren Teilen (multipart) besteht. Diese Teile werden durch Boundaries getrennt.

    Alles klar?

    Ne? Dann mußt mal im Forum schauen, wie andere ihre mails mit Anhang verschicken, gibt ja ne Suche-Funktion.

    Klar könnt man jetzt nen Codeschnipsel hier posten, aber was bringt Dir das, wenn Du es nicht schaffts den Schnipsel dann an Deinen bestehenden Formmailer anzupassen?

    Und wieso soll ich jetzt hier rumsuchen, wenn Du das doch selber machen kannst?

    Kommentar


    • #17
      Auch in PHP kann man Datei-Anhänge per eMail verschicken. Hierzu muss man allerdings die Funktionsweise, bzw. den Standard hierzu kennenlernen. eMails mit Anhang müssen nämlich im sog. MIME-Format verschickt werden. Wie dies in der Praxis aussieht, möchten wir im Folgenen erklären.

      Um so eine eMail zu versenden, kann man nicht mehr auf die übliche PHP-Methode zurückgreifen, und den Text im Mail-Body schreiben (dritter Parameter bei der mail()-Funktion), sondern muss alles im Mail-Header angeben (vierter Parameter). Zunächst muss klar gemacht werden, dass es sich um eine MIME-Mail handelt. Hierzu wird im Header die folgende Zeile eingefügt:
      MIME-Version: 1.0

      Anschließend wird angegeben, dass es sich um eine mehrteilige Nachricht handelt. Hierbei muss eine Kombination aus Zeichen ohne Sonderzeichen (also Zahlen, Buchstaben und Striche) angegeben werden, die später die Trennung von den einzelnen Abschnitten in der eMail deutlich macht (auch Boundary genannt). Das Boundary in unserem Beispiel generieren wir mit dem Folgenden Befehl:
      $boundary = strtoupper(md5(uniqid(time())));
      Das könnte dann folgendes Ergebnis ergeben:
      Content-Type: multipart/mixed; boundary=4BC48A1C8272858A7BAF9DF8782062C2

      Jetzt kann nach einer Leerzeile (\n\n) eine Nachricht angegeben werden, die die eMail-Programme sehen, wenn sie nicht MIME unterstützen (so ziemlich jedes Programm kennt allerdings MIME).

      Dann beginnt der erste MIME-Teil. Eingeleitet von einem doppelten Strich (--) gefolgt von unserem Boundary beginnt der Header für den ersten Teil. Hier wird der MIME-Typ angegeben (bei purem Text text/plain und bei einer HTML-Mail text/html):
      --4BC48A1C8272858A7BAF9DF8782062C2
      Content-Type: text/plain
      Content-Transfer-Encoding: 8bit

      Nun können Sie Ihr Herz ausschütten mit Worten, die als normaler Mail-Text beim Empfänger erscheinen sollen.
      Hallo, im Anhang findest du eine Datei!

      Ist auch dieser Teil beendet, so kann der zweite MIME-Teil beginnen. Eingeleitet wird dieser wieder mit den zwei Strichen und unserem boundary. Da wir jedoch diesmal eine Datei (in diesem Beispiel eine ZIP-Datei) benutzen möchten, muss auch der Header geändert werden:
      --4BC48A1C8272858A7BAF9DF8782062C2
      Content-Type: application/x-zip-compressed; name="datei.zip"
      Content-Transfer-Encoding: base64
      Content-Disposition: attachment; filename="datei.zip"

      Hier ist nun eine sehr wichtige Zeile drin: Content-Transfer-Encoding: base64. Dateien mit binärem Inhalt (also ZIP-Dateien, Word-Dokument, Bilder, ...) müssen in das Format base64 codiert werden. PHP bringt zum Glück die entsprechende Funktion mit: base64_encode(). Zusätzlich muss aber beachtet werden, dass eine Zeilenlänge von 72 Zeichen nicht überschritten werden darf. Hierzu kann man den Inhalt der Datei zusätzlich auf die Funktion chunk_split() anwenden. Das Ergebnis ist also: $datei_inhalt=chunk_split(base64_encode($datei_inhalt));
      Da in den meisten Fällen nur der Datei-Name vorhanden ist (falls die Datei frisch mit dem Browser auf den Server geladen wurde sogar nur der temporäre), lässt sich der Befehl noch komplizierter machen und den Dateiinhalt direkt umgewandelt in eine Variable schreiben:
      $dateiname="datei.zip"; // Dateiname der Datei auf dem Server

      $datei_inhalt = chunk_split(base64_encode(fread(fopen($dateiname, "r"), filesize($dateiname))));

      Nach dem also der Datei-Inhalt richtig codiert und formatiert ausgegeben wurde, muss noch eine Zeile hinterhergesendet werden, dass die eMail zu beendet ist. Hierbei handelt es sich wiedereinmal um die zwei Striche, gefolgt von dem Boundary der wiederum von zwei Strichen gefolgt ist:
      --4BC48A1C8272858A7BAF9DF8782062C2--

      Kommentar


      • #18
        PHP-Code:
        <?php
            
        /*  EMAIL-ANHANG VERSENDEN     (05/2000)   *
             *  ====================================   *
             *  copyright (c) 2000 by Kristof Hamann   *
             *  published @ [url]http://www.php3-forum.de[/url]   */


            /* Hier wird die Schriftart definiert, die anvielen Stellen verwendet wird */
            
        $FONT "<FONT SIZE=2 FACE=\"Verdana, Arial, Helvetica\">";

            
        /*
              Das Array $contenttypes dient zur identifizierung des MIME-Typs des Anhanges.
              Es beinhaltet den MIME-Typ, die Codierung und eine Beschreibung dazu. Die
              Codierung ist hierbei sehr wichtig, da binaere Daten im base64-Format versendet
              werden muessen (siehe [url]http://www.php3-forum.de/mime_mail.htm[/url])
            */
            
        $contenttypes = array(
                
        "text/plain"            => array("encoding"=>"8bit"  ,"info"=>"purer Text"),
                
        "text/html"            => array("encoding"=>"8bit"  ,"info"=>"HTML-Dokument"),
                
        "image/gif"            => array("encoding"=>"base64","info"=>"Bild: GIF"),
                
        "image/jpeg"            => array("encoding"=>"base64","info"=>"Bild: JPEG"),
                
        "image/png"            => array("encoding"=>"base64","info"=>"Bild: PNG"),
                
        "application/x-zip-compressed"    => array("encoding"=>"base64","info"=>"Komprimiert: ZIP"),
                
        "application/x-gzip"        => array("encoding"=>"base64","info"=>"Komprimiert: GZ"),
                
        "application/x-tar"        => array("encoding"=>"base64","info"=>"Komprimiert: TAR")
            );
        ?>
        <!-- Quellcode vom PHP-Beispiel: [url]http://www.php3-forum.de/[/url] -->
        <HTML>
        <HEAD>
        <TITLE>eMail-senden</TITLE>
        <BODY>
        <?php
            
        echo $FONT;

            
        /* pruefe, ob ein Absender und ein Mail-Inhalt eingegeben wurde */
            
        if($von && $mail_content) {

                
        /* Beginne den Mail-Header mit der Definition des Absenders */
                
        $mail_header "From: $von";

                
        /* Wenn eine Datei als Anhang ausgewaelt wurde... */
                
        if($anhang=="jep" && $dateiname && $datei && $datei != "none") {

                    
        /* Lese die temporaere Datei, die der Benutzer hochgeladen hat aus */
                    
        $datei_content fread(fopen($datei,"r"),filesize($datei));

                    
        /* Codiere Datei ins BASE64-Format, falls noetig */
                    
        if($contenttypes[$anhang_content_type][encoding]=="base64"$datei_content chunk_split(base64_encode($datei_content));
                    else 
        $datei_content $datei_content;

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

                    
        /* Beginne den Mail-Header mit MIME-Mail-Header */
                    /* (siehe [url]http://www.php3-forum.de/mime_mail.htm[/url]) */
                    
        $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: $content_type";
                    
        $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: $anhang_content_type; name=\"$dateiname\"";
                    
        /* Lese aus dem Array $contenttypes die Codierung fuer den MIME-Typ des Anhangs aus */
                    
        $mail_header .= "\nContent-Transfer-Encoding: ".$contenttypes[$anhang_content_type][encoding];
                    
        $mail_header .= "\nContent-Disposition: attachment; filename=\"$dateiname\"";
                    
        $mail_header .= "\n\n$datei_content";

                    
        /* Gibt das Ende der eMail aus */
                    
        $mail_header .= "\n--$boundary--";
                } else {
                    
        $mail_header .= "\nContent-Type: $content_type";
                    
        $mail_header .= "\nContent-Transfer-Encoding: 8bit";
                    
        $mail_header .= "\n\n".$mail_content;
                }

                
        /* Sende eMail und gebe Fehler bzw. Bestaetigung aus */
                
        if(@mail($an,$subject,"",$mail_header)) echo "Die eMail mit dem Betreff ".htmlentities($subject)." wurde an ".htmlentities($an)." gesendet.";
                else echo 
        "Es ist ein Fehler beim senden der eMail aufgetreten.";
            } else {

        ?>
        <TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0>
        <FORM METHOD=post ENCTYPE="multipart/form-data" ACTION="<?php echo $PHP_SELF?>">
        <TR><TD><?php echo $FONT?><B>An:&nbsp;</b></TD><TD><INPUT TYPE=text SIZE=40 NAME=an VALUE=""></TD></TR>
        <TR><TD><?php echo $FONT?><B>Von:&nbsp;</b></TD><TD><INPUT TYPE=text SIZE=40 NAME=von VALUE="anonymous <mailscript@php3-forum.de>"></TD></TR>
        <TR><TD><?php echo $FONT?><B>Betreff:&nbsp;</b></TD><TD><INPUT TYPE=text SIZE=40 NAME=subject VALUE=""></TD></TR>
        <TR><TD><?php echo $FONT?><B>Inhaltstyp:&nbsp;</b></TD><TD><SELECT NAME=content_type><OPTION VALUE="text/plain">Standard: Text<OPTION VALUE="text/html">HTML-Mail</SELECT></TD></TR>
        <TR><TD COLSPAN=2><?php echo $FONT?><B>Folgender Text wird in der eMail versendet:&nbsp;</b></TD></TR>
        <TR><TD COLSPAN=2><TEXTAREA NAME="mail_content" COLS="60" ROWS="10"></TEXTAREA></TD></TR>

        <TR><TD><?php echo $FONT?><BR><B><INPUT TYPE=checkbox NAME=anhang VALUE="jep">Anhang:&nbsp;</b></TD><TD></TD></TR>
        <TR><TD><?php echo $FONT?>Datei:&nbsp;</TD><TD><INPUT TYPE=file SIZE=20 NAME=datei></TD></TR>
        <TR><TD><?php echo $FONT?>Dateiname in Mail:&nbsp;</TD><TD><INPUT TYPE=text SIZE=20 NAME=dateiname VALUE=""></TD></TR>
        <TR><TD><?php echo $FONT?>Inhaltstyp:&nbsp;</TD><TD><SELECT NAME=anhang_content_type>
        <?php
            
        /*
              Lese aus dem Array $contenttypes mit den MIME-Typen die Daten aus und
              generiere eine Drop-Down-Liste
            */
            
        reset($contenttypes);
            
        $key=key($contenttypes);
            while(
        $key != "" || $key=="0") {
                echo 
        "<OPTION VALUE=\"$key\">".$contenttypes[$key][info];
                
        next($contenttypes);
                
        $key=key($contenttypes);
            }
        ?>
        </SELECT></TD></TR>
        <TR><TD><?php echo $FONT?></TD><TD><?php echo $FONT?><INPUT TYPE=submit VALUE="Abschicken"></TD></TR>
        </FORM></TABLE>

        <?php
            
        }
        ?>
        </BODY>
        </HTML>

        Kommentar


        • #19
          Original geschrieben von beavis-2005
          das ist doch alles scheisse ..
          Das stimmt. Insbesondere dein Benehmen, sowohl was Sprachwahl als auch was Doppelpostings angeht.
          Und deshalb: *trash*
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar

          Lädt...
          X