如何将 blade 作为 pdf 格式的附件发送到 laravel?

How to send blade as attachment in pdf format in laravel?

I want to send blade file as attachment in mail with laravel. I am writing below code for this but its not working.

Below is my controller where i am getting data from form and then send this data to another controller where my attachment function is called.

$data = array('shareholders'=>$request->com_shareholder_count,'contract_send'=>$request->contract_send);
$to = $mail_log->to_email_id = $request->email_id;
$mail = Mail::to($to)->send(new SendMailable($data));

这是我的 SendMailable 控制器:

$director_info_pdf = view('directors_info',compact('data'))->render();

在 return 这个变量上显示错误:

message: "Invalid view.", exception: "InvalidArgumentException",…}
exception: "InvalidArgumentException"
file: "C:\xampp\htdocs\caps_admin\vendor\laravel\framework\src\Illuminate\Mail\Mailer.php"
line: 285
message: "Invalid view."

在这一行之后,我正在编写代码来附加我的文件。我发送一些文件的地方,其他 3 个文件直接从文件夹发送。最后一个附在 blade 文件中。

->attachdata($director_info_pdf, 'dynamic_data.pdf')
        ->attach( $public_path.'/'.'contract.pdf', [
                        'as' => 'contract.pdf',
                        'mime' => 'application/pdf',
                    ])
        ->attach($public_path.'/'.'HMRC.pdf',[
                        'as' => 'HMRC.pdf',
                        'mime' => 'application/pdf',
                    ])
         ->attach($public_path.'/'.'clientR3.pdf',[
                        'as' => 'contract1.pdf',
                        'mime' => 'application/pdf',
                    ]);

我可以发送所有 4 个文件作为附件的邮件。但是当我试图在邮件中打开我的文件时,其余 3 个文件正在以 pdf 格式工作。但是 ->attachdata($director_info_pdf, 'dynamic_data.pdf') 这个文件被损坏了。

我不知道如何先将此文件转换为 pdf,然后作为附件发送。 我正在为 pdf 使用 snappy。

I dont know how to first change this file into pdf and then send as attachment. I am using snappy for pdf.

这就是问题所在。您正在附加一个 HTML 文件,并且只是将其命名为 PDF。那行不通的。您确实需要从您呈现的 HTML 视图生成此 PDF。

这里是 snappy 的文档:

https://github.com/barryvdh/laravel-snappy#usage

我建议您继续阅读,因为那里给出的示例非常简单易懂。

这是未经测试的,但是如果您正确设置了 Snappy,根据您的代码,类似这样的东西应该可以工作:

$snappy = App::make('snappy.pdf');
$director_info_pdf = $snappy->getOutputFromHtml(view('directors_info',compact('data'))->render());

我认为您想将 pdf 作为附件发送到您的电子邮件中,而不将其保存在您的系统中。

你可以参考下面的代码来做到这一点。

public function sendmail()
{
        $data["email"]='useremail@gmail.com';
        $data["client_name"]='user_name';
        $data["subject"]='sending pdf as attachment';

        //Generating PDF with all the post details

        $pdf = PDF::loadView('userdata');  // this view file will be converted to PDF

        //Sending Mail to the corresponding user

        Mail::send([], $data, function($message)use($data,$pdf) {
        $message->to($data["email"], $data["client_name"])
        ->subject($data["subject"])
        ->attachData($pdf->output(), 'Your_Post_Detail.pdf', [
                   'mime' => 'application/pdf',
               ])
        ->setBody('Hi, welcome user! this is the body of the mail');
        });
}

希望对您有所帮助。

为了更好的理解可以关注这篇文章

how to send pdf as an attachment in email in laravel