使用Python和Gmail安全发送邮件的方式是什么?
我正在尝试用一个Python脚本给自己发邮件,幸运的是我找到了这个帖子:
问题是,smtplib这个库会把脚本的密码以明文形式发送出去,我对这个安全性有点担心。而且我的脚本里也直接写了我的用户名和密码,这让我觉得不太安全。有没有好的方法可以用Python发送邮件,而不需要把我的密码明文保存呢?
我还在StackOverflow上看到这个帖子: Python smtplib安全性 但那个答案并没有完全解决我的问题。不过,我还不想放弃。
再多说一点:我想把我的树莓派设置成一个服务器,去抓取一个网站的信息。当这个网站上某个特定的内容发生变化时,我希望能通过邮件收到通知。不过,我不想让我的树莓派上有一个脚本,里面明文写着我的用户名和密码。
3 个回答
即使我使用了 starttls
,我还是被Gmail阻止了,无法通过我的Python脚本发送邮件(以前是可以的)……我收到了一个 SMTPAuthenticationError
的错误,里面有一个链接,让我通过浏览器继续登录,这对我的Python脚本发送邮件没有任何帮助,因为它是通过 smtplib
来发送的。我目前没有在我的账户上设置“二步验证”。
我不得不去我的Google账户(在浏览器中),选择一个选项来“允许不太安全的应用访问”
https://www.google.com/settings/security
更改这个设置后,我的脚本又可以正常工作了。看起来Google真的希望我们使用二步验证,因此需要一个专用的应用密码。我想我会这样做,并且接受偶尔需要输入短信验证码来登录我的邮箱……
一个明显的解决办法是使用
getpass.getpass()
在程序开始运行时获取密码,并把它存储在内存中。
这个连接使用了STARTTLS,所以信息不会以明文形式在互联网上发送。
函数server.starttls()
会在465端口开始与服务器的加密通信,而不是通常用于未加密SMTP邮件传输的25端口。