vlambda博客
学习文章列表

用Flask-mail发送电子邮件

一、缘起


暑期和同学们一起用RE+SQLITE+HTML+FLASK做了一个唐诗飞花令查询系统。结束后继续学习Flask,发现用Flask-mail可以实现在Flask服务器上发送电子邮件。遂查阅资料写成了一段发送电子邮件的极简代码。



二、环境


Win7中文旗舰版64位 + Python 3.65 64位 + 8G RAM



三、准备


1、申请一个电子邮箱并开启SMTP服务
首先,我们得申请一个电子邮件账户,而且要用网页登录电子邮箱账户在设置当中开通允许客户端发送电子邮件的功能,也就是开通SMTP服务。
下面以163邮箱为例来说明开启SMTP 服务的方法。先用网页 登录邮箱,点击邮箱页面上方的“设置”,选择“POP3/SMTP/IMAP”,然后根据实际需求开启POP3/SMTP服务或者IMAP/SMTP服务,并根据页面提示进行短信验证操作。开通后即可使用foxmail、Outlook等第三方客户端进行收发邮件。开通之后的界面是这样的:



现引用163邮箱界面的原文来介绍一下P OP3、SMTP、IMAP这三个概念。

      POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。

      IMAP全称是Internet Mail Access Protocol,即交互式邮件存取协议,它是跟POP3类似邮件访问标准协议之一。不同的是,开启了IMAP后,您在电子邮件客户端收取的邮件仍然保留 在服务器上,同时在客户端上的操作都会反馈到服务器上,如:删除邮件,标记已读等,服务器上的邮件也会做相应的动作。所以无论从浏览器登录邮箱或者客户端 软件登录邮箱,看到的邮件以及状态都是一致的。

这里用非专业术语说一下这三个概念:开通POP3服务可以让我们用第三方客户端把邮件服务器收件箱中的邮件下载到自己电脑上;开通SMTP服务可以让我们 用第三方客户端发送邮件;开通IMAP服务可以让我们通过客户端直接操作自己的电子邮箱。
我们这里只需要开通SMTP服务即可,163邮箱的POP3和SMTP服务是一起开通的。

2、获取电子邮箱的授权密码


有了电子邮箱账号并开通了SMTP服务之后,还要获取163邮箱的授权密码。授权密码是用第三方邮件客户端来登录邮件服务器的专用密码,这个密码跟我们在网页上登录邮箱的密码是不一样的。
在“设置”界面的下方我们可以看到授权密码管理,点击“新增授权密码”按钮即可获得一个授权密码。

3、获取电子邮箱服务器信息


我们要获取电子邮箱服务器的地址和端口号等信息,163邮箱的服务器信息如下:

用Flask-mail发送电子邮件

如果是其它的电子邮件服务器,我们也都能查到各自服务器的地址和端口号。
默认情况下,我们发送电子邮件所需需要的SMTP服务器都是非加密的,所以端口号用25就行了,如果采取SSL(Secure Sockets Layer, 安全套接层)协议来加密的话,端口号需要改为465或者994。本文的程序没有采用SSL协议加密,所以端口号25。



四、程序


用Flask-mail发送电子邮件


程序的关键代码都有注释,这里不再解释。如果读者朋友仿照本程序写代码,只需将 第 6 ~ 11 行替换为自己的电子邮箱服务器信息和登录信息即可,还需要把第21行的邮件接收者换成自己的收件人。
另外,本程序发送邮件的时候带了一个附件,是一个名叫“熊猫.jpg”的图片文件,如果不需要发送附件,可以把上面代码中的第 23 ~ 24 行删去。如果需要发送附件,则需要把发送的附件准备好,放到上述程序所在的目录下,并修改第  23  ~ 2 行的文件名。这里解释一下第 23  ~ 2 4 行的代码:

    with app.open_resource(abspath("熊猫.jpg")) as fp:        # 附件

        message.attach("panda.jpg", "image/jpg", fp.read())


with语句是打开附件得到文件对象fp, message.attach 语句是把附件读取出来附加到邮件上。message.attach语句有三个参数:
第一个是你想让收件人收到邮件以后看到的附件名称;
第二个是附件的MIME类型;
第三个是附件数据,一般用fp.read() 就行。

关于附件的MIME类型,本号前面曾发过一文《》,里面给出了各种常见的文件的MIME类型,读者朋友需要的话可以去浏览一下。


五、运行


运行程序之前,先安装扩展库Flask和Flask-mail,然后程序就可以运行了。

       程序运行之后,会提示打开如下网址:

                      http://192.168.1.2:5000/

注意,这个网址是小编自己电脑在局域网中的网址,不同的电脑可能显示的网址不一样。小编电脑打开该网址显示如下界面:


用Flask-mail发送电子邮件


点击页面上的“点击这里发送邮件”链接之后,我们会看到如下的页面:




如果是程序中的邮件服务器信息和登录信息有一样不对,则界面上会显示发送失败的字样。这时候可以修改程序的相关行,直到成功为止。

现在,去163邮箱收信,打开之后,我们看到如下的邮件:




       这说明我们的程序代码发送邮件成功了。


六、后记


欢迎指出本文的不足之处,欢迎就本文的相关问题跟作者进行交流。如果需要联系作者,请发邮件到  [email protected]  。