Laravel 5密码重置邮件未发送

3
我正在尝试在我的Laravel 5.1应用程序中实现密码重置。我遵循文档(http://laravel.com/docs/5.1/authentication#resetting-passwords)进行操作,但是当我单击我的'/password/email/'上的“重置密码”按钮时,没有任何邮件被发送。
我故意输入了错误的电子邮件地址,我得到了适当的错误提示,但是当我输入正确的电子邮件地址时,没有邮件被发送,并且我也没有收到任何类型的消息或邮件。
我已经查看了我的数据库,似乎创建了一个密码重置令牌,只是没有发送邮件。
我的电子邮件配置正常工作,因为我的应用程序的其他部分可以正确地发送电子邮件,只有这个部分无法发送电子邮件。如果您能提供帮助,将不胜感激,因为我不知道还要检查什么。
Michael
routes.php: `
// Password reset link request routes...
Route::get('password/email', ['as' => 'password/email', 'uses' => 'Auth\PasswordController@getEmail']);
Route::post('password/email', 'Auth\PasswordController@postEmail');

    // Password reset routes...
    Route::get('password/reset/{token}', 'Auth\PasswordController@getReset');
    Route::post('password/reset', 'Auth\PasswordController@postReset');

password.blade.php:

<form id="contact-form" class="contact-section" method="POST" action="/password/email">
            <input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">
            <span class="pre-input"><i class="fa fa-envelope-o"></i></span>
            <input class="name plain buffer" type="email" name="email" placeholder="Email" value="{{ old('email') }}">
            <input id="send" class="plain button yellow" type="submit" value="Reset Password">
              @foreach($errors->all() as $error)
              <font size="3" color="red">{{ $error }}</font>
              @endforeach

          </form> 

resources/views/emails/password.blade.php:

Click here to reset your password: {{ url('password/reset/'.$token) }}

更新 我已经在postEmail函数中添加了一个日志。

    public function postEmail(Request $request)
{
    $this->validate($request, ['email' => 'required|email']);

    $response = Password::sendResetLink($request->only('email'), function (Message $message) {
        $message->subject($this->getEmailSubject());
 Log::info('Password Reset Execute -1 '); //Does work here


    });

    switch ($response) {

        case Password::RESET_LINK_SENT:
            return redirect()->back()->with('status', trans($response));

        case Password::INVALID_USER:
            return redirect()->back()->withErrors(['email' => trans($response)]);
    }

    Log::info('Password Reset Execute - 2'); //Will not work here
}

@maiorano84 我刚刚添加了那个文件,但是我所做的只是直接从 Laravel 网站复制和粘贴代码。 - Michael
文件之前不存在吗?因为Auth需要该文件的存在才能发送电子邮件。此外,您是在Homestead或某种本地VM上执行此操作吗?还是在公共服务器上?最后,请检查您的config/mail.php.env文件中的邮件设置。 - maiorano84
1
@maiorano84 是的,我已经创建了电子邮件视图并放置在正确的位置,尽管我之前尝试运行它,当然会抛出一个错误,说找不到该视图。我目前将其托管在DigitalOcean的公共VM上。我的邮件配置位于 config/mail.php 下,代码如下:'driver' => env('MAIL_DRIVER', 'mandrill') - Michael
@MinaYoussef 不,我没有收到任何错误信息,而且我的日志中最后一项是昨天创建视图之前的,所以看起来电子邮件只是没有被发送。 - Michael
你确定表单已经正确提交了吗? - Mina Abadir
显示剩余10条评论
2个回答

8

我在.env文件中添加了这些内容,现在密码重置功能又可以正常使用了。

MAIL_FROM_ADDRESS=xx@xx.xx
MAIL_FROM_NAME=xxxx

这个可行。对于Laravel 5.4,默认情况下不包含这两个。在config/mail.php中,它被设置为hello@example.com - Zhi Kai

3

如果问题是无效的发件人,请确保您传递了正确的发件人

$message->from('hello@app.com', 'Your Application');

3
最终我在config/mail.php文件中找到并设置了全局设置,因为我不想编辑Laravel文件并在composer更新后丢失它。感谢你的帮助,Mina! - Michael
你需要帮忙吗?此外,更新不应更改您的应用程序文件,只更改供应商文件。 - Mina Abadir
1
我找到了它,一切正常。而且我一直在使用的文件是供应商文件——vendor/laravel/framework/src/Illuminate/Foundation/Auth/ResetsPasswords.php - Michael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接