TAK TECH NOTE

サーバサイドエンジニアを目指し勉強した内容を発信するブログです。

Laravelのパスワードリセットなどでメール送信を行うとき

パスワードリセットが正常に機能していないと気づき、調べてみた。

どうやらLaravelアプリケーションからメールを送信するときは、".env"と"config/mail.php"の設定が必要のようである。

 

".env"

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=465
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=q4mapp@gmail.com
MAIL_FROM_NAME=q4mapp
MAIL_USERNAME=q4mapp@gmail.com
MAIL_PASSWORD=tk435963
MAIL_PRETEND=false

 

"config/mail.php"

<?php
  
return [
    // Mail Driver
    'driver' => env('MAIL_DRIVER', 'smtp'),

    // SMTP Host Address
    'host' => env('MAIL_HOST', 'smtp.mailgun.org'),

    // SMTP Host Port
    'port' => env('MAIL_PORT', 587),

    // Global "From" Address
    'from' => [
        'address' => env('MAIL_FROM_ADDRESS', null),
        'name' => env('MAIL_FROM_NAME', null)
    ],

    // E-Mail Encryption Protocol
    'encryption' => env('MAIL_ENCRYPTION', null),

    // SMTP Server Username
    'username' => env('MAIL_USERNAME', null),
    
    // SMTP Server Password
    'password' => env('MAIL_PASSWORD', null),

    // Sendmail System Path
    'sendmail' => '/usr/sbin/sendmail -bs',

    // Mail "Pretend"
    'pretend' => env('MAIL_PRETEND', false),
];

 

これによってローカルではメール送信が成功したが、herokuでは成功しなかった。

herokuでは.envがpushされないため、別の方法で設定を流し込んでやる必要がある。

 

$ heroku config:set MAIL_DRIVER=smtp
Setting MAIL_DRIVER and restarting ⬢ q4m... done, v48
MAIL_DRIVER: smtp

 

上記のコマンドのようにしてローカルで設定した.envの中の変数をherokuアプリにも反映させることができる。

これでパスワードリセットのメール送信がうまくいった。