日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

flask_mail用法实例

發布時間:2023/12/20 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 flask_mail用法实例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

代碼來自<Flask Web開發 基于Python的Web應用開發實戰>書上的第六章中的示例,github版本是6b,代碼獲取方式如下:

終端輸入:

git clone https://github.com/miguelgrinberg/flasky.git

git checkout 6b

?

測試場景:

發送方是163郵箱

接收方是qq郵箱

?

為了方便運行,hello.py修改如下:

#-*- encoding:utf-8 -*- import sys reload(sys) sys.setdefaultencoding('utf-8') import os from threading import Thread from flask import Flask, render_template, session, redirect, url_for from flask_bootstrap import Bootstrap from flask_moment import Moment from flask_wtf import FlaskForm from wtforms import StringField, SubmitField from wtforms.validators import DataRequired from flask_sqlalchemy import SQLAlchemy from flask_migrate import Migrate from flask_mail import Mail, Message from flask_script import Manager 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_TRACK_MODIFICATIONS'] = False app.config['MAIL_SERVER'] = 'smtp.163.com' app.config['MAIL_PORT'] = 25 app.config['MAIL_USE_TLS'] = True app.config['MAIL_USERNAME'] = os.environ.get('MAIL_USERNAME')#整的意思就是從.bashrc中獲取變量的具體賦值 app.config['MAIL_PASSWORD'] = os.environ.get('MAIL_PASSWORD') app.config['FLASKY_MAIL_SUBJECT_PREFIX'] = '[Flasky]' app.config['FLASKY_MAIL_SENDER'] = os.environ.get('FLASKY_MAIL_SENDER') app.config['FLASKY_ADMIN'] = os.environ.get('FLASKY_ADMIN') app.config['DEBUG'] = Truebootstrap = Bootstrap(app) moment = Moment(app) db = SQLAlchemy(app) migrate = Migrate(app, db) mail = Mail(app)manager = Manager(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.nameclass 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.usernamedef send_async_email(app, msg):with app.app_context():mail.send(msg)def send_email(to, subject, template, **kwargs):msg = Message(app.config['FLASKY_MAIL_SUBJECT_PREFIX'] + ' ' + subject,sender=app.config['FLASKY_MAIL_SENDER'], recipients=['XXXXXXX@qq.com'])msg.body = render_template(template + '.txt', **kwargs)msg.html = render_template(template + '.html', **kwargs)thr = Thread(target=send_async_email, args=[app, msg])thr.start()return thrclass NameForm(FlaskForm):name = StringField('What is your name?', validators=[DataRequired()])submit = SubmitField('Submit')@app.shell_context_processor def make_shell_context():return dict(db=db, User=User, Role=Role)@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()print "user=",userif user is None:user = User(username=form.name.data)db.session.add(user)db.session.commit()session['known'] = Falseprint"app.config['FLASKY_ADMIN']",app.config['FLASKY_ADMIN']if app.config['FLASKY_ADMIN']:send_email(app.config['FLASKY_ADMIN'], 'New User','mail/new_user', user=user)else:session['known'] = Truesession['name'] = form.name.datareturn redirect(url_for('index'))return render_template('index.html', form=form, name=session.get('name'),known=session.get('known', False)) def killport(port):command='''kill -9 $(netstat -nlp | grep :'''+str(port)+''' | awk '{print $7}' | awk -F"/" '{ print $1 }')'''os.system(command) if __name__ == '__main__':killport(5000)db.create_all()manager.run()#運行配置如下:#設置.bashrc如下:# export MAIL_USERNAME=appleyuchi@163.com# export MAIL_PASSWORD=XXXXXXX# export FLASKY_MAIL_SENDER='Flasky Admin <appleyuchi@163.com>'# export FLASKY_ADMIN=appleyuchi@163.com#163郵箱開啟SMTP#qq郵箱開啟pop#刪除sqlite3文件,否則代碼邏輯走不到發送郵件那里的#app.config['MAIL_PORT']=25#app.config['MAIL_SERVER'] = 'smtp.163.com'修改此處#app.config['MAIL_USE_TLS'] = True#app.config['DEBUG'] = True# from flask_script import Manager# manager = Manager(app)

以上的注釋中標注了所有需要修改,以及相對于github上面的代碼而言,需要增加的部分

kilport函數是根據上次運行代碼時的端口關閉進程,這樣運行代碼時就不用手動在終端關閉進程來釋放端口了,方便調試使用。

注意必須是view plain中才能復制以上代碼,因為博客顯示中會把三個引號'''顯示成5個引號'''''

請記得.bashrc中增加上面注釋中提到的四行,然后運行方法是(注意上面的flask_script相關的不能刪除,否則下面的shell上下文環境就沒有了):

?

運行方法如下:

python hello.py shell

>>> from flask.ext.mail import Message
>>> msg = Message('test subject', sender='appleyuchi@163.com', recipients=['XXXXXXx@qq.com'])
>>> msg.body = 'text body'
>>> msg.html = '<b>HTML</b>'
>>> with app.app_context():
...? ? ?mail.send(msg)

?

文件結構是:

(python2.7) appleyuchi@ubuntu16:~/桌面/flask_learn/書本的git/flasky$ tree
.
├── hello.py
├── hello.pyc
├── LICENSE
├── migrations
│? ?├── alembic.ini
│? ?├── env.py
│? ?├── README
│? ?├── script.py.mako
│? ?└── versions
│? ? ? ?└── 38c4e85512a9_initial_migration.py
├── README.md
├── static
│? ?└── favicon.ico
├── templates
│? ?├── 404.html
│? ?├── 500.html
│? ?├── base.html
│? ?├── index.html
│? ?└── mail
│? ? ? ?├── new_user.html
│? ? ? ?└── new_user.txt

└── test.txt

總結:如果使用的發送和接收郵箱類型不變的話,那么只要修改:

.bashrc中的三處163郵箱+一處qq郵箱+一處163郵箱密碼+

開啟發送端的SMTP+接收端郵箱的POP即可

最終實驗成功的標志是在接收端的qq郵箱里面收到郵件.

總結

以上是生活随笔為你收集整理的flask_mail用法实例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。