Flask框架——Flask-Mail邮件

上篇文章我们学习了Flask框架——Flask-WTF表单:文件上传、验证码,这篇文章我们学习Flask框架——Flask-Mail邮件。

Web应用程序经常需要向用户、客户端、管理员、运维人员等相关人员发送邮件。在Flask框架中提供了Flask-Mail邮件库来管理电子邮件的收发。

安装Flask-Mail

执行如下代码安装Flask-Mail:

pip install flask-mail

安装后,可以执行如下代码查看Flask-Mail的信息:

pip show flask-mail

信息如下所示:

Name: Flask-Mail
Version: 0.9.1
Summary: Flask extension for sending email
Home-page: https://github.com/rduplain/flask-mail
Author: Dan Jacob
Author-email: danjac354@gmail.com
License: BSD
Location: c:userslindesktopflask-mail邮件venvlibsite-packages
Requires: blinker, Flask
Required-by:

配置Flask-Mail

在使用Flask-Mail之前,需要进行配置。

创建Flask项目,其代码如下所示:

from flask import Flask
from flask_mail import Mail
app =Flask(__name__)

app.config['MAIL_SERVER']='smtp.qq.com'   #邮件服务器的名称/IP地址
app.config['MAIL_PORT'] = 465       #所用服务器的端口号
app.config['MAIL_USERNAME'] = 'yourmail@qq.com'  #发件人的用户名
app.config['MAIL_PASSWORD'] = '*******'   #发件人的POP3/IMAP/SMTP服务的SSL连接客户端授权码
app.config['MAIL_USE_TLS'] = False    #禁用传输安全层加密
app.config['MAIL_USE_SSL'] = True    #启用安全套接字层加密
mail = Mail(app)        #创建邮件类对象

if __name__ == '__main__':
     app.run(debug = True)

这里我们是使用QQ邮箱作为发件邮箱。

QQ邮箱相关服务器信息:

服务器名称 服务器地址 SSL协议端口号 非SSL协议端口号
IMAP imap.qq.com 993 143
SMTP smtp.qq.com 465/587 25
POP3 pop.qq.com 995 110

SSL连接客户端授权码可以按如下图获取:

Flask框架——Flask-Mail邮件
Flask框架——Flask-Mail邮件

下拉,找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务

Flask框架——Flask-Mail邮件

开启POP3、IMAP/SMTP服务,发送短信,

Flask框架——Flask-Mail邮件

发送短信就会获取到客户端授权码了。

除了刚才我们在Flask程序中配置的参数,还可以添加以下参数:

  • MAIL_DEBUG:支持自定义调试,默认是Flask应用程序的调试状态;
  • MAIL_DEFAULT_SENDER:设置默认发件人;
  • MAIL_MAX_EMAILS:设置要发送的最大邮件;
  • MAIL_SUPPRESS_SEND:如果app.testing设置为true,则发送被抑制;
  • MAIL_ASCII_ATTACHMENTS:如果设置为true,则将附加的文件名转换为ASCII。

使用Flask-Mail

这里我们通过网页的形式来发送邮件。

在上面的Flask程序中,我们编写视图函数,如下所示:

@app.route('/write')
def write_mail():
    return render_template('write.html')

这里我们首先创建一个write_mail视图函数,其作用是渲染write.html模板文件,write.html文件,代码如下所示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="{{ url_for('send_mail') }}" method="post">
        <p>收件人是:<input type="text" name="username"></p>
        <p>邮箱主题为:<input type="text" name="theme"></p>
        <p>邮箱内容为:<input type="text" name="content"></p>
        <p><input type="submit" value="发送"></p>
    </form>
</body>
</html>

这里我们使用了url_for()方法调用视图函数send_mail(),当点击发送时,就会调用send_mail()视图函数,并把文本中输入的数据传递到请求中。

send_mail视图函数代码如下所示:

@app.route('/send' ,methods=['GET','POST'])
def send_mail():
    username=request.form.get('username')  #获取请求中的username参数
    theme=request.form.get('theme')    #获取请求中的theme参数
    content=request.form.get('content')   #获取请求中的content
    msg = Message(theme, sender='1308454615@qq.com', recipients=[username],body=content)  #使用Messgae方法
    mail.send(msg)    #使用Mail类中的send()方法
    return '邮件发送成功'

获取请求中的参数,再使用Message()实例封装邮件,其语法结构为:

其中:第一个参数为邮件主题,第二个sender参数为发件人,第三个recipients参数为收件人,其参数值为一个列表,所以可以同时传入多个收件人,第四个参数为邮件内容。

最后使用Mail类中的send()方法发送邮件,

在Mail类中有以下方法:

方法 描述
send() 发送Message类对象的内容
connect() 与邮件主机打开连接
send_message() 发送消息对象

好了,代码已经写好了,启动Flask程序,访问http://127.0.0.1:5000/write,正确输入内容,如下图所示:

Flask框架——Flask-Mail邮件

点击发送后,就会跳转到http://127.0.0.1:5000/send网页中,如下图所示:

Flask框架——Flask-Mail邮件

好了,关于Flask框架——Flask-Mail邮件就学到这里,感谢观看,下篇文章我们继续学习Flask框架——Flask-SQLite数据库。

– END –

原文始发于微信公众号(白巧克力LIN):Flask框架——Flask-Mail邮件

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/36181.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!