Laravel7でPDFを生成してファイル添付してメール送信する処理を作ることになったので、
流れをメモっときます。ローカル環境でやってます。
まずは、dompdfを追加
hoge@mac %composer require barryvdh/laravel-dompdf
dompdfでPDF生成するとサイズが大きくなっちゃうので、小さくする設定追加。
enable_font_subsettingをtrueにする。
hoge@mac %php artisan vendor:publish --provider="Barryvdh\DomPDF\ServiceProvider" hoge@mac %vi config/dompdf.php 74 "chroot" => realpath(base_path()), 75 76 /** 77 * Whether to enable font subsetting or not. 78 */ 79 "enable_font_subsetting" => false, ↓ 79 "enable_font_subsetting" => true, // trueに変更 80 81 /** 82 * The PDF rendering backend to use
次に送信するためのメール設定追加
hoge@mac %php artisan make:mail CommonMail hoge@mac %vi app/Mail/CommonMail.php class CommonMail extends Mailable { use Queueable, SerializesModels; private $params = array(); /** * Create a new message instance. * * @return void */ public function __construct($params) { //パラメータ設定 $this->params = $params; } /** * Build the message. * * @return $this */ public function build() { return $this->from($this->params['from']) ->subject($this->params['subject']) ->view($this->params['view']) //->text($this->params['text']) ->with($this->params['data']) ->attach($this->params['file']); } }
app/Mail/配下にファイルを生成して、ファイル内部を上記のように修正。
今回はテキスト送信しないのでコメントアウトしてますが、text使いたい場合はコメント外してください。
/** * PDF送信ページ */ function send() { // viewに値を渡す場合、配列に設定 $viewData = []; // PDFを生成(ファイル名はuniqid) $fileName = uniqid() . ".pdf"; $pdf = \PDF::loadView('hoge.send', // PDF用のviewの設定 compact('payslip') )->setPaper('a4', 'landscape'); // A4横向きの設定 // ファイルをstorage配下に一時保存 \File::append(storage_path('app/tmp/' . $fileName), $pdf->output()); // 先ほど作ったCommonMailを使ってメール送信 $params = array(); $params['from'] = 'test@test.com'; $params['subject'] = 'テストメール送信'; $params['view'] = 'payslip.mail'; $params['data'] = ''; $params['file'] = storage_path('app/tmp/' . $fileName); Mail::to('send@ggmail.com')->send(new CommonMail($params)); }
ローカルテストする際、メール送信ができないためmailtripを使用
歯車マークの設定をクリックすると、設定方法が出てきます。今回はLaravelなのでここを確認。
2枚目の設定内容を.envに設定したら完了。
コメント