第6章开头有这样一句话:Flask-Mail连接到SMTP服务器,并把邮件交给这个服务器发送。 所以这一章的目标是写一个程序,让QQ邮箱或者其他邮箱帮我们发送一封邮件到其他邮箱。
书里举例的是Gmail例子,但由于不可抗拒原因,现状况用QQ或者163做测试较好。
1.
QQ邮箱配置:
app.config['MAIL_SERVER'] = 'smtp.qq.com'
app.config['MAIL_PORT'] = 465
app.config['MAIL_USE_SSL'] = True
#MAIL_USERNAME填写QQ邮箱地址,相当于发件人邮箱地址
app.config['MAIL_USERNAME'] = '150xxxx8355@qq.com'
#MAIL_PASSWORD不是邮箱登录密码,而是授权码,获取授权码方式在下面
app.config['MAIL_PASSWORD'] = '9527xxxx232'
授权码设置:
进入邮箱账户找到POP3/IMAP/SMTP设置页面,开启POP3和SMTP服务及IMAP/SMTP服务。
之后点击箭头所指生成授权码,按照弹出提示操作即可,将获取到的授权码填写到MAIL_PASSWORD字段。
发送程序:
#sender:发件人地址,和MAIL_USERNAME字段填写的邮箱一致
#recipients:收件人地址,可以填写多个
msg = Message('test subject', sender='150xxxx8355@qq.com', recipients=['alex@qq.com', 'rion@163.com'])
msg.body = 'text body'
msg.html = '<b>HTML</b> body'
with app.app_context():
mail.send(msg)
如果控制台没有打印错误信息,说明发送成功,可以在收件人邮箱查看刚才发送的邮件。
2.
163邮箱配置和QQ邮箱一致:
app.config['MAIL_SERVER'] = 'smtp.163.com'
app.config['MAIL_PORT'] = 465
app.config['MAIL_USE_SSL'] = True
app.config['MAIL_USERNAME'] = '147xxxx8623@163.com'
app.config['MAIL_PASSWORD'] = '1994xxxx418'
用163给QQ邮箱发测试邮件,可能会不成功,会提示这样的错误:
错误码提示是554,网易对此错误码的解释是:
•554 DT:SPM 发送的邮件内容包含了未被许可的信息,或被系统识别为垃圾邮件。请检查是否有用户发送病毒或者垃圾邮件;
出现这样的错误,代码本身是没有问题的,测试邮件因为简陋被163给过滤掉了。
其他错误码可以见此链接:
http://help.163.com/09/1224/17/5RAJ4LMH00753VB8.html
参考链接:
https://segmentfault.com/q/1010000005643494
https://www.zhihu.com/question/50008398/answer/158605536
http://www.jianshu.com/p/ab0f062da743