プログラミング初心者です。
やりたいこと
LaravelのAuthをインストールすると、Forgot your Password?
という名前でパスワードリセット機能が実装されます。
ただそのままだとメール送信することができず、エラー表示がでました。そこから実装に成功したので、ここに記録します。
日本語やデザイン変更してしまってますが、パスワードリセット部分の写真です。
1 まずエラー①
何も自分で実装してなかったのでそのままメール送信すると以下のエラーが出ました。
Call to undefined method App\User::notify()
1-1 エラー①解決方法
①Notificationsディレクターに一つもファイル作成してなかったのでCustomResetPasswordという名前で作成しました。
$ php artisan make:notification CustomResetPassword
②User.phpに以下追記
use App\Notifications\CustomResetPassword;
class User extends Authenticatable
{
//メール送る上で必須
use Notifiable;
/**
* パスワード再設定メールの送信
*
* @param string $token
* @return void
*/
public function sendPasswordResetNotification($token)
{
$this->notify(new CustomResetPassword($token));
}
2 エラー②
エラー①が解決したと思って再度メール送信したら次のエラーが出ました。
swift_transportexception expected response code 250 but got code "530", with message "530 5.7.1 authentication required
2-1 エラー②解決方法
envの設定と、今回送信元に gmailを使用した為googleのセキュリティー変更をしました。
①以下.envの設定
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=使用したい@gmail.com
MAIL_PASSWORD=gmailのパスワード
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=使用する@gmail.com
MAIL_FROM_NAME="${APP_NAME}"
②Googleのアカウントで「安全性の低いアプリの許可」を有効にする。
メール送信に使いたいアカウントでgoogleログインし、以下のページで有効化する
https://myaccount.google.com/lesssecureapps
3 一部日本語化
送信されたメールはデフォルトだと英語になっているので、一部日本語にしました。
CustomResetPassword.phpのtoMailメソッド部分を以下のようにしました。
public function toMail($notifiable)
{
return (new MailMessage)
->from('example@gmail.com', config('app.name'))
->subject('パスワード再設定')
->line('下のボタンをクリックしてパスワードを再設定してください。')
->action('パスワード再設定', url(config('app.url').route('password.reset', $this->token, false)))
->line('もし心当たりがない場合は、本メッセージは破棄してください。');
}
補足
まずgmailを使用する前に送信テスト的なことをしてみたいと思ったので、MailHogというメールのテストツールを使用しました。
インストールの仕方
$ brew install mailhog
$ brew services start mailhog
.envはこんな感じで設定
MAIL_DRIVER=smtp
MAIL_HOST=localhost
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=sender@example.com
MAIL_FROM_NAME="${APP_NAME}"
http://localhost:8025/
にアクセスしてMailHogの画面が表示されれば成功です。