Flask集成邮件发送

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

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

如何使用flask-mail扩展发送邮件?

  • 安装flask-mail扩展

pip install 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: /home/kiosk/anaconda3/lib/python3.7/site-packages
Requires: blinker, Flask
Required-by:

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

  • 发件人账户
  • 密码 #开通邮箱smtp服务时的授权码
  • 收件人
  • 邮件标题
  • 邮件正文
  • QQ邮件服务器的域名或者IP;
    使用163邮箱时发现了一些问题:
    1、收件人必须要把自己填在第一位,并且是一个列表
    2、当正文的内容有info和html时,只会发送html

案例:模拟注册发送邮件
run.py

import os

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

app = Flask(__name__)
# 配置发送邮件的相关信息;
# 指定邮件服务器的域名或ip,可以在QQ邮箱的设置中查看
# app.config['MAIL_SERVER'] = 'smtp.163.com'
# # 指定端口,默认是25,但是qq邮箱默认的端口为465和587;
# app.config['MAIL_PORT'] = 465
# """
# qq邮箱不支持非加密协议,那么使用加密协议,分为两种加密协议,选择其中一种即可
# """
# app.config['MAIL_USE_SSL'] = True  # 使用带有SSL的加密协议
# app.config['MAIL_USERNAME'] =  'yw17392517656'
# # os.environ.get('MAIL_PWD')
# # 此处并不是登陆密码,而是开启smtp所发送的验证码
# app.config['MAIL_PASSWORD'] = 'syyy1995713'
# # 实例化邮件对象
# mail = Mail(app)

# 也可以从python配置文件中来获取配置信息
app.config.from_pyfile('config.py')

def send_mail(to,subject,filename,**kwargs):
    mail = Mail(app)
    msg = Message(subject=subject,sender='yw17392517656@163.com',recipients=to)
    # msg.html = '<h1>你是猪吗?</h1>'
    msg.html = render_template(filename + '.html',**kwargs)
    with app.app_context():
        mail.send(msg)
# send_mail(to=['yw17392517656@163.com','416323529@qq.com','741047561@qq.com',],subject="寒假作业",info="每天三次反省自己 1、你到底是不是一个猪 2、你今天有没有花里胡哨 3、今天有没有想我 ")

@app.route('/register/',methods=['POST','GET'])
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配置文件填写配置信息,在run中引用

# 配置发送邮件的相关信息;
# 指定邮件服务器的域名或ip,可以在QQ邮箱的设置中查看
MAIL_SERVER = 'smtp.163.com'
# 指定端口,默认是25,但是qq邮箱默认的端口为465和587;
MAIL_PORT = 465
"""
qq邮箱不支持非加密协议,那么使用加密协议,分为两种加密协议,选择其中一种即可
"""
MAIL_USE_SSL = True  # 使用带有SSL的加密协议
MAIL_USERNAME =  'yw17392517656' #os.environ.get('MAIL_PWD')
# 此处并不是登陆密码,而是开启smtp所发送的验证码
MAIL_PASSWORD = 'syyy1995713'
# # 实例化邮件对象
# mail = Mail(app)
DEBUG = True
SECRET_KEY = 'WESTOS'

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当注册成功时,要发往注册邮箱的html页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
尊敬的用户{{ username }}你好:
你已经成功注册西部开源网站
</body>
</html>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值