2016-06-23 61 views
1

我一直在为此工作了3天,尝试了各种方法,通过gmail API文档和stackoverflow进行搜索,但我仍然不确定是否有可能。没有用户界面的gmail-api php

我想在cron风格的过程中用gmail api发送邮件。 (不是字面上的cron,而是相似的)。所以没有用户交互。

我设置凭据https://console.developers.google.com/apis/credentials页面上,但是当我尝试使用它,我得到的错误。我也从https://developers.google.com/gmail/api/quickstart/php#step_2_install_the_google_client_library运行quickstart.php,但似乎它创建的凭据在3600秒后过期。我甚至不知道如何使用它们,因为它没有与其他凭证文件类似的密钥。

然后,我看到凭据页面上,如果您尝试创建一个新的证书为Gmail的API,用于一个cron作业,它不会让你失望。它只是说“用户数据无法从没有UI的平台访问,因为它需要用户进行登录交互。”

我的问题是,是否甚至可能运行一个cron作业来使用Gmail API发送电子邮件,而不建立实现卷曲阅读和刮网页我自己的类?

编辑:我感谢大家的帮助,但我只是想看看有没有人真的做到了。到目前为止,没有人承认它。我已经看过服务级别凭证。我查看了用户级别凭证。我试过快速启动。快速启动工作,但即使使用结果立即发送电子邮件失败,登录失败。

我读过关于刷新密钥的文档。

它只是在我看来,谷歌已经做了这么多可供他们可能已经忘记,而无需用户互动做任何的API。嘿,我明白了。试图写一切都很复杂。我没有抱怨。我只是在问,如果任何人甚至可以为此使用Gmail。

+1

您可以使用Gmail的SMTP。 –

+0

你的意思是我询问的gmail-api?或者是别的什么? – jim

回答

1

我不知道Gmail的API明确,但如果你正在使用OAuth获取证书通常还有就是你可以用它来更新您的凭据刷新令牌(基本上得到了一组新)programmaticly。你可以阅读更多关于它here

编辑: 您需要的UI第一次你得到的令牌信息。这可以通过设置中的按钮或将返回的信息存储在永久位置(如数据库)的东西来完成。然后,对于'cron'类型的调用,您引用访问令牌,或者如果过期,则使用刷新令牌来获取新的访问令牌。

+0

谢谢。它表明它可以做到,但似乎没有明确地这样说。它也与创建证书页面上的信息相冲突:“用户数据无法从没有UI的平台访问,因为它需要用户进行登录才能进行交互。”我真的希望有人用gmail api完成了这项工作。 – jim

+0

我一直在尝试这样做,但我仍然得到一个未登录的错误。我得说,如果能够找到一个能够从一开始就做到这一点的样本,或者如果某个真正成功的人可以确认它是可能的,这将会简单得多。我严重怀疑它只是从android授权系统复制而来,并不能被cron作业使用。 – jim

+0

@jim你检查了[实现服务器端授权](https://developers.google.com/gmail/api/auth/web-server#exchange_the_authorization_code_for_an_access_token)吗? –

1

您可以在用户第一次登录时请求离线访问,并在访问令牌到期时刷新它。你必须要求用户第一次登录。

首先,在生成登录url之前,您需要将访问类型设置为'offline'。为此,请在致电$this->client->createAuthUrl()之前添加以下代码行。

$this->client->setAccessType($accessType); 

这将在用户第一次进行身份验证时提示用户进行脱机访问。然后,在你的回调函数,你应该验证基于接收到的代码的用户,并获得刷新令牌:

$this->client->authenticate($code); 
$tokens = $this->client->getAccessToken(); 
$refresh_token = $tokens->refresh_token; 

保存在数据库中refresh_token,你将能够创建新的访问令牌每次到期时。你这样做,用下面的代码:

$this->client->refreshToken($refreshToken); 

注意:这个答案是基于谷歌的PHP SDK和客户端是他们的客户对象。我为他们的API创建了一个包装器,您可能会发现它们对实现有用并且更容易。你可以检查它here,它涵盖了大部分功能。

+0

我正在通过你的例子,但它更多的UI和表单。它似乎并不真正在做我在问什么。我想知道的是,如果甚至可以使用gmail api(oAuth 2.0)从cron作业发送邮件。如果是这样,那么如果某人有一个简单直接的例子来说明如何去做,那将会很棒。现在我使用我创建的服务级别证书,创建一个新的Google_Client(),创建应用程序名称,设置客户机密码,范围,从客户端获取服务,并尝试发送电子邮件。尽管登录失败。 – jim

相关问题