【问题标题】:Trying to get Laravel 5 email to work试图让 Laravel 5 电子邮件工作
【发布时间】:2015-05-19 23:41:21
【问题描述】:

我正在尝试通过输入 URL 向指定用户发送电子邮件,但我收到以下错误:

AbstractSmtpTransport.php 第 383 行中的 Swift_TransportException: 预期响应代码 250,但得到代码“530”,消息“530 5.7.1 需要认证

到目前为止,我只是想让它与 Gmail 一起使用。我怎样才能让它工作?

这是我目前所拥有的:ma​​il.php

<?php
    return [
        'driver' => env('MAIL_DRIVER',' smtp'),
        'host' => env('MAIL_HOST', 'smtp.gmail.com'),
        'port' => env('MAIL_PORT', 587),
        'from' => ['address' =>"MyUsername@gmail.com" , 'name' => "example"],
        'encryption' => 'tls',
        'username' => env('MyUsername@gmail.com'),
        'password' => env('MyPassword'),
        'sendmail' => '/usr/sbin/sendmail -bs',
        'pretend' => false,
    ];

这就是我在路线中所拥有的:

Route::get('test', function() {
    Mail::send('Email.test', [], function ($message) {
        $message->to('example@gmail.com', 'HisName')->subject('Welcome!');
    });
});

这就是我的控制器中的内容:

class MailController extends Controller
{
    public function Sending_Email()
    {
        $this->call('GET','Email.test');
        return View('Email.test');
    }
}

这就是我的 .env 文件中的内容:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=MyUsername@gmail.com
MAIL_PASSWORD=MyPassword

【问题讨论】:

  • 使用 mailtrap.io 进行测试
  • 我在使用 mailtrap.io 时遇到了完全相同的错误

标签: php laravel laravel-5 email


【解决方案1】:

您收到身份验证错误,因为您的配置文件中的用户名和密码设置错误。

改变这个:

'username' => env('MyUsername@gmail.com'),
'password' => env('MyPassword'),

到这里:

'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),

env 方法检查您的 .env 文件。在您的 .env 文件中,您调用这些 MAIL_USERNAME,这就是您需要传递给 env 方法的内容。

一个故障排除提示:添加dd(Config::get('mail'));,以便您可以看到实际生成的配置。这将帮助您发现此类问题,并准确了解 Laravel 将尝试和使用的信息。因此,您可能希望暂时在您的测试路线中停止它以检查您所拥有的:

Route::get('test', function()
{
    dd(Config::get('mail'));
});

【讨论】:

  • 所以我更改了我的 mail.php 文件以反映您的建议` 'username' => env('MAIL_USERNAME'),` 和 'password' =&gt; env('MAIL_PASSWORD'), 我觉得这很有趣,因为到处都告诉我输入你的电子邮件地址和密码。我仍然收到错误Swift_TransportException in AbstractSmtpTransport.php line 383: Expected response code 250 but got code "530", with message "530 5.7.1 Authentication required. I'm sorry but where do i actually place the "dd(Config::get('mail'));。 Config目录包含很多文件
  • 查看我的更新答案,以及如何检查您的配置的示例。
  • 太棒了,我仍然遇到错误,但我实际上可以看到它在做什么。出于某种原因,它试图将“host”=>“mailtrap.io”传递给环境,即使在邮件php中我说的是'host' =&gt; env('MAIL_HOST', 'smtp.gmail.com'),
  • 仔细检查 .env 文件中的 MAIL_HOST
  • 准确无误。 MAIL_HOST=smtp.gmail.com 所以我最终做的是从 mail.php 文件的每个部分中删除所有 env。现在正确的信息正在传递。 OMG 谢谢你成功了。你是男人
【解决方案2】:

我知道它现在对你有用 @Vantheman6 但这对我有用,以防其他人也一样。

我在 .env 文件中添加了我正在使用的邮件服务的详细信息。所以请确保以下详细信息

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=MyUsername@gmail.com
MAIL_PASSWORD=MyPassword

.env 文件中的内容是准确的。

注意:不要忘记在编辑 .env 文件后重新启动服务器,以便它会选择您放入其中的新数据。

使用以下命令清除配置缓存:

php artisan config:cache

如果您不重新启动服务器,即使您进行了可能导致此错误的更改,.env 文件仍将继续向应用程序显示旧邮件数据。

【讨论】:

  • 哇,那个“笔记”救了我。我不知道 ENV 变量在启动时被缓存了!
  • 您能否更新答案 - 并突出显示重启服务器,而不是配置文件?
  • @mrwaim,我认为重新启动服务器正是我在注释中指定的,除非我没有得到你的暗示。
  • 我建议删除 "Note:" 之前的所有内容 - 有帮助的是注释,而不是之前的内容。我建议,如果您想保留其他部分,请将它们放在便笺之后。 3 人对“便笺”评论投了赞成票,因此该便笺可能也对他们有所帮助。
  • 如果您之前使用php artisan config:cache 缓存了您的配置,那么重新启动服务器将不会获取更新的配置。再次尝试运行php artisan config:cache
【解决方案3】:

对于 laravel 5.1,我的 .env 文件配置是这样的

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

这里最重要的是我创建了 gmail 应用程序专用密码(16 位)。

我需要再透露一件事,因为任何配置都没有运气。也就是说,每当我更改 .env 文件时都需要运行此命令

php artisan config:cache

这是最重要的,因为没有这个命令 laravel 会从它的缓存中执行之前的设置。我花了 10 多个小时才弄清楚。

【讨论】:

  • php artisan config:cache 为我解决了这个问题时,我一直使用php artisan cache:clear。谢谢!
  • 因为您对php artisan config:cache的注释而被投票
【解决方案4】:

终于拿到了!只是为了分享,除了 .env 之外还有更多的配置

这是.env

MAIL_DRIVER=smtp

MAIL_HOST=smtp.gmail.com

MAIL_PORT=587

MAIL_USERNAME=UserName@gmail.com

MAIL_PASSWORD=********

MAIL_ENCRYPTION=tls

config/mail.php 还需要输入地址和名称才能工作。

'driver' => env('MAIL_DRIVER', 'smtp'),
'host' => env('MAIL_HOST', 'smtp.gmail.com'),
'port' => env('MAIL_PORT', 587),
'from' => ['address' => 'Username@gmail.com' , 'name' => 'YourName' ],
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'sendmail' => '/usr/sbin/sendmail -bs',
'pretend' => false,

【讨论】:

    【解决方案5】:

    我和你有同样的问题,我刚刚解决了。

    首先,您需要仔细检查 .env 设置是否正确。这是我的设置:

    MAIL_DRIVER=smtp
    MAIL_HOST=smtp.gmail.com
    MAIL_PORT=587
    MAIL_USERNAME=yourusername
    MAIL_PASSWORD=yourpassword
    MAIL_ENCRYPTION=tls
    

    请确保您的密码不在引号之间:)。

    在 config/mail.php 中有以下内容,没有 cmets。

    <?php
    
    return [
    
    'driver' => 'smtp',
    'host' => env('MAIL_HOST', 'smtp.gmail.com'),
    'port' => env('MAIL_PORT', '587'),
    'from' => ['address' => 'yourusername', 'name' => 'yourname'],
    'encryption' => env('MAIL_ENCRYPTION','tls'),
    'username' => env('MAIL_USERNAME', 'username@gmail.com'),
    'password' => env('MAIL_PASSWORD', 'password'),
    'sendmail' => '/usr/sbin/sendmail -bs',
    
    'pretend' => false,
    
    ];
    

    希望它对你有用:)

    【讨论】:

      【解决方案6】:

      如果您曾经遇到过同样的问题并在线尝试所有方法但都不起作用,则可能是配置缓存文件发送了错误的信息。您可以在 bootstrap/cache/config.php 中找到它。确保凭据在其中。我花了一周的时间才弄清楚这一点。我希望有一天这会对某人有所帮助。

      【讨论】:

      • 您先生,值得一瓶好酒,非常感谢!我注意到那个文件中的用户名和密码是空的,即使我在两个适当的文件中填写了它们。从那里,我知道该怎么做!谢谢!
      【解决方案7】:

      我也遇到了同样的问题;我的MAIL_ENCRYPTIONmail.php 上是tls,但在.env 文件上是null
      所以我将null 更改为tls 并且成功了!

      【讨论】:

        【解决方案8】:

        出于开发目的https://mailtrap.io/ 为您提供了所有需要添加到 .env 文件中的设置。 例如:

        Host:   mailtrap.io
        Port:   25 or 465 or 2525
        Username:   cb1d1475bc6cce
        Password:   7a330479c15f99
        Auth:   PLAIN, LOGIN and CRAM-MD5
        TLS:    Optional
        

        否则,出于实施目的,您可以从邮件中获取要添加到 .env 文件中的 smtp 凭据(如 gmail n all)

        添加后一定要重启服务器

        【讨论】:

          【解决方案9】:

          这也发生在我身上。

          这是因为当我们编辑.env 文件时,我们需要重新启动服务器。只需停止当前的php artisan serve 并再次启动它。这肯定会奏效。

          如果还是不行,试试php artisan config:cache

          【讨论】:

            【解决方案10】:

            供以后来这里的人参考。在您运行此处第三个答案中给出的命令后(我现在使用的是 Laravel 5.3)。 p>

            php artisan config:cache
            

            你可能会遇到这个问题:

            [ReflectionException]
            Class view does not exist
            

            在这种情况下,您需要手动将其重新添加到 app.php 文件下的提供程序列表中。去: app-&gt;config-&gt;app.php-&gt;'providers[]' 并添加它,如下所示:

            Illuminate\View\ViewServiceProvider::class,
            

            希望对某人有所帮助。

            【讨论】:

              【解决方案11】:
              1. 你去 Mailgun
              2. 点击授权收件人
              3. 添加您希望向其发送邮件的电子邮件地址。
              4. 验证发送到邮件的消息。
              5. 太棒了!...你很好。

              【讨论】:

              • 请原谅我的无知。上面的答案如何解决问题中的 Laravel5 邮件问题?
              【解决方案12】:

              这只是意味着您的服务器无权访问 SMTP 服务器。

              您可以通过以下方式进行测试:

              telnet <smtpServer> <smtpPort>
              

              您应该会收到拒绝访问错误。

              解决方案是只使用您的服务器可以访问的另一个 SMTP 服务器。

              【讨论】:

                【解决方案13】:

                以上解决方案均不适用于本地主机。我什至允许从不太安全的应用程序访问,允许通过显示解锁验证码进行访问,并将验证对等点和验证对等点名称设置为 false 以用于 SSL。

                最后,我使用了MailHog的开源SMTP测试解决方案。步骤如下:

                1. Download the latest version of MailHog for your OS
                2. 在您的 .env 文件中指定以下设置

                MAIL_DRIVER=smtp

                MAIL_HOST=127.0.0.1

                MAIL_PORT=1025

                MAIL_USERNAME=testuser

                MAIL_PASSWORD=testpwd

                MAIL_ENCRYPTION=null

                MAIL_FROM_ADDRESS=theaddress@youwant.com

                1. 运行下载的MailHog文件
                2. 发送电子邮件
                3. 通过访问 localhost:8025 检查发送的电子邮件

                【讨论】:

                  【解决方案14】:

                  清除缓存即可解决问题

                  php artisan config:cache
                  

                  【讨论】:

                    【解决方案15】:

                    如果您来自dd(Config::get('mail')); 的结果为空,只需使用命令

                    php artisan config:clear
                    

                    【讨论】:

                      【解决方案16】:

                      您应该重新启动服务器并运行以下命令:

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

                      应该可以的。

                      【讨论】:

                        【解决方案17】:

                        就我而言: 重启服务器并运行php artisan config:clear 命令。

                        【讨论】:

                          【解决方案18】:

                          我的意见是在对 .env 文件进行更改后重新启动服务器并再次为应用程序提供服务。只是为了确定实际错误。 php artisan clear and cache 后来工作得很好。

                          【讨论】:

                            【解决方案19】:

                            就我而言,问题是我使用 from('mymail@gmail.com') 的电子邮件与我在 .env 文件中配置为 MAIL_USERNAME 的电子邮件不同。

                            下面是.env中邮件配置的sn-p

                            MAIL_DRIVER=smtp
                            MAIL_HOST=smtp.gmail.com
                            MAIL_PORT=587
                            MAIL_USERNAME=anothermail@gmail.com
                            MAIL_PASSWORD=strongpassword
                            MAIL_ENCRYPTION=tls
                            

                            在邮件发送方式中,我已经设置了

                            ->from('mymail@gmail.com')->to('myfriend@gmail.com');
                            

                            始终确保使用的邮件

                            ->来自('mymail@gmail')

                            .env MAIL_USERNAME中配置的一样。

                            修改.env 后确保restart your server 在您使用laravel 7 及更低版本的情况下,因为当.env 文件被修改时它们没有自动重启。

                            如果您已完成上述所有操作但仍未解决,请尝试运行以下命令以清除系统中的所有缓存配置:

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

                            【讨论】:

                              猜你喜欢
                              • 2015-05-18
                              • 2011-08-07
                              • 2015-10-01
                              • 2015-06-12
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              相关资源
                              最近更新 更多