1. 权限获取

官方文档:https://developers.google.com/identity/protocols/oauth2

gmail遵循auth2协议,需要在页面授权拿到code(授权码) ,服务端就可以保存code到数据库,通过接口请求获取access_token和refresh_token(参考文章:使用HTTP获取 OAuth 2.0 access tokens(Google)_菜鸟的学习笔记-CSDN博客_chrome浏览器怎么查看oauth获取的token)

请求:

POST /oauth2/v4/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded

code=4/v6xr77ewYqhvHSyW6UJ1w7jKwAzu&
client_id=xxxx.apps.googleusercontent.com&
client_secret=your_client_secret&
redirect_uri=https://oauth2.example.com/code&
grant_type=authorization_code

返回:

{
  "access_token": "ya29.GlvbA3LIk7eIVWpXQJAhqcm3yCKxy7Fopilxm9ft5rXQwxKqBy9Xfno8Jz8DKBBtT3N2DFQ2SHVZ-POLJZaNDE6Ricz12EI-qoVTwSV12A0pD2bwLBxBcnNTGXKm",
  "expires_in": 3599,
  "refresh_token": "1/20S52RHS3KSqbbiHzuHENaINOwIPZToRycITjlEUX0s",
  "token_type": "Bearer"
}

refresh_token 很重要,access_token每3600秒失效,需要通过refresh_token重新请求获取,所以做个定时任务,每五十分钟刷新一下access_token即可。

注:refresh_token的有效期基本是永久,除非用户改密码或者权限收回

请求:

POST /oauth2/v4/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded

client_id=xxxxx.apps.googleusercontent.com&
client_secret=your_client_secret&
refresh_token=1/6BMfW9j53gdGImsiyUH5kU5RsR4zwI9lUVX-tqf8JXQ&
grant_type=refresh_token

返回:

{
  "access_token": "ya29.GlvbA2Pfz3-egAlzdN6b5ZLOvfDhrcyiHwLkxGQbj11rjEzD9XH5bCEijQF6Lr4x1oTd76fT-dVXv1B1afkIh5_SAkBiCNtJ8krQwesgSWX9zmiqUZuapzZTWIHy",
  "token_type": "Bearer",
  "expires_in": 3600,

"token_id": "Bearer eyJhbxxxxxx" // 遵循JWT协议,可以反解析出用户的信息
}

所以,权限的获取,就是要搞清楚code,access_token 和 refresh_token的区别

2. 邮件同步

参考官方文档:https://developers.google.com/gmail/api/guides/sync

2.1  全量同步

GET https://gmail.googleapis.com/gmail/v1/users/{userId}/messages

2.2  增量同步

GET https://gmail.googleapis.com/gmail/v1/users/{userId}/history

全量同步后获取的historyId入库,下次同步从historyId开始往后继续同步

(1) historyId 404问题解决

参考文档:https://developers.google.com/gmail/api/reference/rest/v1/users.history/list

historyId会失效,所以需要进行一次全量的同步(通过messageId去重),重新获取有效的                 historyId作增量同步

(2) 内容乱码

遵循Base64 RFC 4648 标准. 需要替换- 为+ , _ 为 /

string.replaceAll("-",  "+").replaceAll("_",  "/");

(3)只同步指定日期的邮件

参考文档:https://support.google.com/mail/answer/7190

Gmail API 对接问题汇总相关推荐

  1. 红孩子VS腾讯合作项目,API对接被评为腾讯优秀案例

    随着Redbaby网站 对外合作逐渐加深,各种数据接口越来越多,提供接口的方式也各不相同.不同的接口,也常常面临一些相同的需求,如访问频率控制.国际化支持等,各个接口解决的办法也各不相同. 为了减少重 ...

  2. java金蝶星空云金蝶Java 对接 金蝶云星空 接口 对接 金蝶API 对接 金蝶 接口 解决 会话失效 问题 会话已失效,请重新登录

    java金蝶星空云金蝶Java 对接 金蝶云星空 接口 对接 金蝶API 对接 金蝶 接口 解决 会话失效 问题 会话已失效,请重新登录 1.准备工作 1.1 接口调用账户 1.2 下载 金蝶星空云 ...

  3. 10-11月数据接口-京东商品信息api,金碟Api对接,京东商智监控商品request采集后指数还原,聚水潭第三方接入api,拼多多上架辅助非第三方SKU核对上传,拼多多销量无限修改更新

    茶壶煮饺子: 1.京东商品信息api: http://app.miiow.com.cn:8181/ajaxApi.ashx/@/dontlogin/sycm/getJDItemBaseInfo?ite ...

  4. 跨平台API对接(Java)

    基于Jenkins实现跨平台API对接 Jenkins 提供了远程访问应用编程接口(Remote Access API),能够通过 Http 协议远程调用相关命令操作 Jenkins 进行 Jenki ...

  5. 钉钉开放平台API对接第一讲

    DING日程-API对接: 官方API:https://ding-doc.dingtalk.com/doc#/serverapi2/iqel76 对接评语: 优点:钉钉API对接相对于微信API对接比 ...

  6. Wish API 对接

    Wish API 对接 我们可以先在 sandbox 中操作,https://sandbox.merchant.wish.com/ ,这里注册一个账号. 新创建的账号是有数据记录. 在 账户/设置/A ...

  7. API对接网关 code review

    API对接网关 code review 一.URL前后对比 之前对外的接口URL:http://oldXXX/functionName?data=args 对接网关之后URL:http://newXX ...

  8. Gmail Api 的解读及例子

      由于公司需求需要获取Gmail的信息,于是下了Google提供的例子并开始研究GoogleApi的调用,在这个过程中遇到了几个坑同时也学习到了一些知识,现记录如下:       一 Android ...

  9. 教你一键开启积分商城API对接上线,积分商城搭建如此简单

    ** 教你一键开启积分商城API对接上线,积分商城搭建如此简单 首先确定你已经有积分管理系统,给用户发放积分及用户信息存储. 然后又有使用第三方积分商城的意愿,则可以考虑用API接口打通的方式上线积分 ...

  10. LittleVGL (LVGL)干货入门教程二之LVGL的输入设备(indev)API对接。

    LittleVGL (LVGL)干货入门教程二之LVGL的输入设备(indev)API对接 前言: 阅读前,请确保你拥有以下条件: 你已经完成"显示API"的移植. 你已经实现了一 ...

最新文章

  1. 插入排序算法(基于Java实现)
  2. 向Hadoop集群添加一个新的节点
  3. libstrophe 安装
  4. 惊天大谎:让穷人都能上网是Facebook的殖民阴谋?
  5. 'demangle.h' file not found
  6. Ubuntu14.04 x64系统设置Qt5.8桌面快捷方式
  7. 4. 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识wrk、wrk2
  8. 利用 git 提交代码、git 简单使用(拉取、推送、分支、合并)
  9. 论文浅尝 | 将结构预测作为增广自然语言间的翻译任务
  10. 马斯克称下一代超级工厂占地可能没必要更大 但可能更先进
  11. jQuery Mobile中链接(包含button和表单提交的链接)的data-*选项
  12. kancloud mysql内核_锁 · Mysql · 看云
  13. android u盘加载_如何获取Android系统挂载U盘的路径
  14. 参考文献的序号怎么对齐_word参考文献怎么对齐
  15. 老龄化带来新机遇 银发经济实力不容小觑
  16. 超六类网线和六类网线的区别—Vecloud
  17. PowerShell 开启无线热点
  18. 利用脚手架创建vue项目时报这个错误,哪位大神帮忙解答一下,实在是找到解决办法了。万分感谢
  19. SPSSPRO模型归纳整理
  20. PID串口助手的第一部分:串口通信

热门文章

  1. Google浏览器设置不自动更新:关闭谷歌浏览器自动更新方法(总是自动更新提示失败)
  2. c#实现麻将胡牌判定-----对子法
  3. 心绞痛--大柴胡汤合桂枝茯苓丸---胡希恕
  4. Android媒体库你了解多少
  5. 专访Blue Coat:移动恶意软件现状与趋势
  6. C++字符串常量总结(包含表达式必须是可修改的左值问题)
  7. 阿里云ECS centos8连接可视化界面
  8. kubernetes pv回收策略
  9. 我的第一个HTML5游戏——打地鼠总结及源码
  10. 豆瓣8.0高分电影~渣男人格之《剧场》追剧后感