Laravel5.4 SendGridを利用してメール送信

ドライバーを設定

.envファイルを編集
または、config/mail.php を直接編集してもOK

// .env
MAIL_DRIVER=smtp
MAIL_HOST=smtp.sendgrid.net
MAIL_PORT=587
MAIL_USERNAME=SendGridのユーザー名 例)xxx@kke.com
MAIL_PASSWORD=SendGridのパスワード
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=tanaka@sample.com
MAIL_FROM_NAME=田中太郎

mailableクラスをコマンドで作成

コマンドで下記を実行すると「app/Mail/TestMail.php」が生成される。

php artisan make:mail TestMail

生成された TestMail.php を編集

Viewテンプレートは、「resources/views/emails/test.blade.php」を利用する。

$this->subject('テストメールの件名です。')->view('emails.test');

Viewファイル「test.blade.php」を作成

吉田 様
// %name% 様 // SMTP APIで置き換える場合
本文ですよ。

メールを送信する

コントローラ内で下記を記述する。

Mail::to('yoshida@sample.com')->send(new TestMail());

SMTP APIを利用する方法

sendgrid.kke.co.jp/docs/API_Reference/SMTP_API/using_the_smtp_api.html

TestMail.php で下記のように記述する。

/**
 * Build the message.
 *
 * @return $this
 */
public function build()
{
    $this->to('yoshida@sample.com')
        ->subject('テストメール')
        ->view('emails.html') // html形式
        ->text('emails.plain') // プレーンテキスト形式
        ->withSwiftMessage(function ($message) {
            
            $smtpapi = [
                'to' => [
                    'tanaka@sample.com',
                    'sato@sample.com',
                    'yamada@sample.com',
                ],
                'sub' => [
                    '%name%' => [
                        '田中',
                        '佐藤',
                        '山田',
                    ]
                ]
            ];
            
            $message->getHeaders()
                ->addTextHeader('x-smtpapi', json_encode($smtpapi, JSON_PRETTY_PRINT));
        });
}

コントローラからMailableクラスに値を渡す方法

件名をコントローラから渡してみる。

コントローラ

use App\Mail\TestMail;
use Illuminate\Support\Facades\Mail;
$subject_text = '件名ですよ';
Mail::to('yoshida@sample.com')->send(new TestMail($subject_text));

TestMail.php

class TestMail extends Mailable
{
    use Queueable, SerializesModels;

    public $subject_text = '';
    
    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct($subject_text)
    {
        $this->subject_text= $subject_text;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        $this->subject($this->subject_text)->view('emails.test');
    }
}

メールテンプレートを更新しても反映されない場合

キャッシュが効いている可能性がある。下記コマンドで削除する。

php artisan view:clear
よかったらシェアしてね!

この記事を書いた人

目次
閉じる