flask-mail 文档
http://www.pythondoc.com/flask-mail/index.html
项目中不可避免需要使用邮箱认证,如果使用flask则可以利用Flask-Mail来实现
之后手机验证什么的依自己帐号设置,验证成功后会获得一个授权码,这个需要保存后续发送邮箱时密码就填这个授权码。
使用 pip 或者 easy_install 安装 Flask-Mail:
pip install Flask-Mail
或者从版本控制系统(github)中下载最新的版本:
git clone https://github.com/mattupstate/flask-mail.git
cd flask-mail
python setup.py install
如果你正在使用 virtualenv,假设你会安装 flask-mail 在运行你的 Flask 应用程序的同一个 virtualenv 上。
Flask-Mail 使用标准的 Flask 配置 API 进行配置。下面这些是可用的配置型(每一个将会在文档中进行解释):
MAIL_SERVER : 默认为 ‘localhost’
MAIL_PORT : 默认为 25
MAIL_USE_TLS : 默认为 False
MAIL_USE_SSL : 默认为 False
MAIL_DEBUG : 默认为 app.debug
MAIL_USERNAME : 默认为 None
MAIL_PASSWORD : 默认为 None
MAIL_DEFAULT_SENDER : 默认为 None
MAIL_MAX_EMAILS : 默认为 None
MAIL_SUPPRESS_SEND : 默认为 app.testing
MAIL_ASCII_ATTACHMENTS : 默认为 False
另外,Flask-Mail 使用标准的 Flask 的 TESTING 配置项用于单元测试(下面会具体介绍)。
配置项 默认值 功能
MAIL_SERVER localhost 邮箱服务器
MAIL_PORT 25 端口
MAIL_USE_TLS False 是否使用TLS
MAIL_USE_SSL False 是否使用SSL
MAIL_DEBUG app.debug 是否为DEBUG模式,打印调试消息
MAIL_SUPPRESS_SEND app.testing 设置是否真的发送邮件,True不发送
MAIL_USERNAME None 用户名,填邮箱
MAIL_PASSWORD None 密码,填授权码
MAIL_DEFAULT_SENDER None 默认发送者,填邮箱
MAIL_MAX_EMAILS None 一次连接中的发送邮件的上限
MAIL_ASCII_ATTACHMENTS False 如果 MAIL_ASCII_ATTACHMENTS 设置成 True 的话,文件名将会转换成 ASCII 的。一般用于添加附件。
通常在一个 Web 应用中每一个请求会同时发送一封或者两封邮件。在某些特定的场景下,有可能会发送数十或者数百封邮件,不过这种发送工作会给交离线任务或者脚本执行。
在这种情况下发送邮件的代码会有些不同:
with mail.connect() as conn:
for user in users:
message = '...'
subject = "hello, %s" % user.name
msg = Message(recipients=[user.email],
body=message,
subject=subject)
conn.send(msg)
与电子邮件服务器的连接会一直保持活动状态直到所有的邮件都已经发送完成后才会关闭(断开)。
有些邮件服务器会限制一次连接中的发送邮件的上限。你可以设置重连前的发送邮件的最大数,通过配置 MAIL_MAX_EMAILS 。
with app.open_resource("image.png") as fp:
msg.attach("image.png", "image/png", fp.read())
from flask import Flask, request
from flask_script import Manager, Shell
from flask_mail import Mail, Message
from threading import Thread
app = Flask(__name__)
app.config['MAIL_DEBUG'] = True # 开启debug,便于调试看信息
app.config['MAIL_SUPPRESS_SEND'] = False # 发送邮件,为True则不发送
app.config['MAIL_SERVER'] = 'smtp.qq.com' # 邮箱服务器
app.config['MAIL_PORT'] = 465 # 端口
app.config['MAIL_USE_SSL'] = True # 重要,qq邮箱需要使用SSL
app.config['MAIL_USE_TLS'] = False # 不需要使用TLS
app.config['MAIL_USERNAME'] = '673346821@qq.com' # 填邮箱
app.config['MAIL_PASSWORD'] = 'Wyf880204*+' # 填授权码
app.config['MAIL_DEFAULT_SENDER'] = '673346821@qq.com' # 填邮箱,默认发送者
manager = Manager(app)
mail = Mail(app)
# 异步发送邮件
def send_async_email(app, msg):
with app.app_context():
mail.send(msg)
@app.route('/')
def index():
msg = Message(subject='Hello World',
, # 需要使用默认发送者则不用填
recipients=['838684900@qq.com'])
# 邮件内容会以文本和html两种格式呈现,而你能看到哪种格式取决于你的邮件客户端。
msg.body = 'sended by flask-email'
msg.html = '<b>测试Flask发送邮件<b>'
thread = Thread(target=send_async_email, args=[app, msg])
thread.start()
return '<h1>邮件发送成功</h1>'
if __name__ == '__main__':
manager.run()
效果图: