Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   PHP: Weshalb ist der Inhalt nicht mehr lesbar? (https://www.delphipraxis.net/140543-php-weshalb-ist-der-inhalt-nicht-mehr-lesbar.html)

GreenHorn3600 20. Sep 2009 13:33


PHP: Weshalb ist der Inhalt nicht mehr lesbar?
 
Hallo Zusammen,

bin gerade dabei, ein kleines Antwortformular zu implementieren. Nur klappt das nicht ganz. Wenn eine Datei mitgesendet werden soll, so kommt sie anschliessend verstümmelt an. Ich bin ratlos. Hat einer eine Idee? Danke schon mal.

Das Attachment wird folgendermassen hinzugefügt:
Code:
  $file = fopen($tmp_name,'rb');
  $data = fread($file, filesize($tmp_name));
  fclose($file);
     
  // Add file attachment to the message
  $Message .= "--$semi_rand";
  $Message .= "\nContent-Type: application/octetstream;\n name=\"$file_name\"";
  $Message .= "\nContent-Transfer-Encoding: base64";
  $Message .= "\nContent-Disposition: attachment;\n filename=\"$file_name\"\n";
  $Message .= chunk_split(base64_encode($data)); // Base64 encode the file data
Und das kämm auch gut an:
Code:
--49c27f4c4bed38fa501fc0aa4fec2f86
Content-Type: application/octetstream;
  name="my.png"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
  filename="my.png"

jwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAACgJJREFU
aEPlmvtTVdcVx8k0GZ1OfoxVqxbFRxUVhcvjXi5cnpc3VhQECgqoyEusgKBGUSCmbaJgZhpN0piZ
Rk1/SWZqkp+TMf2XOtMZ6g+r+7vO2fvuve8+l3OjJmnjzPLs8+CH+5nv+u61196vnBgqyNH//eK1
12j9+tdzXl23Lmfd+l8a735ON8+ereY8W13NWf33v3Ke/Wf1FeO3A5qMoQtVNHWrh2b+2Mdxfr6T
hufaaHg2Pc6KZ4FxqZXOWnFG3DtjRjx3xGnxLC2mxbPplsAYEu84psLFoPhu8KIdzeJ3HVEMwGF4
toG6Tx8myUkBG5lr5
  ...
MTQMLix08ovWE6Vp4BSMNCBSOelw2I/+BwHZcON1e2lCnN2bfruXz6apQ30Y4AGOSPIR0jeP87HJ
9p7omtHWHaX/x+g5V6fO3kJQ/WPR9DO38hDu6alacSryqHFgWR5c/rldwcE+pAxO/wV6MsBdGErU
YQAAAABJRU5ErkJggg==
--49c27f4c4bed38fa501fc0aa4fec2f86
Nur anschliessend ist es nicht mehr lesbar :-(

Danke schon mal.

Euer GreenHorn

Valle 20. Sep 2009 14:13

Re: PHP: Weshalb ist der Inhalt nicht mehr lesbar?
 
Zitat:

Zitat von GreenHorn3600
anschliessend ist es nicht mehr lesbar :-(

Was heißt das genau? Mit was empfängst du die Mail? Ist die empfangende Datei genauso groß wie die gesendete? Ist sie binär, oder hast du die base64-kodierten Daten?

Mit freundlichen Grüßen,

Valle

GreenHorn3600 20. Sep 2009 14:19

Re: PHP: Weshalb ist der Inhalt nicht mehr lesbar?
 
Hallo Valle,

dies heißt, dass mein Thunderbird (auch MS Express) die Attatchments nicht mehr interpretieren kann. Es gibt ein kleines weißes Quartrat mit einen roten Kreuz in der Mitte.

Habe die Dateien mal gegen eine Mail vom Thunderbird verglichen, und da scheint, daß die Kodierung irgendwie durcheinander gekommen ist. Ich habe aber keinen Plan, an was dies liegen könnt.

Schöne Grüße
Euer GreenHorn

Valle 20. Sep 2009 14:22

Re: PHP: Weshalb ist der Inhalt nicht mehr lesbar?
 
Eventuell kannst du dir mal diese Howto anschauen. Ich habe es mal vor einiger zeit benutzt und es hat auch funktioniert. Was anderes fällt mir jetzt spontan auch nicht ein. :gruebel:

Mit freundlichen Grüßen,

Valle

GreenHorn3600 20. Sep 2009 14:36

Re: PHP: Weshalb ist der Inhalt nicht mehr lesbar?
 
Danke Valle,

wenn ich die Datei speicher, aus dem EMail Client, dann wird sie mit einer Größe von 0 Byte gespeichert. Irgendwie scheint er nicht das Ende richtig interpretieren zu können. Aber weshalb? :cry:

Schöne Grüße
GreenHorn

Valle 20. Sep 2009 14:38

Re: PHP: Weshalb ist der Inhalt nicht mehr lesbar?
 
Hast du das verlinkte Howto mal angeschaut und den Code mit deinem verglichen / ausgetauscht?

Mit freundlichen Grüßen,

Valle

GreenHorn3600 20. Sep 2009 14:50

Re: PHP: Weshalb ist der Inhalt nicht mehr lesbar?
 
Ja habe ich. In dem Link wird eine 8Bit Kodierung verwendet. Aber das hilft leider auch nicht weiter.

Hab es an anderer Stelle noch mal getestet, da wird das Dokumentenformat nicht erkannt. Hier muss irgendwo ein Fehler drin sein, wenn die Datei an die Message angegehängt wird. Nur welcher :-(

Matze 20. Sep 2009 15:03

Re: PHP: Weshalb ist der Inhalt nicht mehr lesbar?
 
Das hilft dir zwar nicht direkt weiter, aber es gibt fertige Skripte wie PHPMailer, mit denen kannst du dein Vorhaben kinderleicht in die Tat umsetzen.

GreenHorn3600 20. Sep 2009 15:13

Re: PHP: Weshalb ist der Inhalt nicht mehr lesbar?
 
Hallo Matze,

an das hab ich auch schon gedacht. Habe mit dem RMail experimentiert (rMail, welches zu Anfang ganz gut aussah. Es hat aber Fehler in der Klassendeklaration, so, daß es nicht auf dem Host ausgeführt werden kann. Ich hab keine Ahnung an was das liegen kann.. :-(

Das von Dir verlinkte Script, scheint mir recht chaotisch zu sein, da müßte ich alles umbauen. Da scheint es leichter, den Fehler zu finden, wo er auch sei ... :-(

Schöne Grüße
GreenHorn

GreenHorn3600 20. Sep 2009 15:40

Re: PHP: Weshalb ist der Inhalt nicht mehr lesbar?
 
Hier einmal die abgespeckte Routine. Vielleicht sieht ja von euch einer den Fehler. Dank schon mal.

Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <title>
            Send Attatchments
        </title>
    </head>
    <?php
   
    function SendMail() {
        if (isset($_POST['EMail'])) {$EMail = htmlspecialchars($_POST['EMail']);};
        if (isset($_POST['Message'])) {$Message = htmlspecialchars($_POST['Message']);};
        if (($EMail != '') and ($Message != '')) {
            if (!preg_match('/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@([a-z0-9-]+\.)+([a-z]{2,4})$/i', $EMail)) {
                WriteError("Ung&uuml;ltige EMail Addresse");
            } else {
                $Headers = 'From: ' . $EMail . "\r\n";
               
                $filesuploaded = 0;
                foreach($_FILES["files"]["error"] as $key => $error) {
                    if ($error == UPLOAD_ERR_OK) {
                        $tmp_name = $_FILES["files"]["tmp_name"][$key];
                        if (is_uploaded_file($tmp_name)) {
                            $filesuploaded += 1;
                        };
                    };
                };
               
                if ($filesuploaded > 0) { 
                    $semi_rand = md5(uniqid(time())); // Generate a boundary string
                    $FileSend = false;
                   
                    $Headers .= "\nMIME-Version: 1.0\n" .
                        "Content-Type: multipart/mixed;\n" .
                        " boundary=\"$semi_rand\"\n";
                   
                    $Message = "This is a multi-part message in MIME format.\n"        .
                        "--$semi_rand\n"                                               .
                        "Content-Type: text/plain; charset=iso-8859-1; format=flowed\n" .
                        "Content-Transfer-Encoding: 7bit\n\n"                          .
                        $Message                    . "\n\n"                          ;
                   
                    foreach($_FILES["files"]["error"] as $key => $error) {
                        if ($error == UPLOAD_ERR_OK) {
                            $tmp_name = $_FILES["files"]["tmp_name"][$key];
                            $file_name = $_FILES["files"]["name"][$key];
                            $file_type = $_FILES["files"]["type"][$key];
                           
                            if (is_uploaded_file($tmp_name) ) {
                                $file = fopen($tmp_name,'rb');
                                $data = fread($file, filesize($tmp_name));
                                fclose($file);
                               
                                // Add file attachment to the message
                                $Message .= "--$semi_rand";
                                $Message .= "\nContent-Type: $file_type; name=\"$file_name\"";
                                $Message .= "\nContent-Transfer-Encoding: base64";
                                $Message .= "\nContent-Disposition: attachment; filename=\"$file_name\"\n";
                                $Message .= chunk_split(base64_encode($data)); // Base64 encode the file data
                               
                                $FileSend = true;
                            };
                        };
                    };
                    if ($FileSend) $Message .= "--$semi_rand--\n\n";
                };
                if (!mail('grennhorn@everymail.org', 'Mail with Attachments', $Message, $Headers)) {
                    WriteError("Nachricht konte nicht versendet werden");
                };
            };
        };
    };
    ?>
    <body>
        <?php SendMail() ?>
        <?php function WriteError($Message) {echo $Message; }; ?>
    </body>
</html>
Schöne Grüße
GreenHorn


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:35 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz