在参考flask web开发书中的邮件发送问题的时候,根据作者的配置,由于作者使用的是谷歌邮箱,我们不方便发送使用,所以将邮箱更换成QQ邮箱进行测试。
根据作者的配置进行操作
from flask import Flask
from flask_mail import Mail
from flask_mail import Message
import os
app = Flask(__name__)
app.config['MAIL_SERVER'] = 'smtp.qq.com'
app.config['MAIL_PORT'] = 465
# app.config['MAIL_USE_TLS'] = True # 作者此处使用TLS,是因为谷歌是STARTTLS加密
而qq是使用的SSL加密,则应该改成下面的这个配置
app.config['MAIL_USE_SSL'] = True # 发送成功的配置
app.config['MAIL_USERNAME'] = os.environ.get('QQ邮箱1@qq.com')
app.config['MAIL_PASSWORD'] = os.environ.get('开启stmp的时候,QQ的授权码')
app.config['FLASKY_MAIL_SUBJECT_PREFIX'] = '[Flasky]'
app.config['FLASKY_MAIL_SENDER'] = 'Flasky Admin <QQ邮箱1@qq.com>'
app.config['FLASKY_ADMIN'] = os.environ.get('FLASKY_ADMIN')
mail = Mail(app)
msg = Message('Test Mail', sender='QQ邮箱1@qq.com', recipients=['QQ邮箱2@qq.com'])
msg.body = 'This is the plain text body'
msg.html = 'This is the <b>HTML</b> body'
with app.app_context():
mail.send(msg)
按照上面的代码执行的时候,显示报错信息如下
Traceback (most recent call last):
File "D:/flasky/venv/test01.py", line 27, in <module>
mail.send(msg)
File "D:\flasky\venv\lib\site-packages\flask_mail.py", line 492, in send
message.send(connection)
File "D:\flasky\venv\lib\site-packages\flask_mail.py", line 427, in send
connection.send(self)
File "D:\flasky\venv\lib\site-packages\flask_mail.py", line 192, in send
message.rcpt_options)
File "D:\software\miniconda\lib\smtplib.py", line 867, in sendmail
raise SMTPSenderRefused(code, resp, from_addr)
smtplib.SMTPSenderRefused: (503, b'Error: need EHLO and AUTH first !', '553931273@qq.com')
仔细研究发现,是因为根据作者写法,采用了os.environ.get()方法获取用户名和密码,在这里,直接将这个方法去掉就可以了
如下
from flask import Flask
from flask_mail import Mail
from flask_mail import Message
import os
app = Flask(__name__)
app.config['MAIL_SERVER'] = 'smtp.qq.com'
app.config['MAIL_PORT'] = 465
app.config['MAIL_USE_SSL'] = True
# app.config['smtp.UseDefaultCredentials'] = True
# app.config['smtp.EnableSsl'] = True
app.config['MAIL_USERNAME'] = '你的QQ@qq.com'
app.config['MAIL_PASSWORD'] = '你的授权码'
app.config['FLASKY_MAIL_SUBJECT_PREFIX'] = '[Flasky]'
app.config['FLASKY_MAIL_SENDER'] = 'Flasky Admin <你的QQ@qq.com>'
app.config['FLASKY_ADMIN'] = 'FLASKY_ADMIN'
mail = Mail(app)
msg = Message('Test Mail', sender='你的QQ@qq.com', recipients=['你的QQ或者其他邮箱@qq.com'])
msg.body = 'This is the plain text body'
msg.html = 'This is the <b>HTML</b> body'
with app.app_context():
mail.send(msg)
在flask shell的操作为
进入venv环境,激活虚拟环境 命令为:Scripts\activate
(venv) D:\flasky\venv>set FLASK_APP=test01.py
(venv) D:\flasky\venv>flask shell
Python 3.6.5 |Anaconda, Inc.| (default, Mar 29 2018, 13:32:41) [MSC v.1900 64 bit (AMD64)] on win32
App: test01 [production]
Instance: D:\flasky\venv\instance
>>> from test01 import *
>>> from flask_mail import Message
>>> msg=Message('Test Mail',sender='你的QQ号@qq.com',recipients=['其他邮箱@qq.com'])
>>> msg.body='test body'
>>> msg.html='<b>哈哈哈哈哈哈哈</b>'
>>> with app.app_context(): </b>'
... mail.send(msg)
...