當我在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