Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Attach generate pdf into mail in Laravel

I've some problem with email attach generate pdf, hope you can give me some advice, please kindly help.

Here is the Controller:

public function kirim(Request $request){
    $keluhan = keluhan::findOrFail($request->id);

    $tindak = DB::table('tindakans')
    ->join('keluhans','keluhans.id','=','tindakans.id_keluhan')
    ->select(DB::raw('tindakans.id, id_keluhan, perbaikan_sementara, revisi_dokumen, target_verifikasi, ttd_tanggung1,
    ttd_tanggung2'))->get();

    $analisa = DB::table('analisas')
    ->join('tindakans','tindakans.id','=','analisas.id_tindakan')
    ->join('keluhans','keluhans.id','=','tindakans.id_keluhan')
    ->select(DB::raw('id_tindakan, analisa, tindakan, pic, tanggal_pelaksanaan'))->get();

    $pdf = \PDF::loadView('laporan.ptkp',compact('keluhan','tindak','analisa','halaman'));
    //return $pdf->stream();

    $data = array(
        'email_address'=>$request->email_address,
        'cc'=>$request->cc,
        'subject'=>$request->subject,
        'keterangantambahan'=>$request->keterangantambahan
    );

    Mail::send('laporan.kirim', $data, function($message) use($data) {
        $message->from('[email protected]', 'PuraBox');
        $message->to($data['email_address']);
        if($data['cc'] != null){
            $message->cc($data['cc']);
        }
        $message->subject($data['subject']);
        $message->Attach($pdf);
    });

    return redirect('/');
}

How can I attach $pdf?

like image 485
Christianus Andre Avatar asked Sep 19 '25 04:09

Christianus Andre


1 Answers

For future Googlers:

Since Laravel 5.1 you can use attachData() method to directly attach generated file without the need for saving it.

Source:
Manual - section Raw Data Attachments

The attachData method accepts the raw data bytes as its first argument, the name of the file as its second argument, and an array of options as its third argument:

 /**
 * Build the message.
 *
 * @return $this
 */

public function build()
{
    return $this->view('emails.orders.shipped')
                ->attachData($this->pdf, 'name.pdf', [
                    'mime' => 'application/pdf',
                ]);
}
like image 169
Adam Brzeziński Avatar answered Sep 20 '25 19:09

Adam Brzeziński