Laravel电子邮件配置:我错过了什么?



我可以通过PHPMailer发送电子邮件,但不能通过Laravel发送电子邮件。我认为我的Laravel配置是错误的。

我从本地开发环境发送。

拉维尔错误

Failed to authenticate on SMTP server with username "name@example.com" using 2 possible authenticators

拉维尔控制器

// ...
Mail::to('anyone@whatever.com')->send(new AnyEmailTemplate());
// ...

拉维尔配置/邮件.php

return [
'driver' => env('MAIL_DRIVER', 'smtp'),
'host' => env('MAIL_HOST', 'mail.anyprovider.com'),
'port' => env('MAIL_PORT', 587),
'from' => [
'address' => env('MAIL_FROM_ADDRESS', 'name@example.com'),
'name' => env('MAIL_FROM_NAME', 'example.com'),
],
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' => env('MAIL_USERNAME', 'name@example.com'),
'password' => env('MAIL_PASSWORD', 'supersecretpassword'),
'sendmail' => '/usr/sbin/sendmail -bs',
'markdown' => [
'theme' => 'default',
'paths' => [
resource_path('views/vendor/mail'),
],
],
]

拉维尔 .env

MAIL_DRIVER=smtp
MAIL_HOST=mail.anyprovider.com
MAIL_PORT=587
MAIL_USERNAME=name@example.com
MAIL_PASSWORD=supersecretpassword
MAIL_ENCRYPTION=tls

PHPMailer脚本(作品(

$mail = new PHPMailer(true);
$mail->isSMTP();
$mail->Host = 'mail.anyprovider.com';
$mail->SMTPAuth = true;
$mail->Username = 'name@example.com';
$mail->Password = 'supersecretpassword';
$mail->SMTPAutoTLS = false;
$mail->Port = 587;
$mail->CharSet = 'UTF-8';
$mail->setFrom('name@example.com', 'example.com');
$mail->addAddress('anyone@whatever.com');
$mail->isHTML(true);
$mail->Subject = 'Any subject';
$body = "Any content";
$altBody = "Any alternative content";
$mail->Body = $body;
$mail->AltBody = $altBody;
$mail->send();

知道如何根据与PHPMailer一起使用的设置配置 Laravel 吗?

提前感谢!

我遇到了同样的问题。

问题是我们对MAIL_PASSWORD使用混合字符,例如#用于.env文件中的注释。

将密码更改为一些没有任何符号的简单密码后,我的问题解决了

根据你的 PHPMailer 脚本,你应该清空 MAIL_ENCRYPTION 的值。

请记住,如果您有 .env 文件,这将覆盖您的 config/mail.php 文件。

在您的情况下,您的 .env 文件变为:

MAIL_DRIVER=smtp MAIL_HOST=mail.anyprovider.com 
MAIL_PORT=587 
MAIL_USERNAME=name@example.com 
MAIL_PASSWORD=supersecretpassword 
MAIL_ENCRYPTION=

当您的配置/邮件.php变为:

...
'encryption' => env('MAIL_ENCRYPTION', ''), 
...


注意:编辑文件后,您必须通过以下方式告诉 laravel这些更改:

  • 清理缓存
  • 执行命令php artisan dump-autoload

相关内容

最新更新