flask-mail邮件发送

1.普通的邮件发送

  • 说明:专门用来实现邮件发送的扩展库,使用非常方便。
  • 安装:pip install flask-mail
  • 使用:

基本模板搭建

from flask_mail import Mail, Message

import os

# 邮件配置,一定要放在对象创建之前

# 邮箱服务器(163.com qq.com 等)

app.config['MAIL_SERVER'] = 'smtp.邮箱后缀'

# 用户名

app.config['MAIL_USERNAME'] = '邮箱用户名'

# 密码

app.config['MAIL_PASSWORD'] = os.getenv('MAIL_PASSWORD', '123456')

​# 可以将密码设置在环境变量里,可以在终端设置set 名字=值

# 创建发送邮件的对象

mail = Mail(app)

 

  • ​视图函数

@app.route('/send/')

def send():

   # 创建邮件消息对象

   msg = Message('账户激活',

                 recipients=['接收的邮箱'],

#指定发送者,也就是上面配置的用户

                 sender=app.config['MAIL_USERNAME'])

   # 设置邮件内容

   msg.html = '恭喜你,中奖了!'

   # 发送邮件

   mail.send(msg)

   return '邮件发送成功'

 

总结:书写邮箱相关配置

创建发送邮件的Mail对象

创建邮件消息Message对象

使用mail的send方法发送邮件

 

2.优化:

  • 封装函数发送邮件

# 封装函数发送邮件

def send_mail(subject, to, template, **kwargs):

   # 处理邮件接收者

   if isinstance(to, list):

       recipients = to

   elif isinstance(to, str):

       recipients = to.split(',')

   else:

       raise Exception('邮件接收者参数有误')

   # 创建邮件消息对象

   msg = Message(subject=subject, recipients=recipients,

                 sender=app.config['MAIL_USERNAME'])

   # 设置邮件内容

   msg.html = render_template(template, **kwargs)

   # 发送邮件

   mail.send(msg)

 

@app.route('/send/')

def send():

   # 调用函数即可发送邮件

   send_mail('账户激活', '接收邮箱', 'activate.html', name='可以写用户名')

   return '邮件发送成功'

 

  • 异步发送邮件(为了更好的用户体验)

from flask import current_app

from threading import Thread

# 异步发送邮件

def async_send_mail(app, msg):

   # 邮件发送必须在程序上下文中进行

   # 新的线程没有上下文,因此需要手动创建上下文

   with app.app_context():

       mail.send(msg)  

       

在封装好的函数基础上,没有直接发送消息内容,

# 发送邮件:同步发送,会阻塞运行

# mail.send(msg)

# 创建一个线程,在新的线程中发送邮件

thr = Thread(target=async_send_mail, args=(app, msg))

# 启动线程

thr.start()

# 返回线程

return thr

 

  • QQ邮箱发送配置

# 密码,QQ邮箱需要使用授权码

app.config['MAIL_PASSWORD'] = os.getenv('MAIL_PASSWORD', '123456')

# QQ邮箱配置

# app.config['MAIL_PORT'] = 465

# 加密传输

# app.config['MAIL_USR_SSL'] = True

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值