使用Gmail REST API进行Gmail API身份验证和发送电子邮件,而无需重定向到此屏幕。

时间:2016-08-29 15:04:52

标签: php rest gmail gmail-api gmail-imap

我正在开展一个项目,我需要使用Gmail PHP API发送电子邮件。我尝试配置身份验证,并且代码最初用于一个电子邮件地址。但是,如果我尝试使用不同的电子邮件地址重新配置相同的项目,则gmail不会使用新的电子邮件地址进行授权。到目前为止,我不知道我到底失踪了什么。这是最初有效的代码。

    require '../functions/predump.php';
    require '../vendor/autoload.php';
    require '../database/connection.php';
    require '../database/queries.php';
    require '../database/sample.php';
    $client_id = 'aoppedisano@tecnavi.com';
    $service_account_name = 'anthony@teak-truck-  130612.iam.gserviceaccount.com';
    $key_file_location = 'anthony.p12';
   //var_dump($key_file_location);
   $userid_from='aoppedisano@tecnavi.com';
   $client = new Google_Client();
   //var_dump($client);
   $client->setApplicationName("Client_Library_Examples");

这是最初有效的代码。但是现在当我尝试使用其他电子邮件地址进行配置时,我生成了服务帐户密钥和客户端ID。我看到它没有配置。我不完全确定原因是什么。我唯一的目标是通过身份验证使代码工作。完成身份验证后,整个代码都可以正常运行。但是,我不知道如何使它发挥作用。我试过关注谷歌文档,但没有帮助。我试过这个链接并且它有效,但是,每次我想发送电子邮件时,我都会将屏幕重定向到gmail登录。但我不希望这样。我想要身份验证而不将ui重定向到此页面。enter image description here

1 个答案:

答案 0 :(得分:1)

基于此Quickstart sample,您可以将凭据存储到磁盘,这样您就不必每次都登录。

// Store the credentials to disk.
    if(!file_exists(dirname($credentialsPath))) {
      mkdir(dirname($credentialsPath), 0700, true);
    }
    file_put_contents($credentialsPath, json_encode($accessToken));
    printf("Credentials saved to %s\n", $credentialsPath);
  

Authorizing with stored credentials

     

当用户在成功的首次授权流程后访问您的应用程序时,您的应用程序可以使用存储的刷新令牌来授权请求​​,而无需再次提示用户。

     

如果您已经对用户进行了身份验证,则您的应用程序可以从其数据库中检索刷新令牌,并将令牌存储在服务器端会话中。如果刷新令牌被撤销或无效,则需要捕获并采取适当的措施。

还发现此thread建议清除您的Cookie。您还可以尝试使用已停用的实验室登录:http://mail.google.com/mail/?labs=0。您还可以查看可能有帮助的相关blog