• Flask Web 发送邮件单文件


    import os
    from flask import Flask, render_template, session, redirect, url_for
    from flask_script import Manager, Shell
    from flask_bootstrap import Bootstrap
    from flask_moment import Moment
    from flask_wtf import Form
    from wtforms import StringField, SubmitField
    from wtforms.validators import Required
    from flask_sqlalchemy import SQLAlchemy
    from flask_migrate import Migrate, MigrateCommand
    from flask_mail import Mail
    
    basedir = os.path.abspath(os.path.dirname(__file__))
    
    app = Flask(__name__)
    app.config['SECRET_KEY'] = 'hard to guess string'
    app.config['SQLALCHEMY_DATABASE_URI'] =
        'sqlite:///' + os.path.join(basedir, 'data.sqlite')
    app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
    app.config['MAIL_SERVER'] = 'smtp.163.com'
    app.config['MAIL_PORT'] = 465
    app.config['MAIL_USE_TLS'] = False
    app.config['MAIL_USE_SSL'] = True
    app.config['MAIL_USERNAME'] = 'username@163.com'
    app.config['MAIL_PASSWORD'] = 'authorization_code '
    
    manager = Manager(app)
    bootstrap = Bootstrap(app)
    moment = Moment(app)
    db = SQLAlchemy(app)
    migrate = Migrate(app, db)
    mail = Mail(app)
    
    
    class Role(db.Model):
        __tablename__ = 'roles'
        id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String(64), unique=True)
        users = db.relationship('User', backref='role', lazy='dynamic')
    
        def __repr__(self):
            return '<Role %r>' % self.name
    
    
    class User(db.Model):
        __tablename__ = 'users'
        id = db.Column(db.Integer, primary_key=True)
        username = db.Column(db.String(64), unique=True, index=True)
        role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
    
        def __repr__(self):
            return '<User %r>' % self.username
    
    
    class NameForm(Form):
        name = StringField('What is your name?', validators=[Required()])
        submit = SubmitField('Submit')
    
    
    def make_shell_context():
        return dict(app=app, db=db, User=User, Role=Role)
    manager.add_command("shell", Shell(make_context=make_shell_context))
    manager.add_command('db', MigrateCommand)
    
    
    @app.errorhandler(404)
    def page_not_found(e):
        return render_template('404.html'), 404
    
    
    @app.errorhandler(500)
    def internal_server_error(e):
        return render_template('500.html'), 500
    
    
    @app.route('/', methods=['GET', 'POST'])
    def index():
        form = NameForm()
        if form.validate_on_submit():
            user = User.query.filter_by(username=form.name.data).first()
            if user is None:
                user = User(username=form.name.data)
                db.session.add(user)
                session['known'] = False
            else:
                session['known'] = True
            session['name'] = form.name.data
            return redirect(url_for('index'))
        return render_template('index.html', form=form, name=session.get('name'),
                               known=session.get('known', False))
    
    
    if __name__ == '__main__':
        manager.run()
    

    算是成功了

    记录一下 到时放到整合文件里

    借鉴了

    http://blog.csdn.net/geekleee/article/details/52596417

    把hello.py下面两项config直接填进去可以解决,如下

    app.config['MAIL_USERNAME'] = '1234567890@qq.com'
    # 注意两边带'',字符串类型
    app.config['MAIL_PASSWORD'] = '授权码'
    # 注意两边带'
    
    C:UsersGeek LeeGeek-Lee.github.io>venvScriptsactivate
    
    (venv) C:UsersGeek LeeGeek-Lee.github.io>set MAIL_USERNAME = 1234567890@qq.co
    m
    
    (venv) C:UsersGeek LeeGeek-Lee.github.io>set MAIL_PASSWORD = absdsdfsdfsfs
    
    
    (venv) C:UsersGeek LeeGeek-Lee.github.io>python hello.py shell
    >>> from flask_mail import Message
    >>> from hello import mail
    >>> msg = Message('test subject', sender='2546701377@qq.com',
    ...     recipients=['2546701377@qq.com'])
    >>> msg.body = 'text body'
    >>> msg.html = '<b>HTML</b> body'
    >>> with app.app_context():
    ...     mail.send(msg)
    ...
    Traceback (most recent call last):
      File "<console>", line 2, in <module>
      File "C:UsersGEEKLE~1GEEK-L~1.IOvenvlibsite-packagesflask_mail.py", lin
    e 492, in send
        message.send(connection)
      File "C:UsersGEEKLE~1GEEK-L~1.IOvenvlibsite-packagesflask_mail.py", lin
    e 427, in send
        connection.send(self)
      File "C:UsersGEEKLE~1GEEK-L~1.IOvenvlibsite-packagesflask_mail.py", lin
    e 192, in send
        message.rcpt_options)
      File "E:pythonLibsmtplib.py", line 778, in sendmail
        raise SMTPSenderRefused(code, resp, from_addr)
    smtplib.SMTPSenderRefused: (503, b'Error: need EHLO and AUTH first !', '25467013
    77@qq.com')
    >>> ^Z
    ############################直接在填入电子邮箱和授权码后############
    
    (venv) C:UsersGeek LeeGeek-Lee.github.io>python hello.py shell
    >>> from flask_mail import Message
    >>> from hello import mail
    >>> msg = Message('test subject', sender='2546701377@qq.com',
    ...     recipients=['2546701377@qq.com'])
    >>> msg.body = 'text body'
    >>> msg.html = '<b>HTML</b> body'
    >>> with app.app_context():
    ...     mail.send(msg)
    ...
    >>>
    ###################成功了##########################
    ####我想应该是在cmd中写入密码和授权码,但是环境没有接受到的关系,基本可以确定qq邮箱设置是对的,出问题和他没关系
    

    备注,如果用163邮箱,配置要改成: 
    复制代码

    # mail server settings
    MAIL_SERVER = 'smtp.163.com'
    MAIL_PORT = 587
    MAIL_USE_TLS = True
    MAIL_USE_SSL = True
    MAIL_USERNAME = os.environ.get('MAIL_USERNAME')
    MAIL_PASSWORD = os.environ.get('MAIL_PASSWORD')
    # administrator list
    ADMINS = ['your-username@163.com']
    

    不过我这里要这样配置

    app.config['MAIL_USE_TLS'] = False
    app.config['MAIL_USE_SSL'] = True
  • 相关阅读:
    十五、函数助手
    REST介绍以及常用的返回状态码
    十四、配置元件之计数器
    十三、参数化
    十二、jmeter目录结构
    十一、HTTP请求之Content-Type
    十、元件的作用域与执行顺序
    九、配置命令行模式
    04-传输层(3)
    03-传输层(2)
  • 原文地址:https://www.cnblogs.com/eternal1025/p/7761837.html
Copyright © 2020-2023  润新知