Senden Sie eine E-Mail mit PDF-attachment über PHP

Ok Jungs, dies ist mein Erster thread, und ich habe gesucht online, aber ohne Glück.
Ich mache ein Praktikum und ich arbeite an einem Projekt, das erfordert, dass Sie mich zu erstellen, eine Webseite, eine pdf-Datei generiert, wenn ein Nutzer seine/Ihre Informationen. Sobald ein Kunde klickt auf die Schaltfläche "senden", 3 Dinge, die passieren müssen:

  1. Speichern von Informationen in die Datenbank(fertig),
  2. Senden Sie dem Mitarbeiter eine E-Mail mit dem neuen Kunden-Informationen (fertig), und
  3. Senden dem Kunden eine "danke-Nachricht" E-Mail mit einer pdf-Datei-Anhang (funktioniert nicht).

Ich meine, der Kunde hat eine email erhalten, aber wenn er/Sie öffnet die pdf-Datei, bekomme ich folgende Fehlermeldung:

"Acrobat konnte nicht oen 'Dateiname', weil Sie entweder nicht unterstützten Dateityp oder die Datei beschädigt wurde(z.B. wurde es als email-Anhang versendet und nicht korrekt dekodiert)..."

Bitte Bedenken Sie, dies ist meine fisrt Zeit dabei ein Projekt auf das erstellen einer pdf-Datei als Anhang. Wenn mir jemand helfen könnte dieses problem zu beheben, das wäre toll. Danke!

Hier ist mein code:

<?php
//once there are no errors, as soon as the customer hits the submit button, it needs to send an email to the staff with the customer information
        $msg = "Name: " .$_POST['name'] . "\n"
            ."Email: " .$_POST['email'] . "\n"
            ."Phone: " .$_POST['telephone'] . "\n"
            ."Number Of Guests: " .$_POST['numberOfGuests'] . "\n"
            ."Date Of Reunion: " .$_POST['date'];
        $staffEmail = "staffinfo";

        mail($staffEmail, "You have a new customer", $msg); //using the mail php function to send the email. mail(to, subject line, message)

        //once the customer submits his/her information, he/she will receive a thank you message attach with a pdf file.
        $pdf=new FPDF();
        $pdf->AddPage();
        $pdf->SetFont("Arial", "B", 16);
        $pdf->Cell(40, 10, "Hello World!");

        //email information
        $to = $_POST['email'];
        $from = $staffEmail;
        $subject = "Thank you for your business";
        $message = "Thank you for submitting your information!";

        //a random hash will be necessary to send mixed content
        $separator = md5(time());

        //carriage return type (we use a PHP end of line constant)
        $eol = PHP_EOL;

        //attachment name
        $filename = "yourinformation.pdf";

        //encode data (puts attachment in proper format)
        $pdfdoc = $pdf->Output("", "S");
        $attachment = chunk_split(base64_encode($pdfdoc));

        //encode data (multipart mandatory)
        $headers = "From: ".$from.$eol;
        $headers .= "MIME-Version: 1.0".$eol;
        $headers .= "Content-Type: multipart/mixed; boundary=\"".$separator."\"".$eol.$eol;
        $headers .= "Content-Transfer-Enconding: 7bit".$eol;
        $headers .= "This is a MIME encoded message.".$eol.$eol;

        //message
        $headers .= "--".$separator.$eol;
        $headers .= "Content-Type: text/html; charsrt=\"iso-8859-1\"".$eol;
        $headers .= $message.$eol.$eol;

        //attachment
        $headers .= "--".$separator.$eol;
        //$headers .= "Content-Type: application/octet-stream; name=\"".$filename."\"".$eol;
        $headers .= "Content-Type: application/zip; name=\"".$filename."\"".$eol;
        $headers .= "Content-Transfer-Encoding: base64".$eol;
        $headers .= "Content-Disposition: attachment".$eol.$eol;
        $headers .= $attachment.$eol.$eol;
        $headers .= "--".$separator."--";

        //send message
        mail($to, $subject, $message, $headers);

    }
}
?>
  • Ich bemerkte, dass Sie application/zip. Versuchen application/pdf statt.
  • Ich hab das auch, aber es wird nicht funktionieren.
  • Hatte nicht die eine richtige denken, es noch nicht, aber IIRC die eol für MIME-Header ist immer "\r\n" der eigentliche Wert in PHP_EOL variiert je nach dem Betriebssystem; das könnte einen Schraubenschlüssel in den Werken, die in Ihrem $headers var; obwohl laut spec sollte tolerant sein: w3.org/Protocols/rfc2616/rfc2616-sec19.html (19.3)
  • Ich empfehle, verwenden Sie eine mailing-Bibliothek, wie swiftmailer oder phpmailer. Hand crafting-mime-E-Mails ist das allerletzte.
  • mögliche Duplikate von php-senden Sie e-mail mit attachment
  • Ok nikc, wenn die Antwort unten nicht funktioniert, ich werde bei dem link den du mir geschickt hast. Danke!
  • Hast du versucht den Anhang öffnet Sie im Editor, um zu sehen, ob ein PHP-Fehler Unterbrechung Ihrer output-stream?

Schreibe einen Kommentar