首页 文章

试图让Laravel 5电子邮件发挥作用

提问于
浏览
132

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

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

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

这是我到目前为止: mail.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

18 回答

  • 11

    在我的情况下:重新启动服务器并运行 php artisan config:clear 命令 .

  • 1
    • 你去了Mailgun

    • 单击“授权收件人”

    • 添加您希望发送邮件的电子邮件地址 .

    • 验证发送到邮件的邮件 .

    • 布拉沃!...你很高兴 .

  • -1

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

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

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

    在.env文件中是准确的 .

    NOTE: Don't forget to restart your server after editing the .env file so it will pick the new data that you put in there.

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

  • 206

    对于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个小时才能搞清楚 .

  • 43

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

    改变这个:

    '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'));
    });
    
  • -1

    问题将通过清除缓存来解决

    php artisan config:cache
    
  • -1

    出于开发目的,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

    如果您遇到同样的麻烦并在线尝试所有内容并且它不起作用,则可能是发送错误信息的配置缓存文件 . 您可以在bootstrap / cache / config.php中找到它 . 确保凭据正确 . 我用了一个星期来搞清楚这一点 . 我希望有一天这会有所帮助 .

  • 8

    终于有了!只是为了分享,有更多的配置而不仅仅是.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,
    
  • 2

    它也发生在我身上 .

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

    If still not worked try doing php artisan config:cache

  • 0

    For future reference to people who come here. 运行第三个答案中给出的命令后(我现在使用的是Laravel 5.3) .

    php artisan config:cache
    

    您可能会遇到此问题:

    [ReflectionException]
    Class view does not exist
    

    在这种情况下,您需要手动将其添加回app.php文件下的提供者列表 . GO-TO: app->config->app.php->'providers[]' 并添加它,如下所示:

    Illuminate\View\ViewServiceProvider::class,
    

    希望这有助于某人 .

  • 2

    我有同样的问题;我的'MAIL_ENCRYPTION'在mail.php上是'tls'但在.env文件上是'null'所以我将'null'更改为'tls'并且它有效!

  • 8

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

    你可以通过这样做来测试:

    telnet <smtpServer> <smtpPort>
    

    您应该获得Access denied错误 .

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

  • 7

    以上解决方案都不适用于localhost . 我甚至允许从不太安全的应用程序访问,允许通过显示解锁验证码进行访问,并设置验证对等方并验证SSL的对等名称为false .

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

    MAIL_DRIVER = smtp MAIL_HOST = 127.0.0.1 MAIL_PORT = 1025MAIL_USERNAME = testuser MAIL_PASSWORD = testpwd MAIL_ENCRYPTION = null MAIL_FROM_ADDRESS=theaddress@youwant.com

    • 运行MailHog的下载文件

    • 发送电子邮件

    • 通过访问localhost:8025检查发送的电子邮件

  • 27

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

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

    这应该工作 .

  • 4

    如果 dd(Config::get('mail')); 的结果为null,则只需使用该命令

    php artisan config:clear
    
  • 1

    我遇到了和你一样的问题,我才开始工作 .

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

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

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

    在config / mail.php中,它有以下内容,没有注释 .

    <?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,
    
    ];
    

    希望这对你有用 :)

  • -3

    我也有同样的问题 . 我通过重新启动我的Web服务器修复了这些错误 .

相关问题