flask-mail常见的邮箱配置问题解决

一、常见的邮箱的配置(包括QQ邮箱,126邮箱)

1、 根据《Flask Web开发》这本书中第6章关于flask-mail的配置,以下步骤(QQ邮箱配置为例,以下终端的演示均为在mac上进行,linux和win会略有所不同):

  • 安装flask-mail
(venv) $ pip install flask-mail
  • 1
  • hello.py中的配置(以qq邮箱为例):
import os
# ...
app.config['MAIL_SERVER'] = 'smtp.qq.com'   
app.config['MAIL_PORT'] = 25
app.config['MAIL_USE_TLS'] = True
app.config['MAIL_USERNAME'] = os.environ.get('MAIL_USERNAME') 
app.config['MAIL_PASSWORD'] = os.environ.get('MAIL_PASSWORD')
app.config['FLASKY_MAIL_SUBJECT_PREFIX'] = '[Flasky]'
app.config['FLASKY_MAIL_SENDER'] = 'Flasky Admin <1906242834@qq.com>'
app.config['FLASKY_ADMIN'] = os.environ.get('FLASKY_ADMIN')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

其中用户的邮箱名、密码、以及管理员的邮箱是通过环境变量导入的,以下为终端中的操作:

(venv) $ export MAIL_PASSWORD='xxxxx'  #自己的邮箱客户端登录密码(不同于电脑登录的密码)
(venv) $ echo $MAIL_PASSWORD # 打印密码确定导入的密码是否正确         
xxxxx
(venv) $ export MAIL_USERNAME='2450385291@qq.com' # 自己的邮箱地址
(venv) $ echo $MAIL_USERNAME # 打印自己的邮箱地址确认是否正确             
2450385291@qq.com
(venv) $ export FLASKY_ADMIN='2450385291@qq.com' #导入管理员的邮箱地址
(venv) $ echo $FLASKY_ADMIN  # 打印管理员的邮箱地址 
1906242834@qq.com
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
 下面简单说下,怎么开启QQ邮箱的SMTP服务(允许在第三方的客户端登录),
  • 1
  • 2
  • 登录自己的QQ邮箱 ,在首页点击设置,进入设置选项: 
    这里写图片描述
  • 设置页面 
    这里写图片描述
    这里写图片描述
  • 根据提示打开SMTP服务(POP3和IMAP两个都打开)生成授权码,这个授权码就是我们在使用flask-mail时候的用户密码,也是我们在手机客户端登录邮箱时的密码。

  • 下面让我们在终端进行一次测试

(venv) $ python hello1.py shell

>>> from flask.ext.mail import Message
>>> from hello1 import mail
>>> msg = Message('test subject', sender='2450385291@qq.com',
...     recipients=['2450385291@qq.com'])
>>> msg.body = 'text body'
>>> msg.html = '<b>HTML</b>'
>>> with app.app_context():
...     mail.send(msg)
... 
>>> 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 看一下测试结果,成功啦,:)。 
    这里写图片描述
    注意:测试发邮件的终端窗口必须是在刚才导入环境变量的终端窗口,并且如果关闭此终端的话,那么,环境变量的导入就会失效(必须重新导入)
  • 在最后集成的大规模应用中的config.py下的配置:
import os
# ...
class Config:
    SECRET_KEY = os.environ.get('SECRET_KEY') or 'hard to guess string'
    MAIL_SERVER = 'smtp.qq.com'
    MAIL_PORT = 25
    MAIL_USE_TLS = True
    MAIL_DEBUG = True
    MAIL_USERNAME = os.environ.get('MAIL_USERNAME')
    MAIL_PASSWORD = os.environ.get('MAIL_PASSWORD')
    FLASKY_MAIL_SUBJECT_PREFIX = '[FLASKY]'
    FLASKY_MAIL_SENDER = 'Flasky Admin <xxxxxxx@qq.com>'
    FLASKY_ADMIN = os.environ.get('FLASKY_ADMIN')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

其中TLS是指的是传输层安全协议,在此处应打开,确保安全传输;DEBUG调试打开是方便我们接受到任何关于flask-mail的错误信息;其他的导入方法和上面的QQ邮箱在终端中的导入方法类似。


2、126邮箱的配置:

  • 在hello1.py中的配置:
import os
# ...
app.config['MAIL_SERVER'] = 'smtp.126.com'
app.config['MAIL_PORT'] = 25
app.config['MAIL_USE_TLS'] = True
app.config['MAIL_USERNAME']=os.environ.get('MAIL_USERNAME')
app.config['MAIL_PASSWORD']=os.environ.get('MAIL_PASSWORD')
app.config['FLASKY_MAIL_SUBJECT_PREFIX'] = '[Flasky]'
app.config['FLASKY_MAIL_SENDER'] = 'Flasky Admin <xxxxxxx@126.com>'
app.config['FLASKY_ADMIN']=os.environ.get('FLASKY_ADMIN')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 在终端下的导入环境变量:
(venv) $ export MAIL_USERNAME='xxxxxxxxx@126.com'
(venv) $ export MAIL_PASSWORD='xxxxxxxx'
(venv) $ echo $MAIL_USERNAME
xxxxxxxxx@126.com
(venv) $ echo $MAIL_PASSWORD
xxxxxxxx
(venv) $ python hello1.py shell                     

>>> from flask.ext.mail import Message
>>> from hello1 import mail
>>> msg = Message('test subject', sender='xxxxxxxxx@126.com',             
...     recipients=['xxxxxxxxx@126.com'])
>>> msg.body = 'text body'
>>> msg.html = '<b>HTML</b>'
>>> with app.app_context():
...     mail.send(msg)       # 此处没有报错的话,说明就发送成功了
...                          # 注意:测试发邮件的终端必须是刚刚导入环境变量的终端
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 在邮箱中查看一下 : 
    这里写图片描述
    说明发送成功了,:)。
  • 在大型的项目目录中的config.py中的配置,我就不一一赘述了,跟上面QQ邮箱的类似,大家照此写就可以了。

二、对于flask-mail环境变量导入的优化以及常见问题的分析:

1、flask-mail环境变量的导入的优化方法:

使用环境变量导入邮箱的用户名和密码,显然从理论上讲是非常安全的,但是在我们的编码过程中,每次测试都要重复导入,因为终端一旦关闭,那么导入的环境变量就会失效,对于我们来说是十分不方便的,所以小编根据自己的经验,给大家提供一种较为方便的方法。

  • 在hello1.py的同级目录下,新建一个py文件,命名为info.py:
  • 在info.py中写入自己的邮箱用户名和密码:
USERNAME = 'xxxxxxxx@qq.com'
PASSWORD = 'yyyyyy'
  • 1
  • 2
  • 3

在hello1.py中的代码如何:

import os
# ...
from info import USERNAME, PASSWORD #从info.py中导入邮箱账户和密码
app.config['MAIL_SERVER'] = 'smtp.qq.com'
app.config['MAIL_PORT'] = 25
app.config['MAIL_USE_TLS'] = True
app.config['MAIL_USERNAME'] = USERNAME  #将邮箱账户赋值
app.config['MAIL_PASSWORD'] = PASSWORD  #将邮箱密码进行赋值
app.config['FLASKY_MAIL_SUBJECT_PREFIX'] = '[Flasky]'
app.config['FLASKY_MAIL_SENDER'] = 'Flasky Admin <xxxxxxx@qq.com>'
app.config['FLASKY_ADMIN'] = USERNAME
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

由此就不用每次在终端里进行环境变量的导入了,但是很多朋友可能会想,我的代码是推送到线上的,那我push的时候不就直接推送到github上了,别人不就可以看见我的邮箱和密码了吗(确实有这个问题,小编的邮箱原来就差点泄露过),对于使用github的小伙伴来说,可以设置,对 git的隐藏文件 .gitignore进行编辑:

(venv) $ vim .gitignore
  • 1

进入.gitignore文件:

 88 # Rope project settings
 89 .ropeproject
 90 Status API Training Shop Blog About
 91 
 92 secret.py   # 将你不想git追踪的文件添加到里面
 93 info.py
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

有关详细的git忽略特殊文件的做法,请移步廖雪峰的git教程(忽略特殊文件),关于有朋友使用pycharm集成IDE的,自己查阅相关文档进行设置,在这里不一一赘述了。

2、flask-mail测试发邮件过程中的常见问题:

①连接问题: 
常见错误代码:Error 553,Error 550,此类错误代码一般提示连接被拒绝,原因可能是:1、邮箱的客户端密码不对,此为第一个要排除的问题,实在不行建议重新生成一个;2、邮箱的端口不对,我在这里设置的端口25,经过测试是可以正常运行的;3、关于邮箱的TLS没有打开,安全协议没有打开;4、在按照书上进行环境变量导入不正确,如果采用换将变量导入的话,建议一定要在终端进行打印,看显示的时候正确。 
②编码问题: 
有时候,你在win下进行编码,然后发现文件需要copy到虚拟机的ubuntu下,但是却发现文件显示乱码,那么很可能是编码问题,大家可以参考 AderStep紫夜阑珊-青伶巷草的博客Python程序在Windows终端乱码解决方法http://blog.csdn.net/gatieme来参考解决。

以上就是我对flask-mail配置问题的时候的一些总结,大家可以作为参考,有什么问题,请在下面评论区评论,谢谢大家,:)。
  • 1
  • 2

http://blog.csdn.net/lagelangzhi/article/details/51717433
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值