質問: Laravel 5.1でメール本文にURLを記載して送信しています。 メールをキュー使わずに送信した時と、キューを使って送信した時で、メール本文のURLが変わってしまいます。どの様にしたら修正できるでしょうか? テストは`php artisan serve`で実行しているので、URLは`http://localhost:8000`です。 ### メール送信 ``` private function sendConfirmMail(Mailer $mailer, User $user) { // $mailer->send( $mailer->queue( // <--ここをキューに変更した 'emails.confirm', ['user' => $user, 'token' => $user->confirmation_token], function($message) use ($user) { $message->to($user->email, $user->name)->subject('ユーザー登録確認'); } ); } ``` ### メールビュー: emails.confirm ``` ようこそ、{{ $user['name'] }} さん 以下のリンクをクリックしてユーザーを有効化してください。 ユーザーを有効化する {{ url('auth/confirm', [$token]) }} ``` ### 届いたメール:$mail->send()の時 ``` ようこそ、Hoge さん 以下のリンクをクリックしてユーザーを有効化してください。 ユーザーを有効化する http://localhost:8000/auth/confirm/d1533d919888227a3b2a48a4ed483686bcb19a45ad3b9c46e4c1f0c144dde269 ``` URLは正しく`http://localhost:8000`と表示されている ### 届いたメール:$mail->queue()の時 ``` ようこそ、Hoge さん 以下のリンクをクリックしてユーザーを有効化してください。 ユーザーを有効化する http://localhost/auth/confirm/d1533d919888227a3b2a48a4ed483686bcb19a45ad3b9c46e4c1f0c144dde269 ``` URLが何故か`http://localhost`と表示される
回答: config/app.phpのurlを変更すれば直ります。 このurlはartisanコマンドラインアプリ内でurlを生成する時に使用されます。 キューは`artisan queue:listen`もしくは`artisan queue:work`で処理されるので、urlを生成するurl()を使った時に、ここで設定したurlを使用します。 キューで無い時は、実際にリクエストを受けたサーバのurlが使用されます。 ``` // config/app.php /* |-------------------------------------------------------------------------- | Application URL |-------------------------------------------------------------------------- | | This URL is used by the console to properly generate URLs when using | the Artisan command line tool. You should set this to the root of | your application so that it is used when running Artisan tasks. | */ 'url' => 'http://localhost:8000', ```