Laravel 5.5 不发送电子邮件
Posted
技术标签:
【中文标题】Laravel 5.5 不发送电子邮件【英文标题】:Laravel 5.5 does not send e-mails 【发布时间】:2018-07-29 22:21:17 【问题描述】:您好,我尝试从注册脚本向用户 (link) 发送电子邮件。我有配置文件:
config/mail.php
return [
'driver' => env('MAIL_DRIVER', 'smtp'),
'host' => env('MAIL_HOST', 's44.linuxpl.com'),
'port' => env('MAIL_PORT', 587),
'from' => [
'address' => env('MAIL_FROM_ADDRESS', 'verify@coins.webmg.pl'),
'name' => env('MAIL_FROM_NAME', 'Example'),
],
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' => env('verify@coins.webmg.pl'),
'password' => env('MySecretPassword'),
'sendmail' => '/usr/sbin/sendmail -bs',
'markdown' => [
'theme' => 'default',
'paths' => [
resource_path('views/vendor/mail'),
],
],
'stream' => [
'tls' => [
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true,
],
]
];
还有文件.env
:
MAIL_DRIVER=smtp
MAIL_HOST=s44.linuxpl.com
MAIL_PORT=587
MAIL_USERNAME=verify@coins.webmg.pl
MAIL_PASSWORD=MySecretPassword
MAIL_ENCRYPTION=tls
从RegisterController.php
发送邮件的脚本
protected function create(array $data)
$user = User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
]);
$verifyUser = VerifyUser::create([
'user_id' => $user->id,
'token' => str_random(40)
]);
$sendMail = Mail::to($user->email)->send(new VerifyMail($user));
return $user;
班级VerifyMail
class VerifyMail extends Mailable
use Queueable, SerializesModels;
public $user;
public function __construct($user)
$this->user = $user;
public function build()
return $this->view('emails.verifyUser');
和文件发送verifyUser.blade.php
<h2>Welcome to the site $user['name']</h2>
不知道这个配置有什么问题,因为我可以正确登录邮箱,所以邮箱和密码都是正确的。另外,laravel 没有返回任何错误,脚本本身是正确执行的。
【问题讨论】:
我用我的 gmail 凭据交换我的 smtp 详细信息,因为我知道那个 smtp 正在工作,如果问题仍然存在,我知道我的代码有问题,否则我的 smtp 有问题。 @DhavalChheda 好的,但是在Gmail中我有两条工厂Auth SMS,是否具有这样的帐户安全性,smtp可以工作吗? @michal 由于Mailable
类使用Queable
trait,默认队列是否在监听作业?
@AbishekRSrikaanth 可能是的,完整的文件VerifyMail.php
,看起来像这样:link
【参考方案1】:
只需将您的 config/mail.php 恢复为默认值,然后尝试直接在您的 laravel .env 文件中设置以下值
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=abc@gmail.com
MAIL_PASSWORD=abc@123
希望对你有所帮助,谢谢
【讨论】:
【参考方案2】:我找到了解决方案。问题在于文件.env
。该文件是使用以前的设置加载的。清理缓存文件就足够了。
php artisan config:cache
php artisan config:clear
php artisan cache:clear
这里描述得很好Trying to get Laravel 5 email to work
【讨论】:
【参考方案3】:将您的 mail.php
文件恢复为默认值:替换:
'username' => env('verify@coins.webmg.pl'),
'password' => env('MySecretPassword'),
与
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
您误解了env($key, $default = null)
方法的工作原理。它采用的第一个参数是环境变量的key(例如'MAIL_USERNAME'),第二个参数是default 值(可以是可选的)。
将您的邮件凭据仅存储在 .env
文件中,而不是存储在配置文件的 env()
调用中。
Laravel Docs: Configuration
【讨论】:
以上是关于Laravel 5.5 不发送电子邮件的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5.5 发送电子邮件没有响应 smtp.gmail.com #10060
使用 gmail 发送 Laravel 5.5 邮件 [重复]
如何在 Laravel 5.5 中将数据插入表格并获取电子邮件通知?
如何使用 Laravel 5.5 身份验证使电子邮件登录不区分大小写
使用 Laravel 5.5 接收 [Illuminate\Database\Eloquent\MassAssignmentException] 电子邮件