Laravel6からLaravel9へアップグレード対応しました。
mailtrapでも良いのですが、私はdockerでmaildevイメージからコンテナ立ててます。
メール送信できなくなったので、あれ?と思い、とりあえずマニュアル探してその通りにしていった。
logにはでてるよーOKだよう。
[2022-03-08 01:26:44] local.DEBUG: From: Laravel <xxx@gild.co.jp>
To: Test <abc987@example.com>
Subject: This is a test mail
MIME-Version: 1.0
Date: Tue, 08 Mar 2022 01:26:44 +0900
Message-ID: <29aba2d91dbc8133538510e01160cfe4@gild.co.jp>
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable
<p>=E3=83=86=E3=82=B9=E3=83=88=E3=83=A1=E3=83=BC=E3=83=AB=E3=81=AE=E9=80=
=81=E4=BF=A1=E3=81=A7=E3=81=99=E3=80=82</p>
じゃあdriverをsmtpに戻してmailコンテナに疎通するようにしてみるよーう。
/mailでgetアクセスしてみると...ヒーハー!
まじか。
laravel6では問題なかった気がするんだけどなぁ...
ということでdockerのマウント先に、laravel6のときのリソースを参照するように、laravel9の入ってるディレクトリ名を退避させて、laravel6の入ってるディレクトリ名を変更。
で、実行してみるとmailコンテナで受信してることを確認したわけさ。
ってことはdockerには問題ないことがわかったので一安心。
laravel6とkaravel9とでmail周りのなにかが変わったなとそれらしいキーワードで探っていく。
そしたら、こんな記事に辿り着き、こんなんがconfig/mail.phpに必要なんだとか。
'stream' => [
'ssl' => [
'allow_self_signed' => true,
'verify_peer' => false,
'verify_peer_name' => false,
],
],
とりあえず、laravel6と9のconfig/mail.php見比べてみたけど、どっちにも上記のような記述はない。
とりあえず、まぁここらへんに記述して/mailでgetアクセスしてみるも、変わらず。
'mailers' => [
'smtp' => [
'transport' => 'smtp',
'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
'port' => env('MAIL_PORT', 587),
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'timeout' => null,
'stream' => [
'ssl' => [
'allow_self_signed' => true,
'verify_peer' => false,
'verify_peer_name' => false,
],
],
],
で、最終的にこれ。
いや、解決の線はあってたけど配列構造が違ったみたい。
だから以下にしたらあっさり送信できたよ。
'mailers' => [
'smtp' => [
'transport' => 'smtp',
'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
'port' => env('MAIL_PORT', 587),
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'timeout' => null,
'verify_peer' => false,
],
https://laravel.com/ の方に書いてたみたいだけど、英文はわかりづらいですなぁというか見つけられん。