cURL错误60:使用artisan命令发送电子邮件时出现SSL证书问题


cURL error 60: SSL cert issue when sending email with artisan command

我在Laravel中发送电子邮件时遇到了一个奇怪的问题。

我使用Mailgun,可以在用户注册时发送电子邮件,诸如此类。

我开始玩调度命令,并创建了一个自定义的手工命令来获取一些记录并发送一些电子邮件。

然而,当我运行这个命令时,我得到了一个错误:

cURL错误60:SSL证书问题:无法获取本地颁发者证书

我已经在本地设置了一个cacert.pem,并成功地将其链接到我的php.ini文件中,这就是我正常发送电子邮件的方式。

我不明白为什么我的命令不能发送电子邮件,而我可以在控制器内很好地发送电子邮件

这是我用于命令的代码:

$reminders = Reminder::where('utcReminderDate' , '<=', 'Carbon'Carbon::now()->format('Y-m-d H:i'))->get();
foreach($reminders as $reminder)
    {
        Mail::send('emails.test', [], function($message) {
            $message->to('me@example.com', 'Joe Bloggs');
            $message->subject('A reminder for you');
        });
    }

我想得到所有需要发送的提醒,并通过它们循环发送出去。

当我通过命令行运行命令来测试它时,它会显示上面的错误。

如果您能帮我们发送电子邮件,我们将不胜感激。如果有区别的话,我会使用WAMP。

您可以修改供应商文件夹GuzzleHttp'Client,将verify密钥从configureDefaults方法更改为false,就像我在本地机器中所做的那样

你可以在Laracasts中阅读这段对话,并尝试下载一些评论中的.pem文件。

以下是一些链接:

  • .pem文件下载

之后,您应该相应地编辑php.ini文件:

curl.cainfo = "[pathtothisfile]'cacert.pem"

附言:我只想编辑供应商文件,因为它更快,而且不难实现。

显然,当从CLI访问PHP时,它可能会加载不同的PHP.ini文件。请参见此处。

将php.ini文件复制到C:'windows中解决了这个问题。

使用此代码:

$this->client = new GuzzleClient(['defaults' => [
    'verify' => false
]]);

这对我有用。