使用 Python 脚本作为 cronjob 读取 Gmail 邮件

Posted

技术标签:

【中文标题】使用 Python 脚本作为 cronjob 读取 Gmail 邮件【英文标题】:Read Gmail messages using Python script as a cronjob 【发布时间】:2018-01-06 03:54:55 【问题描述】:

我在访问 Gmail 帐户时遇到问题。目前,我正在使用用 python 2.7+ 编写的this 库来登录和阅读 Gmail 邮件。要使用该库,我必须启用 Google 的“不安全应用”。这个库一切正常。

现在,我正在迁移到 python 3+,我不能再使用 lib。每当我导入库时,它都会引发以下错误:

import gmail
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.6/site-packages/gmail-0.0.5-py3.6.egg/gmail/__init__.py", line 16, in <module>
  File "/usr/local/lib/python3.6/site-packages/gmail-0.0.5-py3.6.egg/gmail/gmail.py", line 5, in <module>
ModuleNotFoundError: No module named 'utf'

我试图通过查看 python 3+ 中“utf”的替换模块来解决这个问题,但我不知道它是什么。我该如何解决?

另一个问题是我尝试了谷歌提供的官方python库。 Here 是本教程的链接。我成功完成了快速入门示例,但脚本打开了我的浏览器,我必须允许通过浏览器进行访问。事实上,我只想创建一个 cronjob 来定期在我的服务器上运行我的脚本,而无需 UI。谷歌允许吗?

非常感谢。

【问题讨论】:

有些库在两个版本之间不兼容。 但是在 python 3+ 中有 'utf' 的替代品吗? 可能有,但gmail 模块必须使用它。仅仅安装它是不够的。 【参考方案1】:

适用于 python 3 的 Gmail 官方 API 并且有很多使用指南,例如:

https://github.com/abhishekchhibber/Gmail-Api-through-Python

但是,如果您觉得这太复杂了(我愿意),您可能希望使用 Gmail 设置面板中的 POP3 或 IMAP 激活访问权限。

然后使用 poplib 或 imaplib。

示例:https://docs.python.org/3/library/poplib.html#pop3-example

这通常更容易、更便携,并且使用默认 python 安装中已经找到的包。


编辑:

您使用的库使用 IMAP 访问,而不是 oauth。

还要回答你的“UTF”问题:python 3中的每个字符串默认都是UTF8,如果你想解码原始数据,你应该使用'mystring'.decode('utf-7')等。

编辑 2:看起来有人已经完成了这项工作:https://github.com/charlierguo/gmail/pull/48


好的,我刚刚在the instructions看到了问题:

所以,我想您唯一的选择是坚持使用 POP3/IMAP(您的程序已经在使用)。

【讨论】:

我试过官方库,我的理解是采用oauth2认证机制。这意味着它需要用户的许可,并且访问令牌将过期。 有意思,我去看看 pull request

以上是关于使用 Python 脚本作为 cronjob 读取 Gmail 邮件的主要内容,如果未能解决你的问题,请参考以下文章

sh 使用作为cronjob启动的脚本创建Raspberry Pi备份

将简单的 shell 脚本作为 cronjob 运行

允许拒绝或尝试以CRONJOB作为CRONJOB运行PHP脚本以创建.txt文件时的某些内容

如何定期将shell脚本的结果设置为Kubernetes Cronjob的参数

在 EC2 上运行 cronjob(Python 写入文件)

如何将多个图像作为输入传递给python脚本