Twilio SendGridを使ってLaravel PHPでSMTPリレーさせる方法

Twilio SendGridを使ってLaravel PHPでSMTPリレーさせる方法

この記事は Using SendGrid as Your SMTP Relay in Laravel PHP の抄訳です。

まえがき

Laravelは、最も有名なPHP MVCフレームワークの1つです。 個人利用か企業利用かを問わず、プロジェクトの作成に必要な機能が全て提供されています。 Laravelは幅広いSMTPプロバイダをサポートしていますが、現時点ではSendGridをそのまま使用することはできません。

このチュートリアルでは、SendGridを使ってSMTPでメール送信するための実装をします。これを終えた頃には、登録ユーザにメール送信できるLaravelアプリケーションが稼働しているはずです。このアプリケーションの利点は、送信メールが受信者に開封されたかどうかをチェックできるようになることです。

必要なもの

・Laravelを使用できるPHPの開発環境
・グローバルインストールされたComposer
Twilio SendGrid アカウント
・あなたの情熱😀

新しいLaravelプロジェクトの作成

Laravelがインストールされていない場合は、まずインストールをしましょう。 公式ドキュメントのスタートアップガイドに従って、「laravel-email」という名前でLaravelプロジェクトを新規作成するところから始めましょう。 プロジェクトには任意の名前を付けることができます。

$ laravel new laravel-email

上記を実行すると、Laravel v5.8とそれに必要なすべての依存関係がインストールされます。 Composerの post-create スクリプトを実行すると、自動的に .env ファイルの作成と APP_KEY 環境変数の設定が行われます。 自動的に設定されていない場合には、以下のコマンドで APP_KEY.env ファイルに追加してください。

$ php artisan key:generate

次に、DB接続の設定を .env ファイルに追加する必要があります。 このプロジェクトでは、データベースに MySQL を使用します。 ローカルデータベースを作成し、DB_USERNAME , DB_PASSWORD 、および DB_DATABASE の値を .env ファイルに追加しましょう。

SendGridアカウントの作成

Twilio SendGridアカウントを作成しましょう。

SendGrid接続用のAPIキーを作成

SendGrid接続用のAPIキーを作成します。 APIキーには必ず名前を付けてください。 私は laravel-email という名前を付けました。 「Create Key」ボタンをクリックすると、それに紐付くユーザー名、つまり apikey のパスワードが生成されます。

ここまで完了したら、以下のように .env ファイルに認証情報を入力しましょう。

MAIL_DRIVER=smtp
MAIL_HOST=smtp.sendgrid.net
MAIL_PORT=25
MAIL_USERNAME=apikey
MAIL_PASSWORD=<PASSWORD>
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=ankitjain28may77@gmail.com
MAIL_FROM_NAME="Ankit Jain"

これで、SendGrid用のLaravelメールドライバの設定が終わり、configディレクトリ配下の mail.php ファイルをクロスチェックできるようになりました。また、.env ファイルに MAIL_FROM_ADDRESSMAIL_FROM_NAME の環境キーも追加し、のちに名前とアドレスを読み取れるようにしました。 アプリのコーディングが完了したので、次は検証してみましょう。

ログイン/登録用の認証スキャフォールドの作成

Laravelでは、認証の実装は非常に簡単です。 実際、ほぼすべてがすぐに使用できるように構成されています。 はじめての方はドキュメントにてLaravel認証の詳細を確認してください。

以下のコマンドを実行し、認証スキャフォールドをLaravelプロジェクトに追加しましょう。

$ php artisan make:aut

上記を実行すると、プロジェクトの認証スキャフォールドが作られます。 Laravel 5.7以降であればデフォルトでメール検証機能が搭載されているため、まずはデフォルトの機能を使ってみましょう。その後、Laravelのキューに切り替えて、両方の実装を理解できるようにします。

Email Verification機能を使う

Email Verification機能を使用するためには、 App\User モデルが Illuminate\Contracts\Auth\MustVerifyEmail コントラクトを実装していることを確認する必要があります。 App\User モデルファイルを開き、次のように変更しましょう。

# App\User
<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable implements MustVerifyEmail
{
  use Notifiable;
  .
  .
  .
}

user 移行テーブルはすでに email_verified_at 列で構成されており、デフォルトでNullableに設定されています。ここには検証を行った日時が格納されます。 以下のコマンドを実行して、データベースの移行を行いましょう。

$ php artisan migrate

Email VerificationはLaravelに搭載されたオプションの機能であり、検証用のリンクを送信したり検証のためのルートを有効にするだけで実行できます。verify オプションを Auth:routes() メソッドに渡すだけでいいのです。 このオプションを有効にするには、 routes フォルダーの下の web.php ファイルを開いてください。

Auth::routes(['verify' => true]);

Laravelには verified ルートのミドルウェアが付属されており、検証済みユーザのみにアクセスを許可しています。このルートを次のように home ルートに追加しましょう。

Route::get('/home','HomeController@index')->name('home')->middleware('verified');

Email Verification機能を有効化したので、以下のコマンドでLaravelアプリケーションを実行しましょう。

$ php artisan serve

Laravelアプリは localhost:8000 で動作します。それではテストしてみましょう。

Testing

Testing

http://localhost:8000/register

登録を終えると、Laravelアプリケーションが期待どおりに動作していることを示す以下のページが表示されます。 アプリケーションから送信されたメールを確認してみましょう。

http://localhost:8000/email/verify

http://localhost:8000/email/verify

メールをVerify

メールをVerifyすると、 /home ルートに自動的にリダイレクトされます。 SendGridのダッシュボードでアクティビティを確認し、このプロセスがどのように機能するかを理解しましょう。

アクティビティ画面

ご覧のとおり、アクティビティ画面にはメールの完了ステータスが表示されています。 メールを2通送信しそのうちの1通だけをクリックしたのですが、SendGridではクリックされたかどうかに関わらず、メールのステータスを確認することができるのです。 これがSendGridの優れた点です!

まとめ

この記事では、SendGridを使ってLaravelでメールを送信するデフォルトの方法を実装しました。次の記事では、Laravelのキュー機能を実装してそのロジックを拡張し、listeners、 jobs、mailableクラスについて学びます。

読んでくれてありがとうございました!

メールを成功の原動力に

開発者にもマーケターにも信頼されているメールサービスを利用して、
時間の節約、スケーラビリティ、メール配信に関する専門知識を手に入れましょう。