Я пытаюсь создать поток PDF, используя библиотеку FPDF, и отправить PDF по электронной почте с помощью Swift Mailer. Ниже мой код. Почта отправляется успешно, и даже PDF также прилагается, но формат pdf равен нулю и поэтому не может быть открыт. Когда я загружаю pdf с помощью $ pdf-> Output ('receipt.pdf', 'D'), он успешно работает и содержимое PDF также присутствует. Может ли кто-нибудь помочь мне определить, что я делаю что-то неправильно? Или мне нужно установить некоторые дополнительные поля в сообщении, чтобы он правильно отправил PDF-файл. Я просмотрел все сообщения, связанные с FPDF и swiftmailer, но не смог определить проблему в моем коде.
$pdf = new FPDF(); $pdf->AddPage(); $pdf->Text(80, 30, "Dummy text"); $pdfstream = $pdf->Output('receipt.pdf', 'S'); $attachment = Swift_Attachment::newInstance($pdfstream, 'name.pdf', 'application/pdf'); $message = Swift_Message::newInstance('Dummy subject') ->setFrom(array("abc@xyz.com" => 'XYZ')) ->setTo('pqr@abc.com') ->setBody('Dummy body text'); $message->attach($attachment); $transport = Swift_MailTransport::newInstance(); $mailer = Swift_Mailer::newInstance($transport); $result = $mailer->send($message);
EDIT 1: Ниже работает отлично для меня. Обратите внимание, что я использовал две внешние библиотеки SwiftMailer и FPDF, поэтому вам нужно сделать необходимые вещи, такие как импорт и т. Д., Чтобы заставить их работать.
$pdf = new FPDF(); $pdf->AddPage(); $pdf->Text(80, 30, "Dummy text"); $data=$pdf->Output('receipt.pdf', 'S'); $message = Swift_Message::newInstance('Subject') ->setFrom(array("Geoff" => 'abc@xyz.com')) ->setTo('xyz@abc.com') ->setBody('This is body text', 'text/html'); if(!empty($data)) { $attachment = Swift_Attachment::newInstance($data, 'pdf_name.pdf', 'application/pdf'); $message->attach($attachment); } $transport = Swift_MailTransport::newInstance(); $mailer = Swift_Mailer::newInstance($transport); $result = $mailer->send($message);
Попробуй это:
$pdfstream = $pdf->Output('receipt.pdf', 'S'); $emailStream = 'Content-Type: application/pdf;'."\r\n"; $emailStream.= ' name="name.pdf"'."\r\n"; $emailStream.= 'Content-Transfer-Encoding: base64'."\r\n"; $emailStream.= 'Content-Disposition: attachment;'."\r\n"; $emailStream.= ' filename="name.pdf"'."\r\n\r\n"; $emailStream.= chunk_split(base64_encode($pdfstream), 76, "\r\n"); $attachment = Swift_Attachment::newInstance($emailStream, 'name.pdf', 'application/pdf');