Expected response code 220 but got code "500"
上記のようなエラーが発生する場合の解決方法
環境
- docker
- laravel
- mailhog
- 開発環境(ENV=development)
問題点:確実に環境変数
- 500エラーが帰ってきているのでメールサーバにはアクセスできている
- 環境変数自体がおかしいか、読み込めていない
実際に通る.env
MAIL_USERNAME
とMAIL_PASSWORD
、MAIL_ENCRYPTION
はNULLを設定しておきましょう。
.env
MAIL_DRIVER=smtp
MAIL_HOST=mailhog
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
解決方法
上記の環境変数さえ読み込めれば、実行はできる。
もしこれを設定してできない場合は環境変数がうまく読み込めていない。
以下の手順で確認してください。
0.環境変数が読み込めているか確認するコマンド
\Config::get('mail')
上記コマンドを実行して、意図した環境変数になっているか確認。
なっていない場合は以下の手順を試すべし
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(''),