【问题标题】:Laravel Homestead Swift Cannot send message without a sender addressLaravel Homestead Swift 无法在没有发件人地址的情况下发送消息
【发布时间】:2015-10-30 13:10:18
【问题描述】:

当我尝试发送密码重置邮件时,我在 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'),

【问题讨论】:

    标签: php laravel laravel-5.1


    【解决方案1】:

    在您的.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 的服务。它并没有真正发送电子邮件。

    正如维克托米特所说: 考虑创建应用密码,而不是使用您通常的通行证来满足此需求。创建密码链接myaccount.google.com/apppasswords

    【讨论】:

    • 我试图在此设置中使用 mailtrap.io 服务,但它不起作用。问题是我认为你不应该改变这一行 'from' => ['address' => 'myusername@gmail.com', 'name' => 'hawle'],
    • @GergelyHavlicsek Mailtrap 用于测试目的,如果您想向其他人发送邮件,您应该使用您自己的电子邮件帐户并将配置更改为您的提供商使用的 smtp,例如 google 使用 smtp。 gmail.com。如果您使用的是真实的 smtp,则还需要使用真实的凭据。
    • 关键问题是 MAIL_ENCRYPTION=null。用 MAIL_ENCRYPTION=tls 替换它。
    • 考虑创建应用密码,而不是使用您通常的通行证来满足此需求。创建密码链接myaccount.google.com/apppasswords
    • 如果要清除配置缓存命令是:php artisan config:clear right ?
    【解决方案2】:

    确保您在 app/config/mail.php 中设置了“发件人”

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

    它会解决问题。

    【讨论】:

    • 并在它之后执行 'php artisan config:cache'。
    • @pbwned 你的评论让我免于拔头发
    【解决方案3】:

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

    【讨论】:

    • 以上所有操作都完成了,直到我做了,php artisan config:cache
    • 在 laravel 7 中我必须在 .env 中添加 MAIL_FROM_ADDRESS
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        【解决方案6】:

        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


        然后执行您的流程并检查邮件陷阱收件箱。 对我来说,它是这样工作的。

        【讨论】:

          【解决方案7】:

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

          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!');
          ...
          

          【讨论】:

            【解决方案8】:

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

            MAIL_FROM_ADDRESS=test@laravel.com
            

            下一步你必须使用这些命令:

            php artisan config:cache
            php artisan cache:clear
            

            希望对你有用。

            【讨论】:

              【解决方案9】:

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

              为我工作。

              【讨论】:

                【解决方案10】:

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

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

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

                【讨论】:

                  【解决方案11】:

                  别忘了清除配置缓存!这是我面临的问题!

                  php artisan config:cache
                  

                  【讨论】:

                    【解决方案12】:

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

                    php artisan config:clear

                    php artisan cache:clear

                    php artisan config:cache

                    【讨论】:

                      【解决方案13】:

                      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
                          
                      

                      【讨论】:

                        【解决方案14】:

                        如果您使用的是 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 上的“不太安全的应用程序访问”选项。

                        【讨论】:

                          【解决方案15】:

                          问题是 .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'),
                          ]
                          

                          【讨论】:

                            【解决方案16】:

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

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

                            【讨论】:

                              【解决方案17】:

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

                              我为解决这个问题所做的就是通过restart the PC 来解决这个问题,然后它就可以顺利运行了。

                              注意:

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

                              【讨论】:

                                【解决方案18】:

                                我完成了上述所有操作,但仍然没有得到预期的结果。错误改为: 预期响应代码为 250,但得到代码“530”,消息为“530 5.7.1 Authentication required

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

                                这对我来说效果很好。

                                【讨论】:

                                  【解决方案19】:

                                  万一您在部署阶段遇到此挑战并在尝试上述所有步骤后遇到相同的错误,请确保您的 .env 文件中没有重复的 MAIL_FROM_ADDRESS。如果你有一个注释掉了,也删除它。

                                  【讨论】:

                                    【解决方案20】:

                                    文件:/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',
                                    

                                    【讨论】:

                                      猜你喜欢
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 2020-10-16
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 2020-04-08
                                      • 1970-01-01
                                      • 1970-01-01
                                      相关资源
                                      最近更新 更多