【发布时间】:2020-09-30 09:48:51
【问题描述】:
问题:我遇到了一个 HTTP 400 错误,指出“前提条件检查失败”。每当我调用 sendMessage() 方法时。
我不知道我有什么可以考虑:
- 已启用 Gmail API。
- 创建了一个服务帐号。
- 设置域范围的委派(适用于 G-Suites)。
- 为服务启用了域范围的委派。
请注意,我已成功运行 quickstart.php,因此我知道 google 库已正确安装。以下是我的代码:
<?php
require_once('../../vendor/autoload.php');
$client = new Google_Client();
$credentials_file = '../../vendor/google/auth/credentials.json';
$client->setAuthConfig($credentials_file);
$client->setApplicationName("no-reply mailing");
$client->setScopes(['https://www.googleapis.com/auth/gmail.send']);
$service = new Google_Service_Gmail($client);
$message = createMessage('me', 'some@email.com', 'This is but a test', 'Please work...');
// Email a user
sendMessage($service, 'me', $message);
/**
* @param $sender string sender email address
* @param $to string recipient email address
* @param $subject string email subject
* @param $messageText string email text
* @return Google_Service_Gmail_Message
*/
function createMessage($sender, $to, $subject, $messageText) {
$message = new Google_Service_Gmail_Message();
$rawMessageString = "From: <{$sender}>\r\n";
$rawMessageString .= "To: <{$to}>\r\n";
$rawMessageString .= 'Subject: =?utf-8?B?' . base64_encode($subject) . "?=\r\n";
$rawMessageString .= "MIME-Version: 1.0\r\n";
$rawMessageString .= "Content-Type: text/html; charset=utf-8\r\n";
$rawMessageString .= 'Content-Transfer-Encoding: quoted-printable' . "\r\n\r\n";
$rawMessageString .= "{$messageText}\r\n";
$rawMessage = strtr(base64_encode($rawMessageString), array('+' => '-', '/' => '_'));
$message->setRaw($rawMessage);
return $message;
}
function sendMessage($service, $userId, $message) {
try {
$message = $service->users_messages->send($userId, $message);
print 'Message with ID: ' . $message->getId() . ' sent.';
return $message;
} catch (Exception $e) {
print 'An error occurred: ' . $e->getMessage();
}
}
?>
非常感谢任何帮助!
【问题讨论】:
-
嗨!您的 create 函数是否正常工作而没有返回任何错误?您能否在方法
SendMessage中更改您的电子邮件地址的参数me并查看您得到什么错误?当您使用服务帐户进行授权时,可能会出现一些问题,因为服务帐户无法发送消息或模拟用户。谢谢:D
标签: php gmail-api google-workspace