SendGrid APIキーを利用して簡単に実際のメール送信を行う方法

Tools/Services

 

1.前提条件

本記事では、フォームの作成やメール送信処理の実装部分については解説していません。

フォームの作成方法については以下の記事を参考下さい。

Laravel validation バリデーションの作成から使い方まで紹介
Laravel validation(バリデーション)の作成方法から基本的な使い方を紹介致します。テキストフィールドにおいて、任意の値を受け付けていたとすると脆弱性を生んでしまうため、入力フォームには適切にバリデーションする必要があります。バリデーションの作成とメッセージの表示についても解説します。

メール送信処理の実装部分については以下の記事を参考下さい。

Laravelでお問い合わせフォームの登録処理とメール送信処理ついて紹介
Laravelを利用してお問い合わせフォームの登録処理とメール送信処理ついて紹介致します。お問い合わせフォームに限らず、ユーザー登録などの登録処理でも使い回し可能です。メールの送信処理にはmailableクラスを作成します。送信テスト確認用にmailtrapというサービスを利用しています。

実装処理の説明部分は、laravelを利用した想定で記載しています。

他の言語での使い方はメール送信チュートリアル【まとめ】SendGridのブログ記事を見てみるとよいかと思います。

2.SendGridへの新規会員登録

SendGridを利用するには、まず会員登録をして審査にパスする必要があります。
会員登録とAPI Keyの取得に分けて解説していきます。

2.1会員登録

SendGridサイトにアクセスして、「無料ではじめる」から新規会員登録ページを開きます。

SendGrid

SendGrid2

SendGrid2

メールが入力したメールアドレス宛に届くので、メールを開きます。

 

SendGrid3-email

メール内の「ユーザー情報を登録」をクリック。

SendGrid4

個人情報を入力。

SendGrid5-personal-info

(パスワードは、ログインに必要になるため忘れないように)

SendGrid6-purpose

利用目的を適宜選択。

利用用途の詳細は審査があるため、適切に記入。
(利用目的で検証用を選択している場合、上記のような文面で審査は通るかと思います)

SendGrid8

適宜入力したら「登録する」をクリック。

SendGrid9

登録完了までいったら、一旦は登録作業は完了です。
メールが来るまで約1日ほど待ちます。
(平日に新規登録した際、翌日に利用可能になったメール通知が届きました)

2.2 API keyの取得

SendGrid-email

「SendGridにようこそ!」といったメールが届いたら、ユーザ名とパスワードでSendGridにログインします。

xxxxx@kke.com」のようなユーザ名をメール内で確認ができます。
パスワードは新規登録時に設定したパスワードです。

SendGridにログインしたら、API Keyを作成します。

SendGrid-API-keys

SettingsからAPI Keysを探します。
「Create API Key」をクリック。

SendGrid-API-keys2

API Key Nameを入力して、「Create & View」をクリック。

SendGrid-API-keys3

API Key が作成できたら、値を失くさないように保管しておきましょう。

2.3 APIキーの設定

API Keyをコピーしたら、.env(環境設定ファイル)に値を張り付けます。
こちらのSMTPの設定を参考に、以下のように設定します。

MAIL_MAILER=smtp
MAIL_HOST=smtp.sendgrid.net
MAIL_PORT=587
MAIL_USERNAME=apikey
MAIL_PASSWORD=[API Key]
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=test-laravel8@test.com

MAIL_USERNAMEには「apikey」でOKです。
MAIL_PASSWORDにコピーしたAPI Keyを張り付けます。
MAIL_FROM_ADDRESSにはメールを受信したときに表示されるメールアドレスです。

送信先が自分(管理者)宛の場合は、以下のように記載できます。

 Mail::to(env('MAIL_TO'))
->send(new ContactMail($contact));

Mail::toで送信先を指定し、sendにてMailableクラスを使用しています。(Laravel利用)
詳細はこちらの記事を参考下さい。

.env側は以下のように設定

MAIL_TO=[your email address]

3.テスト確認

contact-form-send

フォームに値を入力して「送信」。

contact-form-sent

フォーム側で送信処理が完了したら、SendGridにログインしてdashboardを表示します。

sendgrid-dashboard

メールがうまく送信されていれば、日付ごとに処理状況が表示されるようになります。左のメニューにあるStatsのOverviewやGlobal Statsでも確認できます。

dashboardまたはStatsで何も表示されていない場合は、.env(環境設定)が反映されていない可能性があるため、キャッシュのクリア等を行います。

php artisan cache:clear
php artisan config:clear

またport番号が587でうまくいかない場合、2525に変えて試してみましょう。

送信先に指定したメールアドレス宛にメールが届いているかメーラーを確認。

SendGrid メール確認

フォームに入力した内容で、メール受信できていることが確認できます。

メールのタイトル:処理側で設定したsubject。
Laravel:.envで指定しているAPP_NAMEの値
test-laravel8@test.com:.envで指定しているMAIL_FROM_ADDRESSの値

sendgrid.net 経由を消したい場合は、SendGridのSender Authenticationの設定をする必要があります。(また独自ドメインが必要です)

Githubにサンプルコードを公開していますので、メール送信処理を参考に頂ければと思います。ルーティングは/contact で問い合わせフォームを表示するようにしています。

関連コード

app/Http/Controllers/ContactController.php
app/Http/Requests/ContactRequest.php
app/Models/Contact.php
app/Mail/ContactMail.php
resources/views/contact.blade.php
resources/views/emails/contact.blade.php
routes/web.php