Laravel Homestead Swift无法发送没有发件人地址的邮件

Ger*_*sek 19 php laravel laravel-5.1

当我尝试发送密码重置邮件时,我在Laravel 5.1 Homestead中使用库存电子邮件设置收到此错误.

Swift_TransportException in AbstractSmtpTransport.php line 162:Cannot send message without a sender address
Run Code Online (Sandbox Code Playgroud)

地址填写在app/config/mail.php中:

'from' => array('address' => 'myusername@gmail.com', 'name' => 'hawle'),
Run Code Online (Sandbox Code Playgroud)

Sze*_*nis 39

在您的.env文件中,您需要设置电子邮件帐户的电子邮件地址和密码.您还需要设置正在使用的邮件服务器的主机和端口.

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=25
MAIL_USERNAME= ***USER NAME***
MAIL_PASSWORD= ***PASSWORD***
MAIL_ENCRYPTION=tls
Run Code Online (Sandbox Code Playgroud)

或者确保文件中的所有内容都已完整mail.php(请参阅下面的注释).

'host' => env('MAIL_HOST', 'smtp.gmail.com'),
/*
|--------------------------------------------------------------------------
| SMTP Host Port
|--------------------------------------------------------------------------
|
| This is the SMTP port used by your application to deliver e-mails to
| users of the application. Like the host we have set this value to
| stay compatible with the Mailgun e-mail application by default.
|
*/
'port' => env('MAIL_PORT', 25),
/*
|--------------------------------------------------------------------------
| Global "From" Address
|--------------------------------------------------------------------------
|
| You may wish for all e-mails sent by your application to be sent from
| the same address. Here, you may specify a name and address that is
| used globally for all e-mails that are sent by your application.
|
*/
'from' => ['address' => 'myusername@gmail.com', 'name' => 'hawle'],
/*
|--------------------------------------------------------------------------
| E-Mail Encryption Protocol
|--------------------------------------------------------------------------
|
| Here you may specify the encryption protocol that should be used when
| the application send e-mail messages. A sensible default using the
| transport layer security protocol should provide great security.
|
*/
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
Run Code Online (Sandbox Code Playgroud)

注意:最好使用该.env文件,因为您最有可能在生产环境中使用不同的配置.

如果一切都完成但仍然无效,则可能是缓存.您可以使用以下命令清除配置缓存:

php artisan config:cache
Run Code Online (Sandbox Code Playgroud)

另请注意:

  • 端口465适用于Gmail.如果它不起作用,你可以使用25.
  • mail.php文件位于/app/config/mail.php(如OP所述).
  • .env文件位于项目的根目录下.
  • Mailtrap.io是一种用于测试SMTP的服务.它并不真正发送电子邮件.

正如Viktorminator所提到的: 考虑创建应用程序密码而不是使用通常的传递来满足此需求.用于创建密码的链接myaccount.google.com/apppasswords


Ali*_*Ali 15

确保在app/config/mail.php中设置了"from"

'from' => ['address' => 'myname@gmail.com', 'name' => 'myname']
Run Code Online (Sandbox Code Playgroud)

它将解决问题.

  • 然后做'php artisan config:cache'. (5认同)
  • @pbwned你的评论让我脱离了我的头发 (2认同)

小智 14

也许有人正在使用 laravel 6
它的问题是“没有发件人地址就无法发送消息”所以没有电子邮件地址可以在.env文件中发送电子邮件

只需添加发件人电子邮件地址

MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=your_username
MAIL_PASSWORD=your_password
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=example@gmail.com **here**
MAIL_FROM_NAME="${APP_NAME}"
Run Code Online (Sandbox Code Playgroud)

我没有更改 mail.php 文件中的任何内容,在运行之后,它在 Laravel 6 中对我有用

php artisan config:cache
Run Code Online (Sandbox Code Playgroud)


Ano*_*non 9

设法通过执行以下操作来解决此问题

转到.env文件

确保已MAIL_FROM_ADDRESS设置 的值。

MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=***USERNAME**
MAIL_PASSWORD=***PASSWORD***
MAIL_ENCRYPTION=tls
MAIL_FROM_NAME="${APP_NAME}"
MAIL_FROM_ADDRESS=no-reply@YOURDOMAIN 
Run Code Online (Sandbox Code Playgroud)


小智 6

我刚刚在 Laravel 7.9 中解决了这个问题。我正在使用 mailtrap.io,我相信问题是缺少MAIL_ENCRYPTION=tls变量。此变量不存在于 mailtrap.io 示例配置或 .env.example 文件中。

这是我的 .env 设置:

MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=[found in mailtrap settings]
MAIL_PASSWORD=[found in mailtrap settings]
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=me@mydomain.com
MAIL_FROM_NAME="${APP_NAME}"
Run Code Online (Sandbox Code Playgroud)