如何在laravel中以pdf格式发送刀片作为附件?

时间:2018-12-02 16:52:51

标签: laravel email attachment snappy

  

我想使用laravel将刀片文件作为附件发送到邮件中。我是   为此在下面编写代码,但无法正常工作。

     

下面是我的控制器,我从表单中获取数据然后发送   将此数据发送到我的附件功能所在的另一个控制器   叫。

$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();

返回此变量后,显示错误:

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个文件则直接从文件夹发送。并且最后一个从刀片文件附加。

->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,然后作为附件发送。 我正在使用snappy for pdf。

2 个答案:

答案 0 :(得分:0)

  

我不知道如何首先将此文件更改为pdf,然后作为附件发送。我正在使用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());

答案 1 :(得分:0)

我认为您想将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