Laravelを使いSendGridでメールを送信する


SendGridのアカウント登録

アカウント登録時の注意点

SendGridのアカウント登録の窓口はいくつかありますが、今回は公式日本サイトから登録を行います。

ほかの窓口としてはsendgrid.comやMicrosoft Azureから登録ができるようです。

sendgrid.comからアカウント登録を行うと、公式日本サイトからはログインができないようです。
おそらく直接sendgrid.comに登録するものと、日本向けの正規販売代理店(KKE)を介して登録する違いによるものと思われます。

アカウント登録

公式日本サイトにアクセスし、メールアドレスを入力すると仮登録完了メールが届きます。

「ユーザー情報を登録」ボタンを押すと入力画面が表示されるので、必要事項を入力しましょう。
入力した内容は審査をされるので、適当な内容は書かないようにしてください。

ユーザー情報の登録が完了すると、本登録完了のメールが届きますが、この時点ではまだSendGridにログインはできません。

半日ほど待つとログイン情報が記載されたメールが届きます。

ログイン画面>マイページ>SendGridダッシュボードへ をクリックし、ダッシュボード画面が表示されればアカウント登録は成功です。

送信元メールアドレス登録

SendGridからメールを送信するには送信元メールアドレスを登録する必要があります。
サイドメニューの Marketing>Senders>Create New Sender をクリックして送信元情報を入力して Save をクリックすると、登録内容が一覧として表示されます。

この時点ではVerified が×になっているため、まだ設定が完了していません。

From Email Addressに入力したメールアドレスにメールが届いているはずなので、メールの Verify Sender Identityをクリックして送信元メールアドレスの確認を行ってください。

画面を更新してVerifiedに✓がついていれば送信元メールアドレスの設定は完了です。

APIキー作成

続いてAPIキーの作成を行います。
Settings>API Keys>Create API Key をクリックしてAPIキー作成画面を開いてください。

APIキー名とアクセス権限を設定(今回はFull Access)し、Create&Viewをクリックすると、APIキーの確認画面が表示されます。
APIキーは一度しか表示されないため、忘れないように必ずコピーして保管しておきましょう。

Doneをクリックすると一覧に作成したAPIキーが表示されます。
これでAPIキーの作成は完了です。

Laravelの設定

SendGridライブラリインストール

Laravelプロジェクト直下で以下のコマンドを実行します。

composer require "sendgrid/sendgrid"

.envファイル設定

.envファイルの環境変数に作成したAPIキーを追加します

SENDGRID_API_KEY={YOUR API KEY}

メール送信処理

メールを送信するための処理を記述します。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use SendGrid;

class MailingController extends Controller
{
    public function sendMail()
    { 

        $email = new \SendGrid\Mail\Mail();
        $email->setFrom('送信元アドレス');
        $email->setSubject("テスト送信");
        $email->addTo('送信先アドレス');
        $apiKey = getenv('SENDGRID_API_KEY');
        $sendGrid = new \SendGrid($apiKey);
        $email->addContent(
            "text/plain",
            "test mail"
        );
        $response = $sendGrid->send($email);
        if ($response->statusCode() == 202) {
            return back()->with(['success' => "E-mails successfully sent out!!"]);
        }
        return back()->withErrors(json_decode($response->body())->errors);
    }
}

web.php にパスを設定

Route::get('/Mailing','MailingController@sendMail')->name('Mailing');

ブラウザからlocalhost/Mailingを実行すると、addToに設定したアドレス宛にメールが届きました。