tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
2
ZUGRIFFE
454
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    vercetti vercetti ist offline Mitglied Silber
    Registriert seit
    Mar 2005
    Beiträge
    51
    Hallo,

    ich habe ein Skript, dass es mir erlaubt, Dateien als Anhang einer eMail mitzuschicken.

    Nun werden die Dateien zwar mitgeschickt, allerdings sind sie meist kleiner als das Original und lassen sich auch nicht öffnen. Bilder lassen sich zum Beispiel nicht anzeigen.

    Hier der Code:
    PHP-Code:
    $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")
        );

    $message $_POST['message'];
    $subject $_POST['subject'];

    $mail_header "From: system@XXXX.de";

            
    /* Wenn eine Datei als Anhang ausgewaelt wurde... */
            
    if($_FILES['datei']['tmp_name'] != "") {
    $dateiname $_FILES['datei']['name'];
    $anhang_content_type $_FILES['datei']['type'];

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

                
    /* 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 http://www.php3-forum.de/mime_mail.htm) */
                
    $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$message";

                
    /* 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-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: text/plain";
                
    $mail_header .= "\nContent-Transfer-Encoding: 8bit";
                
    $mail_header .= "\n\n".$message;
            }

    mail($emp,$subject,"",$mail_header); 
    Kann es evtl daran liegen, dass ich die Datei erst hochladen muss, bevor ich sie einer eMail anfüge? In meinem Beispiel wird die Datei nämlich im Selben Schritt mit dem Versand der eMail hochgeladen.

    Mfg Vercetti
     

  2. #2
    Registriert seit
    Dec 2002
    Ort
    Trier
    Beiträge
    17.502
    Blog-Einträge
    10
    Prinzipiell startet die Verarbeitung des Skriptes erst dann, wenn die Anfrage komplett ist, also wenn die Datei komplett hochgeladen wurde. Also kannst du das Skript so lassen wie es ist.

    Gib die hochgeladenen Dateien doch mal zusätzlich aus.
     
    Markus Wulftange

  3. #3
    vercetti vercetti ist offline Mitglied Silber
    Registriert seit
    Mar 2005
    Beiträge
    51
    Hi,

    ich habe das mal mit einer Bilddatei getestet. Tatsächlich konnte sie nicht ausgegeben bzw als Bild dargestellt werden.

    Dem hat erst die simple copy()-Funktion Abhilfe geschafft. Und zwar, indem ich die Temporärdatei dauerhaft auf den Server gespeichert habe. Das ist doch aber nicht Sinn der Sache oder?
    Muss man eine Anhangsdatei denn auf dem Server speichern?
    Die temporären Dateien konnten nie ausgegeben werden und wurden auch als Anhang defekt verschickt.

    mfg Vercetti
     

Ähnliche Themen

  1. Fehler beim Versenden von Emails
    Von Luzie im Forum PHP
    Antworten: 7
    Letzter Beitrag: 19.06.08, 11:44
  2. E-Mails mit Anhang verschicken.
    Von aKraus im Forum .NET Web und Kommunikation
    Antworten: 1
    Letzter Beitrag: 24.05.07, 10:18
  3. Probleme beim versenden von Mails mit dem Hamster
    Von ThePredator im Forum Hosting & Webserver
    Antworten: 0
    Letzter Beitrag: 30.04.06, 16:35
  4. Fehler beim Senden von Mails mit Outlook
    Von TimN im Forum Internet, DSL & Flatrate
    Antworten: 2
    Letzter Beitrag: 28.03.06, 16:35
  5. Probleme beim versenden von E-Mails
    Von vendy im Forum PHP
    Antworten: 3
    Letzter Beitrag: 17.12.04, 16:21