flask用flask_mail发送邮箱

  1. 安装

     pip install Flask-Mail
    
  2. 导入模块

     from flask_mail import Mail, Message
    
  3. 配置参数

     MAIL_SERVER : default ‘localhost’
     MAIL_PORT : default 25
     MAIL_USE_TLS : default False
     MAIL_USE_SSL : default False
     MAIL_DEBUG : default app.debug
     MAIL_USERNAME : default None
     MAIL_PASSWORD : default None
     MAIL_DEFAULT_SENDER : default None
     MAIL_MAX_EMAILS : default None
     MAIL_SUPPRESS_SEND : default app.testing
     MAIL_ASCII_ATTACHMENTS : default False
    
  4. 跟app绑定

     mail = Mail()
     
     app = Flask(__name__)
     mail.init_app(app)
    
  5. 发送邮件

     manage = Message(
          # 邮件头
          "subject",
          # 给那个邮箱发
          recipients=[email],
          # 发送的内容
          body="content"
     )
     # 发送邮件
     mail.send(manage)
    

案列

  • config.py
    在这里插入图片描述
  • exts.py
    from flask_sqlalchemy import SQLAlchemy
    from flask_mail import Mail
    
    # 创建sqlalchemy对象
    db = SQLAlchemy()
    
    # 创建mail对象
    mail = Mail()
    
  • main_cms.py
    from flask import Flask
    from flask_wtf import CSRFProtect
    
    from apps.cms.views import bp as cms_bp
    from apps.common.views import bp as common_bp
    from apps.front.views import bp as front_bp
    from exts import db, mail
    import config
    
    
    def create_app():
        app = Flask(__name__)
    
        # 把配置文件绑定到app中
        app.config.from_object(config)
    
        app.register_blueprint(cms_bp)
        app.register_blueprint(common_bp)
        app.register_blueprint(front_bp)
    
        # 把db绑定到app中
        db.init_app(app)
    
        # 绑定发送邮箱
        mail.init_app(app)
    
        # 跟app添加csrf防护
        CSRFProtect(app)
    
        return app
    
    
    if __name__ == "__main__":
        app = create_app()
        app.run(port=8000)
    
  • views.py
    from flask import request
    from exts import mail
    # restful 自己定义的返回信息
    # xgcache 是自己封装的memcache缓存
    from utils import restful, xgcache
    import string
    import re
    import random
    
    @bp.route("/email_captcha/")
    @login_required
    def email_captcha():
        email = request.args.get("email")
        if email:
            result = re.match("^[a-z0-9A-Z]+[- | a-z0-9A-Z . _]+@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-z]{2,}$", email)
            if result:
    
                # if xgcache.get(g.cms_user.id):
                #     return restful.success("请60秒后重试, 感谢您的配合...")
    
                # string.ascii_letters 是小写a-z和大写A-Z拼成的字符串
                source = list(string.ascii_letters)
    
                # extend 把括号里的了列表添加到source中
                # map 第一个参数函数
                # 第二个参数可迭代对象
                source.extend(map(lambda x: str(x), range(10)))
    
                # sample 第一个参数是列表 第二个参数是指定你要的个数 从source里面随机的采取6位
                captcha = random.sample(source, 6)
    
                # 把列表拼接成字符串
                captcha = "".join(captcha)
    
                manage = Message(
                    # 邮件头
                    "Python论坛邮箱验证码",
                    # 发送的邮箱
                    recipients=[email],
                    # 发送的内容
                    body="您的验证码是:%s" % captcha
                )
    
                try:
                    mail.send(manage)
                    xgcache.set(email, captcha)
                    return restful.success(message="ok")
                except Exception as e:
                    return restful.server_error(message="服务器错误")
        else:
            return restful.params_error(message="邮箱格式不正确")
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

只因为你温柔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值