2016-04-03 139 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'); 
     }; 
    } 
} 

这可能帮助别人