使用 ChatGPT 帮助小学生编程入门系列之二:使用 Python 编程发送电子邮件

发布时间 2023-11-19 11:21:27作者: JerryWang_汪子熙

本系列前一篇文章,我们已经介绍了如何使用 Python 编写一段代码,将搜索引擎上找到的天气预报网站上的信息,读取到本地:

使用 ChatGPT 帮助小学生编程入门系列之一:Python 编程读取和解析天气预报网页上的数据

本文我们再进一步,目标是把一段文本,通过 Python 发送到指定的邮箱去。

学会这个方法之后,我们还能把前面一篇文章的成果结合起来,比如把天气预报信息,用 Python 读取出来,然后发送到指定邮箱去。

向 ChatGPT 发出指令:

你是一个资深的 Python 技术专家,请你编写一段 Python 代码,将一个字符串值通过电子邮件,发送到指定的邮箱中去。

得到源代码:

我使用网易邮箱进行测试,把源代码拷贝到我本地后,稍作修改,主要是将我网易邮箱的用户名和 password,硬编码到代码里去,然后把网易邮箱的 SMTP 服务器地址和端口,填写到代码中去。

总共 31 行代码:

发送的正文,硬编码在代码第 19 行。

执行 Python 代码,出错了,遇到如下错误消息:smtplib.SMTPAuthenticationError: (550, b'User has no permission')

其实这个错误不怪 ChatGPT,因为 ChatGPT 上面的回复里,已经明确提醒过我们:

为了使用Gmail SMTP服务器,你需要允许"不够安全的应用"访问你的账户。你可以在Google帐户的"安全性"设置中更改这个选项。如果你启用了两步验证,你需要生成一个应用专用密码来代替你的常规密码。

对于小朋友来说,可能不太明白上面这句话。不要紧,再次求助 ChatGPT:

你是一个资深的 Python 技术专家,我用下面的 Python 代码发送电子邮件:

server = smtplib.SMTP(smtp_server, port)
server.starttls()
server.login(sender_email, password)

我的 sender_email 和 password 分别维护了我的电子邮箱账号和登录密码,我在网页端也能使用这个用户名和密码登录,但是执行代码时遇到错误消息:

raise SMTPAuthenticationError(code, resp)
smtplib.SMTPAuthenticationError: (550, b'User has no permission')

请问如何解决?

ChatGPT 的回复答到了点子上。

这个错误提示"用户没有权限",可能是由于以下几个原因:

  1. 邮箱服务提供商需要更高级别的权限才能使用 SMTP。你可能需要在你的邮箱设置中启用"允许不够安全的应用"或者"允许第三方应用"。
  1. 你可能需要为你的应用程序生成一个特定的密码。一些服务提供商(如 Google、Yahoo 等)提供了这种功能,让你可以生成一个特殊的应用密码,以便在不直接使用你的主密码的情况下授权应用程序的访问。

确实,出于安全考虑,国内外主流的邮件提供商,默认情况都没有开启允许第三方应用使用 SMTP.

我们登录网易邮箱,选择配置->POP3/SMTP/IMAP:

然后开启 POP3/SMTP 服务即可:

这里网易邮箱会生成一个专门的授权码,我们可以理解成调用 API 时需要传入的 Access Token:

把这个授权码写入代码第 10 行的 password 变量中:

大功告成。执行 Python 代码,然后到收件人邮箱中查看,果然收到了一封标题为 Python Email Test(上图代码第 16 行指定),正文由上图代码第 19 行指定的邮件。

ChatGPT 再次帮助我们成功完成了一个编程任务。

更多阅读