zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Android Dalvik 虚拟机
    我在北京找工作(二):java实现算法<1> 冒泡排序+直接选择排序
    如何用java比较两个时间或日期的大小
    [安卓破解]听网页浏览器,无需注册即可语音朗读
    (step8.2.4)hdu 1846(Brave Game——巴什博奕)
    Oracle Database 12c Release 1 Installation On Oracle Linux 6.4 x86_64
    HDU2084:数塔(DP)
    MySQL MVCC(多版本并发控制)
    POJ
    网易前端微专业,JavaScript程序设计基础篇:数组
  • 原文地址:https://www.cnblogs.com/eternal1025/p/7761837.html
Copyright © 2011-2022 走看看