2016-04-03 10 views
3

Laravel 5.1でパスワードをリセットすると、電子メールが届きますが、タイトルに "No Sender"と表示されます。Laravel password reset "No Sender"

パスワードリセットメールの送信者をどこから指定する方法はありますか?送信者とは別に、私はLaravelが設定ファイルで指定された電子メール設定を自動的に使用すると仮定します。奇妙なのは、私がLaravelのメール設定を 'mail'ドライバを使用するように設定したときに、私は動的アドレス(devで予想される)から送信できないというバウンスメールを受け取るが、 。電子メールリセットで同じ設定を使用しないでください。

答えて

3

を、 Alexey Mezeninの答えはほぼありますが、今後のアップデートで機能が損なわれる可能性があるため、コアファイルを上書きすることはできません。

PasswordControllerResetsPassword形質を使用する必要があるため、PasswordControllerの形質をResetsPasswordから上書きすることができます。

例えば、独自のfromsubject行を電子メールに追加するのは、あなたの特性に関連する機能を見つけて、PasswordControllerにコピーして貼り付けてそれを修正する単純なケースです。

の例は、sendResetLinkEmail()関数を上書きする関数です。

<?php 

namespace App\Http\Controllers\Auth; 

use Illuminate\Http\Request; 
use Illuminate\Mail\Message; 
use Illuminate\Support\Facades\Password; 
use App\Http\Controllers\Controller; 
use Illuminate\Foundation\Auth\ResetsPasswords; 

class PasswordController extends Controller 
{ 
    /* 
    |-------------------------------------------------------------------------- 
    | Password Reset Controller 
    |-------------------------------------------------------------------------- 
    | 
    | This controller is responsible for handling password reset requests 
    | and uses a simple trait to include this behavior. You're free to 
    | explore this trait and override any methods you wish to tweak. 
    | 
    */ 

    use ResetsPasswords; 

    /** 
    * Create a new password controller instance. 
    * 
    * @return void 
    */ 
    public function __construct() 
    { 
     $this->middleware('guest'); 
    } 

    /** 
    * Send a reset link to the given user. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @return \Illuminate\Http\Response 
    */ 
    public function sendResetLinkEmail(Request $request) 
    { 

     $this->validate($request, ['email' => 'required|email']); 

     $broker = $this->getBroker(); 

     $response = Password::broker($broker)->sendResetLink($request->only('email'), function (Message $message) { 
      $message->subject($this->getEmailSubject()); 
      $message->from(env('MAIL_FROM'), env('APP_NAME')); 
     }); 

     switch ($response) { 
      case Password::RESET_LINK_SENT: 
       return $this->getSendResetLinkEmailSuccessResponse($response); 

      case Password::INVALID_USER: 
      default: 
       return $this->getSendResetLinkEmailFailureResponse($response); 
     } 
    } 
+0

@Rajkumarがより良い答えを持っているに役立つかもしれない

class PasswordController extends Controller { protected function resetEmailBuilder() { return function (Message $message) { $message->subject($this->getEmailSubject()); $message->from('[email protected]', 'you'); }; } } 

resetEmailBuilder方法。 – Martin

0

はたぶんよりよい解決策がありますが、手動でこの行の後、\vendor\laravel\framework\src\Illuminate\Foundation\Auth\ResetPasswords.phpにコードを追加することができます。

$message->subject($this->getEmailSubject()); // this is line 66 

はこのような何か追加:だから

$message->from('[email protected]', 'My Site'); 

https://laravel.com/docs/5.1/mail#sending-mail

6

ジャック、あなたはemail idconfig/mail.phpnameためFrom属性に設定することができます。私も同じ問題を抱えていましたが、私は上記のようにソートしました。あなたの認証PasswordControllerオーバーライドでLaravel 5.2

ため

+0

これは修正です。 – ahackney

+0

これは問題を解決する正しい方法です – Martin

5

@SeriousJelly回答アップデートこれは誰か