Uncaught Error: Class 'Sendgrid' not found in

Uncaught Error: Class 'Sendgrid' not found in

我在尝试使用 Sendgrid API 时遇到错误。错误出现为:

Fatal error: Uncaught Error: Class 'Sendgrid' not found in signin.php:xxx Stack trace: #0 index.php(yy): require() #1 {main} thrown in signin.php on line xxx.

我使用 composer 安装了 Sendgrid。然后我像这样注册自动加载器:

index.php

require __DIR__.'/../vendor/autoload.php';

然后按照下面 link 中的指南进行操作。

signin.php

use SendGrid\Mail\From;
use SendGrid\Mail\To;
use SendGrid\Mail\Mail;

$from = new From("test@example.com", "Example User");
$to = [
    new To(
        "test+test1@example.com",
        "Example User",
        [
            'subject' => 'Subject'
        ]
    )
];
$email = new Mail(
    $from,
    $tos
);

$email->setTemplateId("REDACTED");
$sendgrid = new \SendGrid(getenv('SENDGRID_API_KEY'));

autoload.php 文件可与其他作曲家一起使用 类。

到目前为止我尝试过的步骤:

  1. 卸载 sendgrid 并重新安装。
  2. 手动调用 sendgrid-php.php 以验证发送电子邮件是否正常。

参考

https://github.com/sendgrid/sendgrid-php/blob/main/USE_CASES.md#send-an-email-to-a-single-recipient

composer.json

{
    "require": {
        "sendgrid/sendgrid": "^8.0",
    }
}

我最终将代码放在一个函数中,并且它运行没有问题。我在 autoload.php 之后需要 mailer.php。

万一有人遇到这个问题,这就是我所做的。显然,您需要根据自己的需要对其进行自定义。

mailer.php

<?php

declare(strict_types=1);

use SendGrid\Mail\From;
use SendGrid\Mail\To;
use SendGrid\Mail\Mail;

function mailer() {
    $from = new From("test@example.com", "Example User");
    $to = new To(
        "test+test1@example.com",
        "Example User",
        [
            'subject' => 'Subject'
        ]
    );
    $email = new Mail($from, $to);

    $email->setTemplateId("REDACTED");
    $sendgrid = new \SendGrid(getenv('SENDGRID_API_KEY'));
}

我不确定为什么我的原始代码不起作用,但这个解决方案有效,所以我将保留它。