• Flask框架——Flask-Mail邮件


    目录

    安装Flask-Mail

    配置Flask-Mail

    使用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
    

    信息如下所示:

    1. Name: Flask-Mail
    2. Version: 0.9.1
    3. Summary: Flask extension for sending email
    4. Home-page: https://github.com/rduplain/flask-mail
    5. Author: Dan Jacob
    6. Author-email: danjac354@gmail.com
    7. License: BSD
    8. Location: c:\users\lin\desktop\flask-mail邮件\venv\lib\site-packages
    9. Requires: blinker, Flask
    10. Required-by:

    配置Flask-Mail

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

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

    1. from flask import Flask
    2. from flask_mail import Mail
    3. app =Flask(__name__)
    4. app.config['MAIL_SERVER']='smtp.qq.com'   #邮件服务器的名称/IP地址
    5. app.config['MAIL_PORT'] = 465       #所用服务器的端口号
    6. app.config['MAIL_USERNAME'] = 'yourmail@qq.com'  #发件人的用户名
    7. app.config['MAIL_PASSWORD'] = '*******'   #发件人的POP3/IMAP/SMTP服务的SSL连接客户端授权码
    8. app.config['MAIL_USE_TLS'] = False    #禁用传输安全层加密
    9. app.config['MAIL_USE_SSL'] = True    #启用安全套接字层加密
    10. mail = Mail(app)        #创建邮件类对象
    11. if __name__ == '__main__':
    12.      app.run(debug = True)

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

    QQ邮箱相关服务器信息:

    服务器名称服务器地址SSL协议端口号非SSL协议端口号
    IMAPimap.qq.com993143
    SMTPsmtp.qq.com465/58725
    POP3pop.qq.com995110

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

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

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

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

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

    • MAIL_DEBUG:支持自定义调试,默认是Flask应用程序的调试状态;

    • MAIL_DEFAULT_SENDER:设置默认发件人;

    • MAIL_MAX_EMAILS:设置要发送的最大邮件;

    • MAIL_SUPPRESS_SEND: 如果app.testing设置为true,则发送被抑制;

    • MAIL_ASCII_ATTACHMENTS: 如果设置为true,则将附加的文件名转换为ASCII。

    使用Flask-Mail

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

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

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

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

    1. html>
    2. <html lang="en">
    3. <head>
    4.     <meta charset="UTF-8">
    5.     <title>Titletitle>
    6. head>
    7. <body>
    8.     <form action="{{ url_for('send_mail') }}" method="post">
    9.         <p>收件人是:<input type="text" name="username">p>
    10.         <p>邮箱主题为:<input type="text" name="theme">p>
    11.         <p>邮箱内容为:<input type="text" name="content">p>
    12.         <p><input type="submit" value="发送">p>
    13.     form>
    14. body>
    15. html>

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

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

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

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

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

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

    在Mail类中有以下方法:

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

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

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

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

    公众号:白巧克力LIN

    该公众号发布Python、数据库、Linux、Flask、自动化测试、Git等相关文章!

    - END -

  • 相关阅读:
    CTPN网络理解
    《代码大全2》第5章 软件构建中的设计
    单细胞数据分析(一):10X数据生成seurat数据对象
    对话阿里巴巴副总裁贾扬清:追求大模型,并不是一件坏事
    面试高频手撕算法 - 01背包系列
    Apache Log4j2漏洞
    【hive】列转行—collect_set()/collect_list()/concat_ws()函数的使用场景
    2020 第十一届蓝桥杯大赛软件赛决赛,国赛,C/C++大学B组题解
    弘辽科技:淘宝店铺信用等级怎么看?信用等级怎么提升?
    SpringBoot 框架 2022-8-1
  • 原文地址:https://blog.csdn.net/weixin_52122271/article/details/125992503