2016-04-03 137 views
3

當我在Laravel 5.1中重置密碼時,我收到了電子郵件,但它在標題中顯示「No Sender」。Laravel密碼重置「無發件人」

有沒有辦法從某處指定發件人來重設密碼郵件?除了發件人,我假設Laravel應該自動使用配置文件中指定的電子郵件設置?這很奇怪,因爲當我將Laravel郵件配置設置爲使用'郵件'驅動程序時,我收到反彈的電子郵件,說我無法從動態地址發送(這是開發人員所期望的),但密碼重置電子郵件仍然通過。不應該重置電子郵件使用相同的配置設置?

回答

3

所以,阿列克謝梅森的答案几乎就在那裏,但是,一個很大的不是覆蓋核心文件,因爲任何未來的更新可能會破壞功能。

由於您的PasswordController應該使用ResetsPassword特徵,因此您應該能夠覆蓋您的PasswordControllerResetsPassword特徵的任何方法。

例如,將您自己的fromsubject行添加到電子郵件是一種簡單的情況,可以在您的特徵中查找相關函數,複製並粘貼到您的PasswordController中並對其進行修改。

下面是一個示例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有一個更好的答案。 – 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

傑克,你可以在config/mail.phpemail idnameFrom屬性進行設置。我也有同樣的問題,只是得到它的排序,正如我上面提到的。在您的驗證PasswordController覆蓋

+0

這是修復程序。 – ahackney

+0

這是解決問題的正確方法 – Martin

5

@SeriousJelly答案更新爲Laravel 5.2

resetEmailBuilder方法

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

這可能幫助別人