【问题标题】:cURL error 60: SSL cert issue when sending email with artisan commandcURL 错误 60:使用 artisan 命令发送电子邮件时出现 SSL 证书问题
【发布时间】:2015-12-16 06:08:28
【问题描述】:

我在 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。

【问题讨论】:

  • 一般cli使用不同的php.ini

标签: php laravel curl laravel-5.1 guzzle


【解决方案1】:

您可以修改供应商文件夹 GuzzleHttp\Clientverify 密钥从 false 方法从 configureDefaults 方法修改为我在本地计算机中所做的那样

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

这里有一些链接:

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

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

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

【讨论】:

  • 我会尝试修改供应商文件,因为我已经有了cacert.pem,正如我所提到的。
  • 很高兴能帮上忙 :)
  • php.ini 文件
【解决方案2】:

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

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

【讨论】:

  • 谢谢你!我浪费了 DAYS 天,试图弄清楚为什么 cURL 脚本在正常的序列化脚本中运行时工作正常,但是当我尝试在并行任务中多次运行它时会给我一个证书错误。事实证明,即使我的 curl.cainfo 在 php.ini 中设置正确,运行 asyc 任务的库仍在从不同的 ini 文件中读取。去搞清楚。感谢您为我指明正确的方向
【解决方案3】:

使用此代码:

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

这对我有用。

【讨论】:

    猜你喜欢
    • 2020-09-18
    • 2021-06-02
    • 2018-01-10
    • 2016-10-26
    • 2020-09-14
    • 2017-11-21
    • 2014-02-06
    • 2020-09-20
    • 2017-04-22
    相关资源
    最近更新 更多