#1.はじめに
LaravelでSendGrid Web APIを使ってメール送信する方法を記載していきます!
メール本文はbladeで書いて、様々なメールのテンプレートを利用できるようにします。
#2.環境
- Laravel Framework 6.0.4
- "sendgrid/sendgrid": "^7.4"
#3.SendGridのコンソールで、API Keyを発行
SendGridにログイン(アカウントがない場合は作成)し、
https://app.sendgrid.com/settings/api_keysにアクセスします。
[Create API Key]をクリックし、APIキーを作成しましょう。
※APIキーは一度しか表示されないので注意!
#4.パッケージのインストール
laravel側で、SendGridのパッケージをインストールしましょう。
composer require sendgrid/sendgrid
#5.envファイルにAPIキーとかを追記
APIキーや送信元アドレスなどを記載しておきます。
#sendgrid
SENDGRID_API_KEY="ここにAPIキーを記載する"
FROM_EMAIL="ここに送信元アドレス"
FROM_NAME="ここに送信元の名前"
#6.処理を書く
controllerやmodelなどにメール送信のコードを書きます。
今回はシンプルにRequestのデータからユーザのデータを取得してメール送信する例です。
※下記ではメール送信に失敗した際の処理をLogとして残していますが、要らない場合は削除してください。
use Exception;
use Log;
~
public function sendMail(Request $request)
{
$data = $request->all();
$email = new \SendGrid\Mail\Mail();
$email->setFrom(getenv('FROM_EMAIL'), getenv('FROM_NAME'));
$email->setSubject("○○○○○○○○○○○○通知");
$email->addTo('送信先アドレス');
$sendGrid = new \SendGrid(getenv('SENDGRID_API_KEY'));
$email->addContent(
"text/plain",
strval(
view(
'emails/templates/notificationMail',
compact('data')
)
)
);
$email->addContent(
"text/html",
strval(
view(
'emails/templates/notificationMail',
compact('data')
)
)
);
try {
$sendGrid->send($email);
return true;
} catch (Exception $e) {
Log::debug($e->getMessage());
return false;
}
}
#7.メール本文をbladeで書く
6.のコードだと、「emails/templates/notificationMail.blade.php」をテンプレートとして指定しています。
viewをメールの体裁ごとに作成しておけば、便利だと思います。
通常のreturn viewと同様にcompactで渡したデータを好き放題表示しましょう!
<div>
<p>
〇〇〇通知です<br>
以下詳細をご確認ください。
</p>
<div>
<p>-------------------------------------------------------</p>
<div>お名前:{{ $data->name }}</div>
<div>メッセージ:{{ $data->message }}</div>
<p>-------------------------------------------------------</p>
</div>
</div>
#8.宛先を複数人にしたいとき
宛先が複数人の場合は、「$email->addTo('送信先アドレス');」をforeach等で追加分実行すればできます。
同じアドレスが複数あるとBad Requestになってしまいメールが送れないので、配列にして重複を除いてから送信するとよいと思います!
$emails = array('test1@example.com', 'test2@example.com','test3@example.com');
$uniqueEmails = array_unique($emails);
$alignedUniqueEmails = array_values($uniqueEmails);
#9.まとめ
あとは、メールを送信したいタイミングで関数を実行するだけです。
関数はどこかに汎用的に使えるようにしておくといいですね!
SendGrid社に感謝です。
アリガトウゴザイマス!