人気のPHP WEBアプリケーションフレームワークLaravelのTipsを記録していきます

LaravelでSendgrid API 使ってメールを送信する

● LaravelでSendgrid API 使ってメールを送信する

パッケージ laravel-sendgrid-driver をインストールすることで、
通常のSMTPサーバーを使ったメール送信からSendGridAPIを使ったメール送信に簡単に切り替えたりまた戻すことができます。

・1. s-ichikawa/laravel-sendgrid-driver のインストール

composer require s-ichikawa/laravel-sendgrid-driver

・2. 設定ファイルへ記述

config/mail.php へ以下を追加

    'mailers' => [
        // ● 追加
        'sendgrid' => [
            'transport' => 'sendgrid',
        ],

config/services.php へ以下を追加

    // ● 追加
    'sendgrid' => [
        'api_key' => env('SENDGRID_API_KEY'),
    ],

.env へ以下を追加

# ● SendGrid設定
MAIL_DRIVER=sendgrid
MAIL_MAILER=sendgrid 
SENDGRID_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

.env の以下をコメントアウト

# MAIL_MAILER=smtp

これだけで ok です。

● 3. Laravelはどこを見てメール送信のドライバを決定しているのか?

vendor/laravel/framework/src/Illuminate/Mail/MailManager.php:404

    protected function getConfig(string $name)
    {
        // Here we will check if the "driver" key exists and if it does we will use
        // the entire mail configuration file as the "driver" config in order to
        // provide "BC" for any Laravel <= 6.x style mail configuration files.

        return $this->app['config']['mail.driver']
            ? $this->app['config']['mail']
            : $this->app['config']["mail.mailers.{$name}"];
    }

つまり .env の MAIL_DRIVER を見ているので、切り替えたい場合はここを変更しましょう。

SendGridを使用する場合

MAIL_DRIVER=sendgrid

SMTPサーバを使用する場合

MAIL_DRIVER=smtp

● SendGridを使って同時に複数のメールアドレスへ同時にメール配信する

addTo()addTos() メソッドを使用するとあるユーザに送ったメールに他のユーザのメールアドレスも見えてしまいます。
Personalizationを使用しましょう

        // To (全員のアドレスが見えてしまう)
        // foreach ($to_emails as $to) {
        //     $email->addTo( $to );    
        // }

        // Personalization (全員のアドレスを隠す)
        foreach ( $to_emails as $email_address ) { 
            $personalization = new Personalization();
            $personalization->addTo( new To( $email_address ) );
            $email->addPersonalization( $personalization );
        }        
No.1831
03/10 20:59

edit