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

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

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

我使用 Mailgun,可以在用户注册时正常发送电子邮件等等。

我开始尝试使用调度命令并创建了一个自定义 artisan 命令来获取一些记录并为此发送一些电子邮件。

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

cURL error 60: SSL certificate problem: unable to get local issuer certificate

我已经在本地设置了一个 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\Clientverify 密钥从 configureDefaults 方法更改为 false,就像我在本地机器上所做的那样

您可以阅读此 conversation in Laracasts 并尝试下载某些评论中的 .pem 文件。

以下是一些链接:

之后你应该相应地编辑你的 php.ini 文件:

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

PS: 我会直接编辑供应商文件,因为它更快而且不难实现。

使用此代码:

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

这对我有用。

显然 PHP 从 CLI 访问时可能会加载不同的 php.ini 文件。 See here.

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