初识Gmail API(PHP)
有时候想要及时获取Gmail的最新邮件,但是如果没有合适的上网环境,这就难搞了,毕竟国内上谷歌还是有些难度的。
所以就想到可以利用PHP+Google API的方式简单获知Gmail的邮件。
准备工作
PHP版本>5.4,并且开启了cli和json扩展(一般都默认开启了,比如宝塔、LNMP)
Composer依赖管理工具(本文以CentOS 7 为例,可以直接yum安装)
启用了Gmail的Google帐户
一、打开Gmail API开关
https://developers.google.com/gmail/api/quickstart/php
1.点击Enable the Gmail API
2.创建项目(Project),填写项目名称
任意填
3.获取Client ID和Client Secret
点击按钮下载用户凭据配置文件,注意:妥善保存这两项关键信息
二、部署Google Client Library
1.安装composer部署工具
yum install composer -y
2.SSH登录网站根目录
比如 /www/wwwrooot/mygmailapi.com/
cd /www/wwwrooot/mygmailapi.com/
composer require google/apiclient:^2.0
3.上传示例代码和之前保存的用户凭据配置文件
Gmail API给出了一个简单的示例文件:https://github.com/gsuitedevs/php-samples/blob/master/gmail/quickstart/quickstart.php
直接下载该示例代码(quickstart.php),然后连同第一步中获取到的用户凭据配置文件(credentials.json),上传到服务器上一步执行composer的目录。
三、测试
为了保证安全性,Gmail API提供的示例代码加入了php_sapi_name,也就是运行环境的检测
只能在cli环境(commandline,命令行)下调试,不允许在Web环境下测试
所以我们可以先在SSH中通过php单独执行这个示例代码,确定可以部署到生产环境后再删除其sapi检测。
SSH下执行
cd /www/wwwrooot/mygmailapi.com/
php -f quickstart.php
复制认证链接到浏览器中打开,登录Google账号后会获得Token,将Token复制并粘贴回SSH窗口
此时再次执行php -f quickstart.php
,即可看得Gmail的邮箱Label
四、写代码
上述步骤只是测试通过php获取邮箱里的Lable(标签),现在就开始写代码,获取邮箱的其他信息,比如未读邮件列表
可以利用Gmail自带的邮箱过滤器,将收件箱的未读邮件筛选出来,对应的筛选参数为:is:unread label:inbox
如果需要筛选出所有的未读邮件(包含垃圾箱),只需去掉label:inbox即可,如:is:unread
核心部分:
获取标题:
$opt_param = array();
//筛选参数
$opt_param['q'] = "is:unread label:inbox ";
$opt_param['maxResults'] = 10;
$results = $service->users_messages->listUsersMessages("me", $opt_param);
foreach($results as $mail){
$message = $service->users_messages->get("me", $mail['id']);
$headers = $message->getPayload()->getHeaders();
$subject = getHeader($headers, 'Subject');
echo $subject.'\r\n';
}
获取摘要:
$opt_param = array();
//筛选参数
$opt_param['q'] = "is:unread label:inbox ";
$opt_param['maxResults'] = 10;
$threads = $service->users_threads->listUsersThreads("me", $opt_param);
foreach ($threads as $thread) {
echo $thread->getSnippet() . '\r\n';
}
完整代码:
https://file.bugxia.com/s/QF7SrGCJmpytjxG
效果:
SSH下执行
#获取邮件标题
php -f getGmail.php title
#获取邮件摘要
php -f getGmail.php snippet
2 条评论
你好,我将浏览器返回的code键入命令行时提示如下错误,请问要如何解决这个问题
PHP Fatal error: Uncaught exception ‘GuzzleHttp\Exception\ConnectException’ wit
h message ‘cURL error 7: Failed to connect to oauth2.googleapis.com port 443: Ti
med out (see https://curl.haxx.se/libcurl/c/libcurl-errors.html)’ in E:\xampp\ht
docs\gmail_api\vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php:200
@小透明
这个问题我也遇到了:我用阿里云华南的ESC独立服务器也是一样的错误。 但是在香港的服务器就运行的很顺利。 估计是GFW的问题,建议服务器需要配置学术科学上网, 如果能解决欢迎交流。