Laravel 5 密码重置电子邮件未发送

Posted

技术标签:

【中文标题】Laravel 5 密码重置电子邮件未发送【英文标题】:Laravel 5 Password Reset Email Not Being Sent 【发布时间】:2016-03-01 22:34:34 【问题描述】:

我正在尝试在我的 Laravel 5.1 应用程序上实现密码重置。我已按照文档 (http://laravel.com/docs/5.1/authentication#resetting-passwords) 进行操作。但是,每当我单击/password/email/ 上的“重置密码”按钮时,都不会发送任何电子邮件。

我故意输入了错误的电子邮件并且收到了相应的错误,但是当我输入正确的电子邮件时,没有发送电子邮件,也没有收到任何类型的消息或任何电子邮件。

我查看了我的数据库,它看起来好像正在创建密码重置令牌,只是没有发送电子邮件。

我的电子邮件配置工作正常,因为我的应用程序的其他部分可以正常发送电子邮件,只有这一部分没有发送电子邮件。任何帮助将不胜感激,因为我没有其他要检查的内容。

迈克尔

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');

密码.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> 

资源/视图/电子邮件/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

【问题讨论】:

请同时发布您的电子邮件视图的内容。 resources/views/emails/password.blade.php 你应该有一个 @maiorano84 我刚刚添加了那个文件,但是我所做的一切都是直接从 Laravel 站点复制并粘贴代码。 文件之前不存在吗?因为 Auth 需要该文件的存在才能通过电子邮件发送任何内容。此外,您是在 Homestead 还是某种本地 VM 中执行此操作?还是在公共服务器上?最后,config/mail.php.env 文件下的邮件设置是什么? @maiorano84 是的,我已经在正确的位置创建了电子邮件视图,尽管我之前尝试过运行,当然它抛出了一个错误,即找不到该视图。我目前将此托管在带有 DigitalOcean 的公共 VM 上。我在config/mail.php 下有我的邮件配置,代码为:'driver' =&gt; env('MAIL_DRIVER', 'mandrill'), 您是否收到任何错误,或者只是没有发送电子邮件。你会检查 laravel.log 吗? 【参考方案1】:

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

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

【讨论】:

我最终在 config/mail.php file 中找到并设置了全局设置,因为我不想编辑 Laravel 文件并因作曲家更新而丢失它。感谢您的帮助米娜! 您需要这方面的帮助吗?此外,更新不应更改您的应用程序文件。只有供应商文件。 我找到了,一切正常。我一直在使用的文件是供应商文件 - vendor/laravel/framework/src/Illuminate/Foundation/Auth/ResetsPasswords.php【参考方案2】:

我在 .env 中添加了这些,并且密码重置再次起作用

MAIL_FROM_ADDRESS=xx@xx.xx
MAIL_FROM_NAME=xxxx

【讨论】:

这行得通。对于 Laravel 5.4,默认不附带这 2 个。而在 config/mail.php 中,它设置为 hello@example.com

以上是关于Laravel 5 密码重置电子邮件未发送的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5 重置密码通知不会发送

laravel 5.4 密码重置问题——发送邮件

如何使用 laravel 5 中的队列通过电子邮件发送密码重置链接

Laravel 5.5 密码重置令牌表单未出现

无法在 laravel 5.3 中发送密码重置链接?

Laravel 5 邮箱重置密码