[MailhogとLaravel]Expected response code 220 but got code "500"のエラー解決方法


Expected response code 220 but got code "500"

上記のようなエラーが発生する場合の解決方法


環境


  • docker

  • laravel

  • mailhog

  • 開発環境(ENV=development)


問題点:確実に環境変数


  • 500エラーが帰ってきているのでメールサーバにはアクセスできている

  • 環境変数自体がおかしいか、読み込めていない


実際に通る.env

MAIL_USERNAMEMAIL_PASSWORDMAIL_ENCRYPTIONはNULLを設定しておきましょう。

MAIL_DRIVER=smtp

MAIL_HOST=mailhog
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null


解決方法

上記の環境変数さえ読み込めれば、実行はできる。

もしこれを設定してできない場合は環境変数がうまく読み込めていない。

以下の手順で確認してください。


0.環境変数が読み込めているか確認するコマンド

\Config::get('mail')

上記コマンドを実行して、意図した環境変数になっているか確認。

image.png

なっていない場合は以下の手順を試すべし


1.キャッシュクリア


bash

php artisan cache:clear

php artisan config:clear
php artisan route:clear
php artisan view:clear


2.環境変数ロード


bash

. .env

# もしくは環境変数を環境ごとに分けてる場合は読み込みたいファイルを指定
. .env.development


3.環境変数直接設定する


bash

MAIL_DRIVER=smtp

MAIL_HOST=mailhog
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null


4.最終手段、mail.phpを書き換える

環境変数を実際に読み込んでいるのはconfig/mail.phpというファイルだ。

ここの環境変数を読み込む部分を削除し、直接値を書き込んでしまえば良い。


bash

'encryption' => env('MAIL_ENCRYPTION', 'ssl'),

# こうなっているのをこうじゃ!

'encryption' => env(''),