sunshine: SOS ! mail mit pdf - klappt ,aber nur fast

Ich habe mit FPDF ein pdf-file auf dem Server gebastelt : Test.pdf.

Als nächstes versuche ich das Ding via email als attachment zu ver senden.
Das pdf ist ok, kann von IE6 und opera auf dem Server prima dargestellt werden Wird auch nach Binär-Übertragung im FTP auf Windows klasse dargestellt.

NUR _ egal welche MIME-types ich auch durchprobiere (incl. application/pdf) meldet acrobat 5 nach E-mail-Übertragung einen Dateilesefehler.

Das Pdf kommt für A5 unlesbar, als unerwünscht Zugabe liefert er auch noch eine leere, nirgends angeforderte txt-Datei mit, die sich allerdings prima öffnen läßt.

Ich bin für jede Anregung dankbar: PHP=-code: s.u.

Grüße

Sunshine

// $fileatt = ""; // Path to the file
$fileatt_type = "application/octet-stream"; // File Type
// $fileatt_name = ""; // Filename that will be used for the file as the attachment

$email_from = "A@B.de"; // Who the email is from
$email_subject = "xxx"; // The Subject of the email
$email_message = "xxx" ; // Message that the email has in it

$email_to = $email; // Who the email is too

$headers = "From: ".$email_from;

$semi_rand = md5(time());
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";

$headers .= "\nMIME-Version: 1.0\n" .
            "Content-Type: multipart/mixed;\n" .
            " boundary="{$mime_boundary}"";

$email_message .= "This is a multi-part message in MIME format.\n\n" .
                "--{$mime_boundary}\n" .
                "Content-Type:text/html; charset="iso-8859-1"\n" .
               "Content-Transfer-Encoding: 7bit\n\n" .
$email_message . "\n\n";

/********************************************** First File ********************************************/

$fileatt = ""; // Path to the file
$fileatt_type = "application/octett-stream"; // File Type
$fileatt_name = "Test.pdf"; // Filename that will be used for the file as the attachment

$file = fopen($fileatt,'rb');
$data = fread($file,filesize($fileatt));
fclose($file);

$data = chunk_split(base64_encode($data));

$email_message .= "--{$mime_boundary}\n" .
                  "Content-Type: {$fileatt_type};\n" .
                  " name="{$fileatt_name}"\n" .
                  "Content-Disposition: attachment;\n" .
                  " filename="{$fileatt_name}"\n" .
                  "Content-Transfer-Encoding: base64\n\n" .
                 $data . "\n\n" .
                  "--{$mime_boundary}\n";
unset($data);
unset($file);
unset($fileatt);
unset($fileatt_type);
unset($fileatt_name);

$ok = @mail($email_to, $email_subject, $email_message, $headers);

if($ok) {
echo "<font face=verdana size=2>The file was successfully sent!</font>";
} else {
die("Sorry but the email could not be sent. Please go back and try again!");
}

  1. Hello,

    $data = chunk_split(base64_encode($data));

    versuch bitte mal, was passiert, wenn Du bei chunk_split nicht die Standardwerte nimmst, sondern

    $data = chunk_split(base64_encode($data),76,"\n");   ## Standard ist "\r\n"

    Das hat bei mir bisher immer geholfen.
    Aus irgendeiner RFC hatte ich makl rausgepult, dass bas64 nur mit chr(10) begrenzt werden darf.

    Harzliche Grüße vom Berg
    http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau

    1. Danke für den Tipp - aber sorry - keinerlei Veränderung.

      Das PDF ist sauber -solange es der mail nicht in die Finger fällt.

      Grüsse
      sunshine

      1. Hello,

        Das PDF ist sauber -solange es der mail nicht in die Finger fällt.

        schick mir bitte mal eine solche Mail, aber bitte nicht so groß ;-)

        Harzliche Grüße vom Berg
        http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau

        1. Hi,
          sollte unterwegs sein.

          application ist jetzt pdf - aber das ändert eh alles nix.

          Danke fürs Einmischen.

          sunshine

          1. Hello,

            Hi,
            sollte unterwegs sein.

            application ist jetzt pdf - aber das ändert eh alles nix.

            ist gar kein Attachment daran.
            Das PDF hat angeblich 3 Byte Größe. Das schafft  man  nicht ;-))

            Da muss also etwas beim Zusammenstellen verloren gehen.

            Harzliche Grüße vom Berg
            http://www.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau

            1. Habe eine Mail an mich (Outlook) weitergeleitet und hoffe, daß er die beiden Attachments auch brav ausliefert.

              Danke.

              sunshine

              1. Hello,

                Habe eine Mail an mich (Outlook) weitergeleitet und hoffe, daß er die beiden Attachments auch brav ausliefert.

                Ist wieder nur ein PDF-Attachment ohne Inhalt daran

                ------=_NextPart_001_0011_01C77F74.B3C34040--

                ------=_NextPart_000_0010_01C77F74.B3BB9F20
                Content-Type: application/pdf;
                 name="Test.pdf"
                Content-Transfer-Encoding: 7bit
                Content-Disposition: attachment;
                 filename="Test.pdf"

                ------=_NextPart_000_0010_01C77F74.B3BB9F20
                Content-Type: text/plain;
                 name="ATT00014.txt"
                Content-Transfer-Encoding: 7bit
                Content-Disposition: attachment;
                 filename="ATT00014.txt"

                ------=_NextPart_000_0010_01C77F74.B3BB9F20--

                Harzliche Grüße vom Berg
                http://www.annerschbarrich.de

                Tom

                --
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                Nur selber lernen macht schlau

                1. Hallo

                  Test.pdf bekomme ich als pdf- Attachment mit Lesefehler angezeigt.
                  filename="ATT00014.txt" zeigt ermir als leeren, unbestelltes text-Attachment an.

                  Muß wohl wirklich irgendwie mit dem Einlesen zu tun haben, was aber  filename="ATT00014.txt" nicht erklärt.

                  Habe das PDF (einfach nur Hello World), so wie es nach FTP-Binärübertragung bei mir auf dem PC auftaucht - nämlich lesbar mal wietergeleitet.

                  Viele Grüsse und vielen Dank
                  sunshine

                  1. Hello,

                    Test.pdf bekomme ich als pdf- Attachment mit Lesefehler angezeigt.
                    filename="ATT00014.txt" zeigt ermir als leeren, unbestelltes text-Attachment an.

                    Muß wohl wirklich irgendwie mit dem Einlesen zu tun haben, was aber  filename="ATT00014.txt" nicht erklärt.

                    Nö, der Fehler steckt in Deinem Script.
                    Repariere es, wie in https://forum.selfhtml.org/?t=150529&m=978415
                    schon erläutert.

                    Dann klappts auch mit dem Attachment-Versand

                    Harzliche Grüße vom Berg
                    http://www.annerschbarrich.de

                    Tom

                    --
                    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                    Nur selber lernen macht schlau

                    1. OH Je !!!!

                      Kaum macht man es richtig, schon gehts.

                      Die beiden Bindestriche haben mir das unerwünschte Textfile abgeschafft.

                      Der Hinweis mit dem leeren PDF war auch ein Volltreffer - schließlich war das einzulesende File mit "" angegeben !!!!

                      Herzlichen Dank, du bist echt ein Engel !

                      Liebe Grüße in den Harz

                      Sunshine

                      1. Hello,

                        Herzlichen Dank, du bist echt ein Engel !

                        Hoffentlich nicht so bald. Es war schon wieder kurz davor :-(

                        Harzliche Grüße vom Berg
                        http://www.annerschbarrich.de

                        Tom

                        --
                        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                        Nur selber lernen macht schlau

                        1. Hi

                          Herzlichen Dank, du bist echt ein Engel !

                          Hoffentlich nicht so bald. Es war schon wieder kurz davor :-(

                          --Na ja - villeicht solltest du wegen ein paar dusseliger Fragen nicht jedesmal gleich kopfüber aus dem Fenster springen ...

                          Herzlichen Dank noch mal

                          • und alles Gute -

                          sunhine

                      2. hallo,

                        Kaum macht man es richtig, schon gehts.

                        Siehe Zitatesammlung

                        Grüße aus Berlin

                        Christoph S.

                        --
                        Visitenkarte
                        ss:| zu:) ls:& fo:) va:) sh:| rl:|
                        1. Hello,

                          Kaum macht man es richtig, schon gehts.

                          Siehe Zitatesammlung

                          Um es auch für Gäste lesbar zu machen...

                          Harzliche Grüße vom Berg
                          http://www.annerschbarrich.de

                          Tom

                          --
                          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                          Nur selber lernen macht schlau

  2. Hello,

    /********************************************** First File ********************************************/

    $fileatt = ""; // Path to the file
    $fileatt_type = "application/octett-stream"; // File Type
    $fileatt_name = "Test.pdf"; // Filename that will be used for the file as the attachment

    $file = fopen($fileatt,'rb');
    $data = fread($file,filesize($fileatt));

    echo "<p>Dateigroesse: ".strlen($data)."</p>\n";  ### zur Kontrolle

    fclose($file);

    $data = chunk_split(base64_encode($data));

    echo "<pre>\n";
      echo $data;                                       ### Zur Kontrolle
      echo "</pre>\n";

    $email_message .= "--{$mime_boundary}\n" .
                      "Content-Type: {$fileatt_type};\n" .
                      " name="{$fileatt_name}"\n" .
                      "Content-Disposition: attachment;\n" .
                      " filename="{$fileatt_name}"\n" .
                      "Content-Transfer-Encoding: base64\n\n" .
                     $data . "\n\n" .
                      "--{$mime_boundary}\n";

    Bau mal bitte die Kontrollen ein.
    Außerdem sind die vorgeschriebenen Zeilenumbrüche für Mail-Header "CrLf" also  0D 0A

    Harzliche Grüße vom Berg
    http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau

  3. Hi!

    $headers .= "\nMIME-Version: 1.0\n" .
                "Content-Type: multipart/mixed;\n" .
                " boundary="{$mime_boundary}"";

    Die Header müssen laut dem SMTP-RFC mit \r\n abgetrennt werden und nicht nur mit einem \n.
    Die meisten MTA sind zwar so eingestellt, daß es mit einem \n auch funktioniert, aber es ist dennoch falsch.

    $fileatt_type = "application/octet-stream";
    $fileatt_type = "application/octett-stream";

    Du solltest dich für eine Schreibweise entscheiden. Ich würde die erste nehmen, da die zweite falsch geschrieben ist. ;-)

    Der korrekte Mime-Type für eine PDF-Datei ist application/pdf.

    In deiner zweiten Version sehe ich überhaupt keine Header. Der Content-Type wird da nur in $email_message angeführt. Diese Mail wird dann sicherlich als text/plain verschickt. Oder hast du dort nur vergessen, den entsprechenden Codeabschnitt zu posten?

    Schöner Gruß,
    rob

  4. Hello,

    $email_message .= "--{$mime_boundary}\n" .

    "Content-Type: {$fileatt_type};\n" .
                      " name="{$fileatt_name}"\n" .
                      "Content-Disposition: attachment;\n" .
                      " filename="{$fileatt_name}"\n" .
                      "Content-Transfer-Encoding: base64\n\n" .
                     $data . "\n\n" .

    "--{$mime_boundary}\n";

    Nun schau Dir das mal an.
    Fehlt da nicht was?
    Das Attachment ist niemals zuende!

    "--{$mime_boundary}--\n";

    wäre wohl besser

    Harzliche Grüße vom Berg
    http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau

    1. Hello,

      $email_message .= "--{$mime_boundary}\n" .

      "Content-Type: {$fileatt_type};\n" .
                        " name="{$fileatt_name}"\n" .
                        "Content-Disposition: attachment;\n" .
                        " filename="{$fileatt_name}"\n" .
                        "Content-Transfer-Encoding: base64\n\n" .
                       $data . "\n\n" .
                          "--{$mime_boundary}\n";

      Nun schau Dir das mal an.
      Fehlt da nicht was?
      Das Attachment ist niemals zuende!

      "--{$mime_boundary}--\n";

      wäre wohl besser

      Jow,

      was zwei Bindestriche alls ausmachen, scnr, roro