做这个功能费了我老大劲了,首先想到的还是利用现成的软件,尝试了一圈发现都不满意。然后不想重复造轮子,就搜索如何把 Gmail 推送到钉钉,结果只搜到了诸如 Python 如何调用 Gmail API、钉钉群机器人使用这样的相关文章,竟然没找到完整造这个轮子的文章。最后就自力更生了。目前的使用体验还行,有个小问题是有时可能要登一下远程服务器手动重启程序。

本文实现方法需要一个能同时调用 Gmail API、钉钉群机器人 API 的服务器

实现效果:

先说下已经尝试的现成的软件。(测试时间 2020-06

首先当然要试试钉钉能不能登录 Gmail,Mac、Android 端都无法登录(当然代理是开着的),我登的邮箱是 Gmail 的企业邮箱。Android 端开代理可以登录,但属于未验证的应用,Google 拒绝登录。

用 Gmail 生成的应用专用密码登录,会收到邮件:

然后,没找到 Gmail 的官方 macOS 客户端。

最后是各类 Android 端第三方邮件 APP,主要要求是不用代理也能收信

网易邮箱大师:登录、收信均不需要代理,但登不上我司企业 Gmail 邮箱

Outlook:登录需要代理、收信不需要,Android 端邮件推送一直抽风

MIUI 自带电子邮件:登录需要代理、收信不需要,连接不稳定,有时看不了邮件

QQ 邮箱:没亲自用,据说推送也有问题

其他邮箱 APP 不想试了,而且有信息泄露风险。


下面是本文的主要内容,如何把 Gmail 邮件推送到钉钉

开启 Gmail API

主要参考 这篇文章 即可,Google 现在支持中文界面。

印象中需要注意的部分是选择创建个人或组织的应用,我的是 Gmail 企业邮箱,所以创建的应用是属于组织的,个人的应用我不确定能不能以及如何创建

本来我是打算这部分也全部自己截图做一遍的,但写文章时距离我完成程序已经过了 2 个月,就不想写这部分了。

一开始我尝试用 Cloud Pub/Sub API 推送通知到钉钉 Webhook,结果出错:

googleapiclient.errors.HttpError: <HttpError 403 when requesting https://www.googleapis.com/gmail/v1/users/me/watch?alt=json returned "Error sending test message to Cloud PubSub projects/gmail-push-XXXXX/topics/my-topic : User not authorized to perform this action.">

而且该方式推送的消息格式不能自定义,与钉钉机器人消息格式不匹配

代码讲解

下面讲解代码:https://github.com/enovelty/gmail-push-to-dingding ,注释我已经写得比较详细了。主要功能就是调用 Gmail API 读邮件,调用钉钉 API 发邮件。代码里的函数比较多,我只用了一部分,其他调用 Gmai API 函数的功能无法保证可用。

具体我与前人不同,自己实现的函数是 check_new_email,功能是通过 historyId 检查新邮件。

startHistoryId 与 HistoryId
无符号整数,按时间顺序增长,增量随机。通常有效期至少一周,少数情况下只有几小时。如果 startHistoryId 无效或过期会返回 404。可以确定的是:读取邮件(网页上读取)会导致 HistoryId 增加。感觉:每次调用 service.users().history().list() 响应的 HistoryId 都会增长(即使收件箱无变化)

get_messages_by_query 函数具有搜索功能,搜索时用的 subject 好像不支持中文,用了邮件的编码也搜不到。

在 Gmail 网页上能看到的 Message-ID 不是 Gmail API 的邮件 id。

代码部分就这么多(隔时间太久,想不起来细节了。)

钉钉群机器人配置

开启钉钉群机器人

创建单人群聊:手机,面对面建群,不添加其他人

添加机器人:智能群助手 - 添加机器人 - 自定义机器人

头像、名字可以自定义。「安全设置」如图

记录 WebHook 地址里面的 access_token,这个要写在文件里。

测试钉钉机器人:

curl 'https://oapi.dingtalk.com/robot/send?access_token=token'
-H 'Content-Type: application/json'
-d '{"msgtype": "text","text": {"content": "关键词"}}'

我的 VPS 在美国,调用一次 API 花 7 秒时间,在服务器上解析域名,查到的 IP 地址是阿里在美国的服务器,不需要考虑跨墙问题。

钉钉机器人开发文档

钉钉每个机器人每分钟最多发送 20 条

正式使用

第一次运行前需要准备下列文件:创建并填写 access_token 文件,创建 history_id 文件,准备好 credentials.json。

Gmail API 访问授权

第一次运行程序后,会弹出一个页面,此时需要把权限授予应用。

查看 Google 帐号第三方访问权限:https://myaccount.google.com/security-checkup

使用 virtualenv(可选):source venv/bin/activate

安装程序运行所需模块:pip3 install 。各人环境不同,具体模块请看代码

设为 5 分钟推送一次。解释一下参数,文件名的面的 300,是指 300 秒,其他的一般无需修改。

nohup python3 -u g.py 300 >/dev/null 2>error.log &

查看是否运行成功:

ps aux | grep "g.py"

成功的回显应该有 2 行

目前存在的问题

每隔不定期的时间,会产生:BrokenPipeError: [Errno 32] Broken pipe 错误,错误原因我不明白。可能只是 VPS 网络波动。如果有读者亲自解决过这个问题,还请赐教。

参考文章

Gmail API 调用:Python 读取gmail, Python 搜索gmail, Python操作gmail, How to access Gmail using Python

官方文档:Gmail API Reference

钉钉机器人开发文档

Python 解析邮件

钉钉机器人关键词应答_Gmail 邮件推送到钉钉群机器人(详细)教程|国内接收 Gmail 邮件...相关推荐

  1. 企业微信机器人推送mysql_进阶功能|将数据推送到企业微信群机器人

    当通过金数据收集到新数据/新客资后,如何才能在企业微信中快速通知特定负责人进行处理呢? 小金特别准备了一份文档,帮助大家了解学习噢- 前期准备工作 1.金数据账户 2.WinDeal账户 3.企业微信 ...

  2. 钉钉机器人关键词应答_除了用于电销,智能语音机器人可以应用哪些地方?

    之前的文章探讨的是智能语音机器人在电销行业的应用,然而在实际的场景中,电销行业的应用只是大家所熟知的行业之一. 对比于人工电销,使用智能语音机器人有着诸多优势,例如:工作效率高.意向筛选.电话录音并转 ...

  3. 配置Hi提醒实现股票行情监测信息推送到飞书群机器人消息教程

    通过配置Hi提醒通道完成后可推送信息至你的飞书群中,一次配置持久使用. 一.创建飞书机器人: 1.登录飞书PC端,选择群 首先选择需要增加机器人的群,在窗口右侧点击[设置]图标弹出菜单 点击窗口中的[ ...

  4. PHPCMS 邮件发送 - 使用阿里云邮件推送服务的详细设置

    自从阿里云和腾讯云相继默认封闭了云主机的25端口(可申请解封) 我就使用了阿里云的邮件推送服务,感觉很是好用.把我使用PHPCMS做的网站的邮件发送也设置成了使用了阿里云的邮件推送. 我使用的邮箱是阿 ...

  5. 今天说说阿里云邮件推送配置

    今天说说阿里云邮件推送配置 首先登陆然后进入控制台 打开左侧菜单找到邮件推送的菜单 这是邮件的主页面 新建发信域名 email.xxx.com  点击配置  配置域名 对应的填上就好了 然后到2的验证 ...

  6. 钉钉机器人关键词应答_Python结合钉钉实时自动监控股票行情,上班炒股再也不怕老板发现...

    最近全球股市开始回暖,之前清仓的股民现在又陆续开始建仓.股市交易时间,一般也是上班时间,频繁的查看股票软件不仅会影响工作效率,也容易被老板以为工作不饱和.所以,我们就借助python的强大功能,把提前 ...

  7. 配置 Hi提醒 让直播提醒机器人消息在主播开播自动推送消息到钉钉群

    今天我们来配置Hi提醒 实现指定主播开播时推送直播提醒消息到钉钉群 主要实现是创建好钉钉群机器人,然后推送信息时选择钉钉就行了. 该通道配置完成后可推送信息至你的钉钉群中,一次配置持久使用. 直接看操 ...

  8. 蒲公英上传应用后推送消息到钉钉、微信、QQ

    蒲公英上传生产包,测试人员通过后,就直接下载发布到应用商店的.当发布应用时,推送消息给相关人员,不需要开发一个一个私聊.发下载链接的了. 一.绑定钉钉群,上传应用后,会推送到钉钉群 1.在钉钉群创建机 ...

  9. 14-TDengine安装报警模块实现报警监测Webhook回调与邮件推送

    背景 在之前的关于 TDengine 的系列文章中,我们只介绍到了 Server 端与 Client 端,除此之外,官方还有一个报警模块,用以根据用户定义的规则实现近实时的报警监测.本文是结合 TDe ...

最新文章

  1. 介绍理想工作计算机 英语作文,我的理想工作英语作文(精选5篇)
  2. php请求来源,php验证请求页面来源
  3. 计算两个矩阵相乘(Java)
  4. leetcode每日一题:406.queue-reconstruction-by-height(根据升高重建队列)
  5. C语言函数声明与定义(待删除)
  6. 数据规划(python实现数独自动算法之三)
  7. 蓝桥杯 PREV-10 幸运数
  8. 【Rust日报】2021-10-06 [Rust游戏] - 自走棋
  9. PHP使用AES加密和解密
  10. Django中关于URL配置文件urls.py的理解
  11. 如何使用C语言播放音乐
  12. 三子棋小游戏(经过轻微改编可变为五子棋)
  13. 神奇的canvas——点与线绘制的绚丽动画效果
  14. NVIDIA Jetson官网资料整理
  15. Jetpack Compose - Switch
  16. 外汇天眼:使用 MT4 进行交易的最佳方式
  17. “msg“: “查询失败Text ‘2021-02-25T23:59:59‘ could not be parsed at index 10“
  18. echarts y轴只显示5个刻度_Echarts 双Y轴刻度不一致
  19. RSD 教程 —— §3.2 创建的层
  20. 基因数据处理5之GRCH38数据源和查看信息

热门文章

  1. 文献阅读笔记 | Reconstructing commuters network using machine learning and urban indicators
  2. macOS SwiftUI 指示器组件规范之 01 液位指示器Level Indicators
  3. stm32f107使用外部16MHz晶振
  4. 金融系列-会计基础知识
  5. vue3如何使用svg图片
  6. vivo 提前批图像算法工程师(AI方向)一面+hr面
  7. 计算机考研402,2021双非无项目科班402分上岸中科大-数学经验+复试全过程
  8. 百度地图坐标转成腾讯地图坐标
  9. 配置 Tapestry
  10. HttpClient 同时支持发送http及htpps请求