当我在Laravel 5.1中重置密码时,我收到了电子邮件,但它在标题中显示“No Sender”。Laravel密码重置“无发件人”
有没有办法从某处指定发件人来重设密码邮件?除了发件人,我假设Laravel应该自动使用配置文件中指定的电子邮件设置?这很奇怪,因为当我将Laravel邮件配置设置为使用'邮件'驱动程序时,我收到反弹的电子邮件,说我无法从动态地址发送(这是开发人员所期望的),但密码重置电子邮件仍然通过。不应该重置电子邮件使用相同的配置设置?
当我在Laravel 5.1中重置密码时,我收到了电子邮件,但它在标题中显示“No Sender”。Laravel密码重置“无发件人”
有没有办法从某处指定发件人来重设密码邮件?除了发件人,我假设Laravel应该自动使用配置文件中指定的电子邮件设置?这很奇怪,因为当我将Laravel邮件配置设置为使用'邮件'驱动程序时,我收到反弹的电子邮件,说我无法从动态地址发送(这是开发人员所期望的),但密码重置电子邮件仍然通过。不应该重置电子邮件使用相同的配置设置?
所以,阿列克谢梅森的答案几乎就在那里,但是,一个很大的不是覆盖核心文件,因为任何未来的更新可能会破坏功能。
由于您的PasswordController
应该使用ResetsPassword
特征,因此您应该能够覆盖您的PasswordController
中ResetsPassword
特征的任何方法。
例如,将您自己的from
和subject
行添加到电子邮件是一种简单的情况,可以在您的特征中查找相关函数,复制并粘贴到您的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);
}
}
也许有更好的解决方案,但你可以手动添加代码到\vendor\laravel\framework\src\Illuminate\Foundation\Auth\ResetPasswords.php
,此行之后:
$message->subject($this->getEmailSubject()); // this is line 66
添加这样的事情:
$message->from('[email protected]', 'My Site');
@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');
};
}
}
这可能帮助别人
@Rajkumar有一个更好的答案。 – Martin