在Laravel中将生成pdf附加到邮件中

时间:2017-03-24 07:13:32

标签: php laravel email pdf

我在电子邮件附加生成pdf时遇到了一些问题,希望您能给我一些建议,请帮助。

这是控制器:

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('christian7andrew@gmail.com', 'PuraBox');
        $message->to($data['email_address']);
        if($data['cc'] != null){
            $message->cc($data['cc']);
        }
        $message->subject($data['subject']);
        $message->Attach($pdf);
    });

    return redirect('/');
}

如何附加$pdf

4 个答案:

答案 0 :(得分:2)

您正在使用:

attach
  

要向电子邮件添加附件,请在传递给Closure的$ message对象上使用attach方法。 attach方法接受文件的完整路径作为其第一个参数:

     

Source

您应该使用$message->attach($pathToFile); 方法(没有大写字母),并且在参数中,您需要传递pdf所在的路径,而不是生成的pdf。就像文档说的那样。

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

    //Full path with the pdf name
    $message->attach('foo/bar/mypdfname.pdf');
});

最后,将会是这样的:

public static void insertText(String text, EditText editText)
{
    int start = Math.max(editText.getSelectionStart(), 0);
    int end = Math.max(editText.getSelectionEnd(), 0);

    editText.getText().replace(Math.min(start, end), Math.max(start, end), text, 0, text.length());
    try
    {
        editText.setSelection(start + 1);
    }
    catch (final IndexOutOfBoundsException e)
    {

    }
}

答案 1 :(得分:1)

我不知道您使用哪个库进行PDF生成,但我想应该有类似这样的API,

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

$path = storage_path('app/public/pdf/')."example.pdf";

$pdf->save($path);

return $path;

然后您可以使用该路径附加到电子邮件。

希望这有帮助。

答案 2 :(得分:0)

也许您可以像

Mail::send('laporan.kirim', $data, function($message) use($data) {
    $message->from('christian7andrew@gmail.com', 'PuraBox');
    $message->to($data['email_address']);
    if($data['cc'] != null){
        $message->cc($data['cc']);
    }
    $message->subject($data['subject']);
    $message->Attach($pdf->output(),"name.pdf");
});

return redirect('/');

}

这可能会帮助您

答案 3 :(得分:0)

对于未来的Google员工:

自Laravel 5.1起,您可以使用attachData()方法直接附加生成的文件,而无需保存。

来源
Manual - section Raw Data Attachments

  

attachData方法将原始数据字节作为第一个参数,将文件名作为第二个参数,并将选项数组作为第三个参数:

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

public function build()
{
    return $this->view('emails.orders.shipped')
                ->attachData($this->pdf, 'name.pdf', [
                    'mime' => 'application/pdf',
                ]);
}