Mialgunを選んだわけ
- 無料で1日に100件まで送信が可能。
- 今すぐに実装したい。
この条件に当てはまっていたのが、Mailgunでした。
よく比較されるものとして、Sendgridがあります。
こちらは、申し込み時に審査があります。申し込み後2営業日以内に本登録完了のお知らせがきます。使用できるまで最短でも翌日となるため、今回は選択しませんでした。
ドメインとは?
ドメインとは、インターネット上の住所のようなもので、Webサイトがどこにあるかを判別する情報です。インターネットの住所はIPアドレスという数字の羅列で表されますが、それを人間にも分かる文字列にしたものがドメインです。
Mailgun設定
アカウント作成
無料プランで使用するため、Add payment info now
のチェックボックスは外します。formを入力後、確認メールが届くのでそこから中の管理画面に入ってください。
ドメイン作成
Mailgun標準のsandboxモードでは、承認されたメールしか送信ができないため、独自ドメインを作成します。
Send -> Sending -> Domains から右上のAdd new domain
をクリックします。
- ドメイン名は任意のものを入力してください。
- Domain reginはUSのままでいいです。
レコード設定
メールの送信だけならSPF
、DKIM
のレコードだけをRoute53に追加するだけで十分です。
ドメイン名の DNS クエリが Route53 を通じて解決され、Mailgun でのメール送信が正しく機能するようになります。このプロセスを通じて、メール配信率を向上させ、送信メールがスパムとして扱われるリスクを低減します。
SPF(Sender Policy Framework)
電子メールの送信元ドメインが詐称されていないかを検査するための仕組み
DKIM(DomainKeys Identified Mail)
送信者のなりすましやメールの改ざんを検知できるようにするもの
mailgun
Route53のホストゾーンにレコードを追加
AWSコンソールを開きRoute53のホストゾーンを表示します。
今回は既に取得してあるドメインに対して、レコードを追加します。任意のホストゾーンを選択してください。詳細画面から、レコードを作成
をクリックしてください。
レコード追加
先ほど、Mailgunで表示されていた、レコードを追加します。
- Route53画面のレコード名の欄には、Mailgun画面の各レコードに表示されているHostnameを入力してください。
- レコードタイプは、
SPF
とDKIM
はTXT
を選択してください。 - Route53画面の値には、Mailgun画面の各レコードに表示されているEnter this valueを入力してください。
接続の確認
右上のVerify DNS settings
から接続の確認ができます。反映まで数分かかります。接続ができないからといって焦る必要はありません。
設定したレコードがUnverifed
から緑色の✅になっていたら接続が確認できたということです。
全て確認できたら、Send -> Sending -> Domainsの画面にいきましょう。✅になっていたらドメインの作成に成功したということです。
APIキー取得
右上のプロフィールから、API Security
を選択してください。
Create API key
をクッリクしてください。
Create Key
をクリックしてください。
※API Keyは一度しか表示されませんので、必ずコピーして忘れないようにしてください。
実装
既にローカルでメール送信のロジックは記述してあるとする。
envに環境変数を記述
MAIL_DRIVER=mailgun
MAILGUN_DOMAIN=Mialgunに追加したドメイン
MAILGUN_SECRET=API Key
MAIL_FROM_ADDRESS=Mialgunに追加したドメイン
ライブラリインストール
Mailgunドライバーをインストールします。
composer require symfony/mailgun-mailer symfony/http-client
Laravelにはデフォルトでconfig/servicesに以下の記述があり、envが正しく設定されていれば追加でコードは書く必要はありません。
'mailgun' => [
'domain' => env('MAILGUN_DOMAIN'),
'secret' => env('MAILGUN_SECRET'),
'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'),
'scheme' => 'https',
],