仕事で関わっているプロジェクトで Laravel のログインパッケージ Confide を使用しているのですが、パスワードリセット操作をした際にユーザに送信されるメールは、デフォルトだと Content-Type: text/html で送信されてしまいます。
これだとなにがまずいかというと、ユーザが @softbank.ne.jp などのキャリアメールを使用している場合に本文が添付ファイルとして送信されてしまいます。
さらに、charset が UTF-8 に設定されているため文字化けしていて読めないメールが届いてしまいます。
そこで、パスワードリセットの通知メールなんて、Content-Type: text/html で送るほどでもないので、text/plain に変えたいなーと思いました。
最初は、メール送信をしているメソッド ConfideUser#forgotPassword をオーバーライドしないとダメかなーと思っていたのですが、コードをよくよく読んでいくと config 変更するだけでいけそうということでやってみました。
結局、Confide も Swift Mailer を使ってメールを送信しているだけなので、渡す view の中身に気をつけてやればよしなにやってくれるということでした。
関係しそうなコードはこのへん。
https://github.com/Zizaco/confide/blob/master/src/Confide/EloquentPasswordService.php#L176
https://github.com/illuminate/mail/blob/master/Mailer.php#L328-L330
1 2 3 |
'email_reset_password' => [ 'text' => 'emails.passwordreset', // key の名前を text にすると text/plain で送信してくれる ], |
というかんじでした。
もちろん、text/html メールを送りたければ key の名前を html にすれば良いと思います。
なお、Confide の導入については @localdisk さんのLaravel のログインパッケージ Confideの解説(実践編)がとても親切です。
忘備録も兼ねてのポストでした。
![]() |
下の「いいね」ボタンを押すと、やる気パラメータが+1!