使用Flask-mail扩展发送邮件

为什么需要使用Flask-Mail组件?

在我们开发完web系统后,一些特定的事件发生时,系统要自动发送相关邮件至管理员,运维人员和其他相关人员。python标准库中的smtplib包也可以用在Flask程序中发送邮件,但包装了smtplib的falsk-mail扩展能更好的与Flask集成。

如何使用Flask-Mail扩展发送邮件?

  • 安装flask-mail扩展

pip install flask-mail

  • 查看安装情况

pip show flask-mail

发送邮件的时候需要设置什么?

  • 发件人账户
  • 密码
  • 收件人
  • 邮件标题
  • 邮件正文
  • QQ邮件(163)服务器的域名或者IP

详细代码

主程序代码:app.py

from flask import Flask, render_template, request, flash, redirect
from flask_mail import Mail,Message

app = Flask(__name__)

# 配置发送邮件的相关信息
# 指定邮件服务器的域名或者IP https://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=369
app.config.from_pyfile('config.py')

def send_mail(to,subject,filename,**kwargs):
    """

    :param to: 收件人
    :param subject: 邮件主题
    :param filename: 邮件正文对应的html名称
    :param kwargs: 关键字参数,模板中需要的变量名
    :return:
    """
    # 初始化mail对象,一定要先配置邮件信息
    mail = Mail(app)
    msg = Message(subject=subject,
                  sender='wangtuo1115@163.com',
                  recipients=to)
    # 邮件正文内容为后者,也就是html的内容
    # msg.body = info
    msg.html = render_template(filename + '.html',**kwargs)
    with app.app_context():
        mail.send(msg)
# send_mail(to=['854429157@qq.com','401748480@qq.com'],subject='狗老师走好',
#           info='六弟发来贺电')

@app.route('/register/', methods=['GET','POST'])
def register():
    if request.method == 'GET':
        return render_template('register.html')
    else:
        email = request.form.get('email')
        # password = request.form.get('password')

        try:
            send_mail(to=[email], subject='注册通知邮件', filename='registerok',username=email)
        except Exception as e: 
            flash('注册失败')
            return redirect('/register/')
        else:
            flash("注册成功")
            return redirect('/login/')

@app.route('/login/')
def login():
    return 'login'

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


配置文件:config.py

MAIL_SERVER = 'smtp.163.com'

# 指定端口,163邮箱端口默认是25,QQ邮箱默认是465
MAIL_PORT = 25

"""
如果使用QQ邮箱,QQ邮箱不支持非加密的协议,那么使用加密协议
# MAIL_USE_SSL = True
"""

MAIL_USERNAME = 'wangtuo1115'

# 此处的密码不是登录密码,而是开启pop3时的授权码
MAIL_PASSWORD = 'xxxxxxx'
# 调试模式打开
DEBUG = True
SECRET_KEY = 'westos'

注意: 配置文件通常单独写成一个py文件,然后在主程序中导入即可。

app.config.from_pyfile(‘config.py’)

注册页面:register.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

{% for message in get_flashed_messages() %}
<p style="color: red">{{ message }}</p>
{% endfor %}

<form action='/register/' method="POST">
    <input type="email" name="email" placeholder="email"><br>
    <input type="password" name="password" placeholder="password"><br>
    <input type="submit" value="注册">
</form>



</body>
</html>

注册成功发送邮件内容页面:registerok.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1 style="color: grey">注册成功</h1>
尊敬的用户<strong>{{ username }}</strong>:<br>
    您已经注册成功,请直接登录网站.
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值