Python学习之Flask-Mail异步邮件发送

学习Pythonweb中的微型flask框架有几天了,深深的感觉flask上的插件用着非常的方便,使用起来也是非常的舒服,突然有种不想学javaweb的冲动!(东西太多了。。)

首先介绍下flask-mail:

  1. python 标准库中的smtplib 包 可以用在 flask 程序中发送电子邮件
  2. 而 flask-mail封装了smtplib 可以更好的与 Flask 框架集成起来

注意:在使用Flask-Mail发送邮件之前首先要确保你使用的邮箱中的smtp服务开启,不同邮箱的开启方法不同,这个自己百度就行,这里介绍下QQ邮箱的打开方法。


在QQ邮箱中的设置中找到账户:

Python学习之Flask-Mail异步邮件发送_第1张图片


在下面找到服务选项:

Python学习之Flask-Mail异步邮件发送_第2张图片


注意:记得保存好给你的授权码,在程序中如果尽量不要把授权码直接写入,可以保存到环境变量中使用的时候从环境中导入。


还有每个邮箱的端口也是不一样的,具体看邮箱的客户端中的设置,比如腾讯的协议如下:

Python学习之Flask-Mail异步邮件发送_第3张图片


具体代码如下:

import threading

from flask import Flask
from flask.ext.mail import Mail, Message

app = Flask(__name__)
app.config.update(
    DEBUG = True,
    MAIL_SERVER='smtp.qq.com',
    MAIL_PROT=465,
    MAIL_USE_TLS = True,
    MAIL_USE_SSL = False,
    MAIL_USERNAME = '邮箱地址',
    MAIL_PASSWORD = = os.environ.get('MAIL_PASSWORD'),#从系统中获取授权码
    MAIL_DEBUG = True
)

mail = Mail(app)

@app.route('/')
def index():
    send_mail()
    print('email send!!')
    return "Sent"

def send_async_email(app, msg):
    with app.app_context():
        mail.send(msg)

def send_mail():
    #sender-发件人邮箱    recipients-收件人邮箱
    msg = Message("Hi!This is a test ",sender='*********@qq.com', recipients=['*********@qq.com'])
    msg.body = "This is a first email"
    #Flask支持很多,比如附件和抄送等功能,根据需要自己添加就可以
    # msg.attach 邮件附件添加   
    # msg.attach("文件名", "类型", 读取文件)
    #     with app.open_resource("F:\2281393651481.jpg") as fp:
    #         msg.attach("image.jpg", "image/jpg", fp.read())
    thr = threading.Thread(target =send_async_email, args = [app,msg])#创建线程
    thr.start()

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

Flask-Mail 使用同步模式发送电子邮件。
从电子邮件发送开始,直到电子邮件交付后,给浏览器发回其响应,在整个过程中,Web服务器会一直阻塞。如果我们试图发送电子邮件到一个服务器是缓慢的,甚至更糟糕的,暂时处于脱机状态,所以使用多线程异步发送电子邮件可以避免处理请求过程中不必要的延迟,将发送电子邮件的函数移到后台线程中,能够使程序更加流畅!但实际上,还可以用其他的方式,比如线程和多进程模块也可以实现异步任务。
这个根据需求来具体实现。


以上就是使用flask-mail来实现异步邮件发送的一些基本内容

你可能感兴趣的:(Python)