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

时间:2015-08-07 07:20:26

标签: php laravel laravel-5.1

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

Swift_TransportException in AbstractSmtpTransport.php line 162:Cannot send message without a sender address

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

'from' => array('address' => 'myusername@gmail.com', 'name' => 'hawle'),

19 个答案:

答案 0 :(得分:36)

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

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=25
MAIL_USERNAME= ***USER NAME***
MAIL_PASSWORD= ***PASSWORD***
MAIL_ENCRYPTION=tls

或确保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'),

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

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

php artisan config:cache

另请注意:

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

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

答案 1 :(得分:15)

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

'from' => ['address' => 'myname@gmail.com', 'name' => 'myname']

它将解决问题。

答案 2 :(得分:13)

也许有人正在使用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}"

运行之后,我没有更改mail.php文件中的任何内容,它在laravel 6中对我来说是有效的

php artisan config:cache

答案 3 :(得分:3)

我刚刚在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}"

答案 4 :(得分:2)

如果您无法访问.env文件,则可以在app / config / mail.php上为这些env调用添加默认值,如下所示:

    'from' =>  ['address' => env('MAIL_FROM_EMAIL','do_not_reply@email.com'), 'name' => env('MAIL_FROM_NAME','SpongeBob')],

这种方法会尝试从.env文件中获取数据,如果没有任何内容,则默认为您设置的内容。

答案 5 :(得分:1)

我在这里尝试了所有解决方案,但直到运行这三个命令后才起作用

php artisan config:clear

php artisan cache:clear

php artisan config:cache

答案 6 :(得分:1)

通过执行以下操作设法解决了这个问题

转到.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 

答案 7 :(得分:1)

LARAVEL 7 *如果没有发件人地址,则无法发送消息*


转到位于文件夹根目录下的.env文件


如果还使用smpt.mailtrap.io作为MAIL_HOST,则可以像这样设置邮件的配置。

MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=******username******
MAIL_PASSWORD=******password******
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=john@example.com
MAIL_FROM_NAME="${APP_NAME}"

现在设置您的MAIL_USERNAMEMAIL_PASSWORD click here to go to mailtrap


现在注册或登录,如果您已经拥有一个帐户。


然后单击“收件箱”,然后选择演示收件箱,您会在其中找到集成下拉列表,然后为Laravel选择,它将为您提供完成.env文件所需的用户名和密码。


然后将信息保存在.env文件中以进行邮件配置。


现在最重要的部分是您在终端中运行这两个命令行。


再次运行php artisan serve


运行php artisan config:clear


然后进行处理,并查看邮件陷阱收件箱。 对我来说,它像这样工作。

答案 8 :(得分:1)

确保env .file中的MAIL_FROM_ADDRESS不为空。

MAIL_FROM_ADDRESS=test@laravel.com

下一步,您必须使用以下命令:

php artisan config:cache
php artisan cache:clear

我希望它有用。

答案 9 :(得分:1)

Laravel 7 中,您的.env文件应如下所示

MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME="your username"
MAIL_PASSWORD="your password"
MAIL_ENCRYPTION=tls
#MAIL_FROM_ADDRESS=null
#MAIL_FROM_NAME="${APP_NAME}"

确保这两行都是 commentout ,就像这样...

#MAIL_FROM_ADDRESS=null
#MAIL_FROM_NAME="${APP_NAME}"

最终步骤:在终端中运行以下命令步骤以成功发送通知-

php artisan config:cache
php artisan cache:clear 
php artisan config:clear
    

答案 10 :(得分:1)

也不要忘记清除配置缓存!这就是我面临的问题!

php artisan config:cache

答案 11 :(得分:0)

问题是.env文件中MAIL_FROM_ADDRESS的值为空。

解决方案1: 更改MAIL_FROM_ADRESS的值以匹配您的电子邮件地址(不要忘记重新运行服务器)。 解决方案2: 保持.env文件不变,但您需要更改mail.php(app / config / mail.php):

从这些:

 'from' => [
    'address' => env('MAIL_FROM_ADDRESS','mail@test.com'),
    'name' => env('MAIL_FROM_NAME', 'Example'),
]

收件人:

'from' => [
    'address' => 'mail@test.com',
    'name' => env('MAIL_FROM_NAME', 'Example'),
]

答案 12 :(得分:0)

错误仍然发生。设置并运行命令后

php artisan view:clear;
php artisan config:cache;
php artisan cache:clear;
php artisan route:cache;

检查代码

\Illuminate\Support\Facades\Mail::send('layouts.mail', [ 'content' => 'testmail'],    function ($m) use ($msg2){
$m->from('abc@gmail.com', 'ABC'); 
// this line was env('MAIL_FROM_ADDRESS') ; cant read from .env
$m->to('xyz@gmail.com', 'XYZ')->subject('TestMailSubject!');
...

答案 13 :(得分:0)

如果您使用的是Gmail帐户,则设置现在有所不同。配置.env

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=example@gmail.com
MAIL_PASSWORD=password
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=example@gmail.com

您还可以ssl加密,然后进行以下设置:

MAIL_ENCRYPTION=ssl
MAIL_PORT=465

设置所有内容后运行:

php artisan config:cache

您可能还需要选中https://myaccount.google.com/security上的选项“缺乏安全的应用程序访问权限”。

答案 14 :(得分:0)

您需要使用自己的值更改这些默认值

'from' => [
    'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
    'name' => env('MAIL_FROM_NAME', 'Example'),
],

答案 15 :(得分:0)

请检查您的“MAIL_FROM_ADDRESS”不应为空。 然后使用 php artisan config:clear

为我工作。

答案 16 :(得分:0)

我不明白为什么,但我已经完成了上述所有操作,但没有任何改变。打开/关闭php artisan serve

我为解决这个问题所做的是通过执行 restart the PC 然后它运行顺利。

注意:

  • 我使用的是 Ubuntu 操作系统。
  • 有时我的电脑在 php artisan serve 仍在运行时休眠。我认为这可能会导致错误。

答案 17 :(得分:0)

我做了以上所有操作,但仍然没有得到预期的结果。错误改为: 预期响应代码 250,但得到代码“530”,消息为“530 5.7.1 需要身份验证

从这里你需要做的就是通过运行重新启动开发服务器; php工匠服务

这对我来说效果很好。

答案 18 :(得分:-1)

文件:/bootstrap/cache/config.php
改变:

'mail' => array(
            'driver' => 'smtp',
            'host' => 'mail.yourserversiteemail.com',
            'port' => '25',
            'from' =>
            array(
                'address' => 'panel@yourserversiteemail.com',
                'name' => 'sd',
            ),
            'encryption' => 'tls',
            'username' => 'yourUsername',
            'password' => 'yourPass',
            'sendmail' => '/usr/sbin/sendmail -bs',