安装:
>>> pip3 install flask_mail
设置环境变量
>>> export MAIL_USERNAME=发件邮箱地址@163.com
>>> export MAIL_PASSWORD=发件邮箱授权码
>>> export MAIL_SERVER=smtp.163.com
注意!发件邮箱要开启SMTP,一般在邮箱的设置界面,并且MAIL_PASSWORD一定要填授权码,而非密码,以163为例:
# -*- coding: UTF-8
# config.py
import os
DEBUG = False
MAIL_SERVER = os.environ['MAIL_SERVER']
MAIL_PORT = 25
MAIL_USE_TLS = True
MAIL_USE_SSL = False
MAIL_USERNAME = os.environ['MAIL_USERNAME']
MAIL_PASSWORD = os.environ['MAIL_PASSWORD']
MAIL_SERVER = os.environ['MAIL_SERVER']
MAIL_DEFAULT_SENDER = 'from@example.com'
DB_HOST = os.environ['MONGO_PORT_27017_TCP_ADDR']
DB_PORT = 27017
KEY = 'secret'
ACTIVATION_EXPIRE_DAYS = 5
TOKEN_EXPIRE_HOURS = 1
# -*- coding: UTF-8
# flaskMail.py
from flask import Flask
from flask_mail import Message, Mail
import os
app = Flask(__name__)
app.config.from_object('config')
mail = Mail(app)
# 创建邮件内容
msg = Message('email subject',sender='发件邮箱地址@163.com',
recipients=['收件邮箱地址@qq.com'])
msg.body='邮件正文内容'
# 发送邮件,没有包含附件
with app.app_context():
mail.send(msg)
# 发送邮件,包含有附件
with app.app_context():
with app.open_resource('test.png') as f:
# msg.attach 邮件附件添加
# msg.attach("文件名", "类型", 读取文件)
msg.attach('test.png','image/png',f.read())
mail.send(msg)
print('已发送!')
>>> python3 flaskMail.py
'已发送!'
如果sender中设置的邮箱和环境变量中设置的邮箱不一致会报错:
smtplib.SMTPSenderRefused: (553, b'Mail from must equal authorized user', 'sender-email-address@163.com')
如果邮箱没有设置开启SMTP或发件邮箱密码不是授权码,会报错:
smtplib.SMTPAuthenticationError: (550, b'User has no permission')