Michael S.: PHP mail mit Angang versenden - will einfach nicht - Bitte Hilfe

Hallo,

versuche seit stunden einen PDF - Anhang per mail funktions zu versenden und es will einfach nicht...

Hier mal der Code:
// Hier wird das PDF gespeichert aber nicht ausgegeben!
$file = "tempfile_KDAend.pdf";
$pdf->Output("$file",F);

// Hier wird das PDF als Email versand
$Empfaenger = "empfaenger@provider.de";
$Betreff = "Änderung im Kundenstamm 290";
$Dateiname = "tempfile_KDAend.pdf";
$DateinameMail = "tempfile_KDAend.pdf";
$Header = "From: absender@provider.de";
$Trenner = md5(uniqid(time()));
$Header .= "\n";
$Header .= "MIME-Version: 1.0";
$Header .= "\n";
$Header .= "Content-Type: application/pdf; name=$DateinameMail";
$Header .= "\n";
$Header .= "Content-Transfer-Encoding: base64";
$Header .= "\n";
$Header .= "Content-Disposition: attachment; filename=$DateinameMail";
$Header .= "\n\n";
$Dateiinhalt .= fread(fopen($Dateiname, "r"), filesize($Dateiname));
$Header .= "\n";
$Header .= "--$Trenner--";
mail($Empfaenger, $Betreff, "", $Header);

Eine Email wird zwar mit Anhang versendet, jedoch kann ich diese nicht öffnen. Der A.Reader wirft folgende Meldung aus:

A-Reader konnte <PDF-Datei> nicht öffnen, da der Dateityp nicht unterstützt wird... z.B. wenn sie als E-Mail-Anhang geschickt und nicht korrekt decodiert wurde.

Decodiert ist die Datei doch...

Was mache ich da falsch bzw. bitte könntet Ihr mir helfen ?

Gruß
Michael

  1. Hi,

    versuche seit stunden einen PDF - Anhang per mail funktions zu versenden und es will einfach nicht...

    Fehler #1: Headerzeilen werden in Mails mit \r\n abgeschlossen, nicht mit einem einfachen \n. Manche Mailserver und viele sendmail-Implementierungen sind da aber großzügig, so dass das nicht unbedingt zum Versagen führen muss.

    $Header .= "Content-Transfer-Encoding: base64";

    Hier behauptest du, dass der Mail-Body (der in diesem Fall ausschließlich aus dem Anhang besteht, was unanständig ist) base64-codiert ist.

    $Dateiinhalt .= fread(fopen($Dateiname, "r"), filesize($Dateiname));

    Dann liest du den Dateiinhalt, kopierst ihn uncodiert in eine Variable und schaust ihn nie wieder an.

    mail($Empfaenger, $Betreff, "", $Header);

    Außerdem trennst du nicht sauber zwischen Mail-Inhalt und Headerzeilen.

    Eine Email wird zwar mit Anhang versendet, ...

    Nein. Es wird eine Mail versendet, auf deren Umschlag steht: "Dokumente inliegend", aber jemand hat vergessen, die Dokumente auch in den Umschlag zu stecken.

    So long,
     Martin

    --
    Es existiert kein Weg, "für" etwas zu optimieren, sondern nur gegen alles andere.
      (Cheatah)
    1. Hi,

      danke für deine Antwort... aber ehrlich gesagt versteh ich heut nur noch bahnhof 00000...

      Könntest du mir das vielleicht in den Code einbauen?
      Kann das so nicht mehr nachvollziehen...

      Bin da jetzt auch kein Profi... Leihe eher...

      Wäre super ...

      Danke vorab und Gru?
      Michael

      1. Hi,

        danke für deine Antwort... aber ehrlich gesagt versteh ich heut nur noch bahnhof 00000...

        das ist kein Problem, morgen ist schließlich auch noch ein Tag.

        Könntest du mir das vielleicht in den Code einbauen?

        Bei solchen Fragen mache bitte immer ein Angebot bezüglich der Bezahlung.

        Kann das so nicht mehr nachvollziehen...

        Ausschlafen, duschen, waschen, frühstücken, Tagewerk beginnen und noch mal versuchen.

        Bin da jetzt auch kein Profi...

        Etwas beruflich zu machen ist keine notwendige Bedingung, um etwas zu verstehen.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
      2. Hallo,

        Leihe eher...

        Darf ich dich ausleihen?

        mfg, Flo

        --
        Developers are dying. Computers are getting trash. CEO's become forgetten. The only remaining things are ideas, lies and crises. So if you want to be immortal, first think, than stop it and go to microsoft and become later a manager at Lehman Brothers...
        sh:) fo:| ch:? rl:( br:^ n4:| ie:{ mo:| va:} de:> zu:} fl:{ ss:) ls:< js:|
        *Zu dem de:> Ich benutze wegen IE im moment noch tabellen, weil dieser display:table noch nicht versteht. Ich werde aber, wenn IE 6 & IE 7 < 10% mein neues CSS-Layout einspielen...
      3. Hello,

        nimm Dir ein Outlook Express und bau dir damit ein paar Mails, von der einfachsten bis zur komplizierten. Dann sendest Du sie ab, sodass Du sie mit Deinem POP3-Client abholen kannst.

        Schau sie Dir genau an mit einem Hex-Editor.

        Besser kann man die Notwendigkeiten und die überflüssigen Microsoft-Zutaten nicht erklären... :-)

        Liebe Grüße aus Syburg bei Dortmund

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
    2. Hello,

      Fehler #1: Headerzeilen werden in Mails mit \r\n abgeschlossen, nicht mit einem einfachen \n. Manche Mailserver und viele sendmail-Implementierungen sind da aber großzügig, so dass das nicht unbedingt zum Versagen führen muss.

      Fehlerhafter Tipp:
      Ohne Rückfrage danach, womit die Mail auf den Weg geschickt wird, kann man nichts über die __in_PHP_notwendigen__ Headerendezeichen sagen.

      Wird die Mail mittels sendmail-Script auf einem Linux-Host versendet, ist es in einem Teil notwendig , nur \n zu verwenden, in der ganzen Mail aber möglich. In den "echten" Headerzeilen wandelt PHP das dann sowieso in \n um, denn so will es das Sendmail-Script haben, um dann selber wieder ganz stumpf aus jedem \ UND aus jedem \r ein \r\n zu machen.

      Im wweiteren Verlauf der Mail greift PHP aber nicht mehr ein, sodass der Programmierer daran denken muss, mur \n zu verwenden. Das ist besonders auch bei wordwrap() für base64-codierte Teile zu beachten.

      Nur, wenn die Mail von PHP direkt an den MTA übergeben wird, also i.d.R. über Port 25 an den smtp-Daemon (so wie auf WinDOSen), dann muss man gelich die richtigen Zeilenbegrenzer benutzen, also \r\n. Da greift kein "korrigierendes" Script mehr ein.

      Auf jeden Fall sollte ein PHP-Administrator-User das Verhalten seines Systems überprüfen, bevor er sich wundert, warum die Mails nicht transportiert werden. Hängen bleiben können die auf der ganzen Strecke...

      Liebe Grüße aus Syburg bei Dortmund

      Tom vom Berg

      --
      Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de