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

#SendGridのアカウント登録

###アカウント登録時の注意点
SendGridのアカウント登録の窓口はいくつかありますが、今回は[公式日本サイト](https://sendgrid.kke.co.jp/)から登録を行います。

ほかの窓口としては[sendgrid.com](https://sendgrid.com/)やMicrosoft Azureから登録ができるようです。

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

###アカウント登録
[公式日本サイト](https://sendgrid.kke.co.jp/)にアクセスし、メールアドレスを入力すると仮登録完了メールが届きます。

![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/644759/b998c636-2440-5875-27d8-8c2c7580e936.png)

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

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

![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/644759/4bde3466-95d4-0e44-477e-5deb24e8bb76.png)



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

![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/644759/5820fe0c-7eac-6403-647d-5882d0f633d0.png)

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

![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/644759/aea6134d-31b5-7b3e-8a87-b40edfd1bee0.png)

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

![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/644759/1731926e-efdd-3ca6-08cf-ed49165bd67a.png)

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

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

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

![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/644759/5810c394-b0f9-9990-3431-8e0416e215f8.png)

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

![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/644759/70252a35-128e-d0ed-37d3-677f594f2871.png)

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

![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/644759/51b491bd-49d6-9b47-ba42-9b096d48c6b2.png)

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

![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/644759/7acbeb3b-5191-1f52-b18e-6e74c82fd16b.png)

#Laravelの設定
###SendGridライブラリインストール
Laravelプロジェクト直下で以下のコマンドを実行します。

```
composer require "sendgrid/sendgrid"
```

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

```
SENDGRID_API_KEY={YOUR API KEY}
```

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

```php
<?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 にパスを設定

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

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

![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/644759/0f6a8ad0-7d6c-192c-50e1-a5070aed1557.png)