【问题标题】:Gmail API send e-mail using other credentialsGmail API 使用其他凭据发送电子邮件
【发布时间】:2020-08-22 08:16:16
【问题描述】:

$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”。是否有可能将“我”的值更改为另一封电子邮件(我以前在凭据.json 上使用的电子邮件)。

【问题讨论】:

  • 您好@Chillax,您将me 的值更改为您在credentials.json 上使用的值是什么意思?您能否提供更多有关这方面的信息以及您想要实现的具体目标?
  • -@ale13 我使用 apitest@gmail.com 创建了一个 API,用于登录我的主电子邮件地址 (main@gmail.com),然后我尝试使用 apitest@gmail.com 发送电子邮件,如果我将 $userid 参数上的“我”更改为 apitest@gmail.com,它表示委派被拒绝。但是当我将其更改为“我”时,它可以发送电子邮件,但使用我曾经记录的主电子邮件添加
  • @ale13 我添加了用于发送电子邮件的代码
  • 您为哪个帐户获得了 Gmail API 的credentials.json? @Chillax

标签: php gmail gmail-api


【解决方案1】:

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

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

根据Handling authorization requests documentation

当用户第一次加载您的应用程序时,他们会看到一个对话框,以授予您的应用程序在请求的权限范围内访问其 Gmail 帐户的权限。在此初始授权之后,仅当您的应用的客户端 ID 更改或请求的范围已更改时,才会向用户显示权限对话框。

参考

【讨论】:

  • 如何使用存储的凭据进行授权?通过 php ?
猜你喜欢
  • 1970-01-01
  • 2017-12-03
  • 2018-01-26
  • 2021-09-11
  • 2015-01-02
  • 2017-04-14
  • 2019-10-16
  • 1970-01-01
  • 2014-10-30
相关资源
最近更新 更多