使用Python和Gmail安全发送邮件的方式是什么?

14 投票
3 回答
12617 浏览
提问于 2025-04-18 15:40

我正在尝试用一个Python脚本给自己发邮件,幸运的是我找到了这个帖子:

如何使用Python通过Gmail发送邮件?

问题是,smtplib这个库会把脚本的密码以明文形式发送出去,我对这个安全性有点担心。而且我的脚本里也直接写了我的用户名和密码,这让我觉得不太安全。有没有好的方法可以用Python发送邮件,而不需要把我的密码明文保存呢?

我还在StackOverflow上看到这个帖子: Python smtplib安全性 但那个答案并没有完全解决我的问题。不过,我还不想放弃。


再多说一点:我想把我的树莓派设置成一个服务器,去抓取一个网站的信息。当这个网站上某个特定的内容发生变化时,我希望能通过邮件收到通知。不过,我不想让我的树莓派上有一个脚本,里面明文写着我的用户名和密码。

3 个回答

1

即使我使用了 starttls,我还是被Gmail阻止了,无法通过我的Python脚本发送邮件(以前是可以的)……我收到了一个 SMTPAuthenticationError 的错误,里面有一个链接,让我通过浏览器继续登录,这对我的Python脚本发送邮件没有任何帮助,因为它是通过 smtplib 来发送的。我目前没有在我的账户上设置“二步验证”。

我不得不去我的Google账户(在浏览器中),选择一个选项来“允许不太安全的应用访问”
https://www.google.com/settings/security

更改这个设置后,我的脚本又可以正常工作了。看起来Google真的希望我们使用二步验证,因此需要一个专用的应用密码。我想我会这样做,并且接受偶尔需要输入短信验证码来登录我的邮箱……

2

一个明显的解决办法是使用

getpass.getpass()

在程序开始运行时获取密码,并把它存储在内存中。

6

这个连接使用了STARTTLS,所以信息不会以明文形式在互联网上发送。

函数server.starttls()会在465端口开始与服务器的加密通信,而不是通常用于未加密SMTP邮件传输的25端口。

撰写回答