はじめに
Laravelでメールを送ります。
SMTPサーバがなくても、LaravelではMailgunやPostmark、Amazon SES等を使い簡単に素早くメール配信ができます。
SESは東京リージョンが無いので、今回はMailgunを使います。
Mailgunの登録をする
Try Mailgun Nowボタンを押して登録します。
「Add payment info now」:今すぐ支払情報を入力する のチェックは外しておきましょう。
「Hi ○○, please verify your Mailgun account」というメールが届いているので、リンクを踏んでメールアドレスの認証を行います。
登録段階ではSandboxで1日に300通のメールしか配信できません。
本来はドメイン登録を済ませると1日1万通まで送れるようになりますが、今回はそのままSandboxで使っていきます。
EC2にGuzzle HTTPライブラリを入れる
基本的にLaravelの公式ドキュメントに沿って進めます。
$ composer require guzzlehttp/guzzle
上記公式ドキュメントではconfig/mail.phpやconfig/services.phpファイルを更新するよう勧めていますが、Laravelは.envファイルでそのあたりの定数を設定できます。
...
MAIL_DRIVER=mailgun
MAILGUN_DOMAIN=YOUR_MAILGUN_DOMAIN
MAILGUN_SECRET=YOUR_SECRET_KEY
...
YOUR_MAILGUN_DOMAINとYOUR_SECRET_KEYには、MailgunのダッシュボードのTry nowの中にあるcurlコマンドを見て値を置き換えます。
YOUR_MAILGUN_DOMAIN
ttps://api.mailgun.net/v3/xxxxx.mailgun.org/messages
のxxxxx.mailgun.org部分を入れます。Sandboxなら、sandbox~~~から始まるはずです。
YOUR_SECRET_KEY
curl -s --user 'api:xxxxx'
のapi:以降を入れます。
ここまで全て対応すると、mailgunでメール送信ができるようになっています。
パスワード再発行メールを送信する
今までの連載に沿っていると、php artisan make:authで作った認証機能が実装されているはずです。
ログインしている場合は1回ログアウトし、ログイン画面の「パスワードを忘れた場合」リンクを踏みます。
あとはmailgunに登録したアドレスと同じ自分のアドレスを入れて(あらかじめこのメールアドレスで会員登録が必要)、再発行ボタンを押すとメールが届きます。
届いたメールを日本語化する
恐らく英語のメールが届きます。
ローカライズしたいので、元ファイルを調べます。
grepかけると
vendor/laravel/framework/src/Illuminate/Auth/Notifications/ResetPassword.php
にパスワード再発行メールの本文が、
vendor/laravel/framework/src/Illuminate/Notifications/resources/views/email.blade.php
に最下部の注意事項が
書かれていることが分かります。
vendor/laravel下を直接修正してしまうと、git cloneして別のユーザーが開発した場合に変更点が反映されません(vendor/laravel下はcomposerでインストールされるため)。
ソースコードを見ると多言語対応した書かれ方をしているので、以前と同様にresources/lang/ja.jsonファイルで日本語に対応させます。
{
...
"Hello!": "ご利用ありがとうございます。",
"Reset Password Notification": "パスワード再設定のお知らせ",
"You are receiving this email because we received a password reset request for your account.": "あなたのアカウントでパスワード再発行のリクエストがありました。",
"This password reset link will expire in :count minutes.": "再設定URLの有効期限は :count 分です。",
"If you did not request a password reset, no further action is required.": "もしパスワード再発行をリクエストしていない場合、操作は不要です。",
"If you’re having trouble clicking the \":actionText\" button, copy and paste the URL below\ninto your web browser: [:actionURL](:actionURL)": "\":actionText\"ボタンを押しても何も起きない場合、以下URLをコピーしてWebブラウザに貼り付けてください。\n[:actionURL](:actionURL)",
"Regards": "よろしくお願いいたします",
...
}
※日本語訳は意訳なので、自由に変えてください。
Regards, のカンマがlangじゃなくソースコードベタ書きされているので、
よろしくお願いいたします,
という日本語としては不格好になってしまうのは致し方ないですね…
本日は以上です。