Gmail API使用其他凭据发送电子邮件

时间:2020-05-07 06:02:17

标签: php gmail gmail-api


$client->setAccessToken($accessToken);
$service = new Google_Service_Gmail($client);
$email = createMessage("test email");
sendMessage($service,"me",$email);


function createMessage($email) {

  $to ="email@addrress.com";
  $strSubject = 'TEST THREAD123125';
  $strRawMessage = "From: apitest@gmail.com\r\n";
  $strRawMessage .= "To: ".$to." \r\n";
  $strRawMessage .= "Cc:" .  $to  . "\r\n";
  $strRawMessage .= 'Subject: =?utf-8?B?' . base64_encode($strSubject) . "?=\r\n";
  $strRawMessage .= "MIME-Version: 1.0\r\n";
  $strRawMessage .= "Content-Type: text/html; charset=utf-8\r\n";
  $strRawMessage .= 'Content-Transfer-Encoding: quoted-printable' . "\r\n\r\n";
  $strRawMessage .= "this <b>is a test message!\r\n";
  $mime = rtrim(strtr(base64_encode($strRawMessage), '+/', '-_'), '=');
  $message = new \Google_Service_Gmail_Message();
  $message->setRaw($mime);
  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();
  }
}

我正在尝试根据https://developers.google.com/gmail/api/v1/reference/users/messages/send上的文档使用此功能

由于我使用了gmail身份验证,因此$ userid的默认值为“ me”。是否有可能将“我”的值更改为另一封电子邮件(我以前在credits.json上使用的电子邮件)。

1 个答案:

答案 0 :(得分:0)

在这种情况下,您收到的delegation denied错误消息是由于您用于请求的其他电子邮件地址不是经过授权的电子邮件地址。

获取access token时,是为main@gmail.com获取的,但这并不授予对提到的apitest@gmail.com的其他电子邮件地址的访问权限。

根据Handling authorization requests documentation

当用户首次加载您的应用程序时,系统会显示一个对话框,以授予您的应用程序访问权限,以使用请求的权限范围访问其Gmail帐户。进行此初始授权后,仅当您的应用的客户端ID更改或请求的范围已更改时,才会向用户显示权限对话框。

参考