パッケージ laravel-sendgrid-driver をインストールすることで、
通常のSMTPサーバーを使ったメール送信からSendGridAPIを使ったメール送信に簡単に切り替えたりまた戻すことができます。
composer require s-ichikawa/laravel-sendgrid-driver
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 です。
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
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 );
}