我试图在我的应用程序中实现默认重置密码通知,但是当我尝试进行密码重置时,没有任何反应只会说"我们已通过电子邮件发送密码重置链接!& #34;但是当我尝试检查我的邮箱时,我的应用程序没有发送任何电子邮件。
我在我的应用程序上做了所有必要的配置: 电邮司机, 数据库设置
但是Laravel的某些部分确实改变了: 用户模型, 用户表迁移
表格列我确实改变了。
id,name,US_EMAIL,password,remember_token,created_at,updated_at, EMP_POSITION,FACTORY,CONTACT,SIGNATURE,ONLINE,DATE_ONLINE,ADMIN, LOCK
我在重置密码表上没有做任何操作,默认的laravel迁移中所有字段都是完整的。
当我尝试调试我的应用程序时,似乎当我尝试重置密码时,应用程序可以成功地将数据保存到" password_resets"表但我仍然无法收到电子邮件重置通知。
我也确实看过这个特性,我试图" Dump and Die"点击"发送密码重置链接后,查看流程的进展情况"似乎应用程序仍然可以继续这个特性,因为它仍然显示" dd"消息。
<?php
namespace Illuminate\Auth\Passwords;
use Illuminate\Auth\Notifications\ResetPassword as ResetPasswordNotification;
trait CanResetPassword
{
/**
* Get the e-mail address where password reset links are sent.
*
* @return string
*/
public function getEmailForPasswordReset()
{
return $this->EMAIL;
}
/**
* Send the password reset notification.
*
* @param string $token
* @return void
*/
public function sendPasswordResetNotification($token)
{
dd('Test SendPasswordNotification');
$this->notify(new ResetPasswordNotification($token));
}
}
我也确实看过这个但是当我试图&#34;转储和死亡&#34;到&#34;到邮件&#34;功能它没有继续。我想也许应用程序不会发送电子邮件,因为它无法进入这个课程,我只是猜测,但我希望有人可以帮助我。
<?php
namespace Illuminate\Auth\Notifications;
use Illuminate\Notifications\Notification;
use Illuminate\Notifications\Messages\MailMessage;
class ResetPassword extends Notification
{
/**
* The password reset token.
*
* @var string
*/
public $token;
/**
* Create a notification instance.
*
* @param string $token
* @return void
*/
public function __construct($token)
{
$this->token = $token;
}
/**
* Get the notification's channels.
*
* @param mixed $notifiable
* @return array|string
*/
public function via($notifiable)
{
return ['mail'];
}
/**
* Build the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
dd('Test ToMail');
return (new MailMessage)
->line('You are receiving this email because we received a password reset request for your account.')
->action('Reset Password', route('password.reset', $this->token))
->line('If you did not request a password reset, no further action is required.');
}
}
更新:我可以使用我的.env电子邮件设置发送电子邮件,我认为 应用程序可以验证我使用的电子邮件服务器。唯一的 问题是我无法接收密码重置的电子邮件通知,并且在我点击&#34;发送密码重置链接&#34;后它也不会显示任何错误。
答案 0 :(得分:3)
我终于找到了问题所在。
当我将电子邮件列从用户表更改为“US_EMAIL”时,Illuminate \ Notifications特征中有一个函数可以检索电子邮件列。
Illuminate\Notifications
public function routeNotificationFor($driver)
{
if (method_exists($this, $method = 'routeNotificationFor'.Str::studly($driver))) {
return $this->{$method}();
}
switch ($driver) {
case 'database':
return $this->notifications();
case 'mail':
return $this->email;
case 'nexmo':
return $this->phone_number;
}
}
解决方案:
on the "routeNotificationFor" function i changed this line "return $this->email;"
为:
“返回此 - &gt; US_EMAIL;”
答案 1 :(得分:0)
听起来我应该检查你的config / mail.php和.env以验证你的电子邮件设置。我最初的猜测是你把它设置为&#34; mail&#34;或&#34; sendmail&#34;并且没有安装在您的计算机或服务器上。
也许使用外部电子邮件服务(mailgun,sparkpost等)创建一个免费帐户,并将其设置为排除?
编辑:再次阅读后,我认为你的问题是:
public function getEmailForPasswordReset()
{
return $this->EMAIL;
}
根据您的问题的顶部,&#34;电子邮件&#34;您的数据库中的字段实际上是&#34; US_EMAIL&#34;。
public function getEmailForPasswordReset()
{
return $this->US_EMAIL;
}
答案 2 :(得分:0)
请检查您的.env
文件并查找MAIL_DRIVER
。
在电子邮件测试人员中创建虚拟电子邮件,例如Mailtrap.io
使用Mailtrap.io:
看起来如下所示MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=usernamefrommailtrap
MAIL_PASSWORD=somepasswordfrommailtrap
MAIL_ENCRYPTION=null
现在测试一下,如果收到电子邮件,请在Mailtrap中检查您的虚拟电子邮件。
答案 3 :(得分:0)
有三件事需要检查
首先:.env
档案
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=email@email.com
MAIL_PASSWORD=password
MAIL_ENCRYPTION=tls
这适用于制作和gmail消息
MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=usernamefrommailtrap
MAIL_PASSWORD=somepasswordfrommailtrap
MAIL_ENCRYPTION=null
这是用于测试和mailtrap消息
第二:config/mail.php
确保使用正确的数据正确设置配置文件。或者确保它从.env
文件
第三:刷新
修改.env
文件后,请勿忘记停止php artisan serve
并再次运行。
编辑config/mail.php
文件后,请勿忘记运行php artisan config:cache
删除已保存的缓存并创建新缓存