前篇简述了基于 SMTP 的邮件发送功能,但是 GMAIL 在 2022.05.30 之后将不再支持 SMTP 方式的访问了
因此需要使用 oauth2.0 来登录账号,但是官方文档很多地方写的不清不楚,甚至还要申请 workspace 的账号,总觉得并不需要这么麻烦,同时又不想从头造轮子,于是找到了一个叫 ezgmail 的库
https://github.com/asweigart/ezgmail/
但跟着 readme 走完发现依旧用不了,最后在 issue 里面发现了一个 pull request 找到了更加详细的配置流程
https://github.com/asweigart/ezgmail/pull/34/commits/c6bc3cd227888730143371935a19b8879b939e5b
首先打开谷歌云的控制台(Google Cloud Console),创建一个项目(Project)
https://console.cloud.google.com/
开启 GMAIL 的 API
https://console.cloud.google.com/apis/library/gmail.googleapis.com
打开这个页面然后选择 External ,然后填写 app 名字(似乎不能太短?加点后缀就不会报错了)和联系邮箱(应该可以和当前账户不同),后面保持默认即可
https://console.cloud.google.com/apis/credentials/consent
发布app
创建一个 OAuth Client ID 然后选择类型为 Desktop App
https://console.cloud.google.com/apis/credentials
下载 JSON 文件并保管好,该文件是访问账户的秘钥
然后创建 py 文件,将 JSON 放在同一个目录下,发送邮件仅仅需要一行代码,填入收件人、标题和正文即可,首次运行会打开一个网页要求登录账号,同意之后该目录下会多一个 token.json 文件,不过执行后并不会返回发送的状态
import ezgmail
ezgmail.send('email address', 'subject', 'body')
有 token.json 则之后登录不再需要打开网页验证了,如果 credentials.json 和 token.json 不在同一个目录下,则可以增加下面代码进行初始化,分别填入两个文件的路径即可
ezgmail.init(tokenFile="", credentialsFile="")
额外参考
https://developers.google.com/identity
https://cloud.google.com/docs/authentication/getting-started
https://developers.google.com/gmail/api/guides/sending#python