Email “Laravel密码重置”;“无发件人”;

Email “Laravel密码重置”;“无发件人”;,email,laravel,Email,Laravel,当我在Laravel 5.1中重置密码时,我收到了电子邮件,但标题中写着“无发件人” 有没有办法指定密码重置电子邮件的发件人?除了发件人之外,我假设Laravel应该自动使用配置文件中指定的电子邮件设置?这很奇怪,因为当我将Laravel邮件配置设置为使用“邮件”驱动程序时,我收到了被退回的电子邮件,说我无法从动态地址发送(这在dev上是应该的),但密码重置电子邮件仍然可以通过。电子邮件重置不应该使用相同的配置设置吗?也许有更好的解决方案,但是您可以手动将代码添加到\vendor\laravel

当我在Laravel 5.1中重置密码时,我收到了电子邮件,但标题中写着“无发件人”


有没有办法指定密码重置电子邮件的发件人?除了发件人之外,我假设Laravel应该自动使用配置文件中指定的电子邮件设置?这很奇怪,因为当我将Laravel邮件配置设置为使用“邮件”驱动程序时,我收到了被退回的电子邮件,说我无法从动态地址发送(这在dev上是应该的),但密码重置电子邮件仍然可以通过。电子邮件重置不应该使用相同的配置设置吗?

也许有更好的解决方案,但是您可以手动将代码添加到
\vendor\laravel\framework\src\illighte\Foundation\Auth\ResetPasswords.php中,在这一行之后:

$message->subject($this->getEmailSubject()); // this is line 66
添加如下内容:

$message->from('my@email.com', 'My Site');

因此,Alexey Mezenin的答案几乎是肯定的,然而,一个最大的禁忌是覆盖核心文件,因为未来的任何更新都可能破坏功能

由于您的
PasswordController
应该使用
ResetsPassword
trait,您应该能够在
PasswordController
中覆盖
ResetsPassword
trait中的任何方法

例如,将您自己的
from
subject
行添加到电子邮件中是一个简单的例子,可以在您的trait中找到相关函数,复制并粘贴到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);
        }
    }

Jack,您可以在
config/mail.php
中的
From
属性中设置
电子邮件id
name
。正如我前面提到的,我也遇到了同样的问题,只是把它整理好了。

@SeriousJelly更新了Laravel 5.2的答案

在Auth
PasswordController
Override
resetEmailBuilder
方法中

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

这可能有助于某人

@Rajkumar有一个更好的答案。@ChrisBratherton如何在“login.blade”中使用“sendResetLinkEmail”,谢谢!最后,这是让AWS SES在L5.6上工作的最后一步