本机环境:Mac+pycharm专业版
在flask web开发一书中,电子邮件使用的flask-mail库中,对于邮箱的账号和密码,作者使用的是环境变量:
app.config['MAIL_USERNAME']=os.environ.get('MAIL_USERNAME')
app.config['MAIL_PASSWORD']=os.environ.get('MAIL_PASSWORD')
然后在终端Terminal输入:
export MAIL_USERNAME=*********@qq.com
export MAIL_PASSWORD=**************
在终端输入:
echo $MAIL_USERNAME
会发现可以输出值,但是运行程序时任然会出现问题,问题描叙为:
smtplib.SMTPSenderRefused: (503, b'Error: need EHLO and AUTH first !')
然后我在程序中加入了输出中间变量:
#发邮件
def send_mail(to,subject,template,**kwargs):
print(app.config['MAIL_USERNAME'])
print(app.config['MAIL_PASSWORD'])
print(FLASKY_MAIL_SENDER)
msg = Message(app.config['FLASKY_MAIL_SUBJECT_PREFIX']+subject,
sender=FLASKY_MAIL_SENDER,recipients=[to])
msg.body = render_template(template+'.txt',**kwargs)
msg.html = render_template(template+'.html',**kwargs)
thr = Thread(target=send_sasync_email,args=[app,msg])
thr.start()
return thr
然而这三个print的结果都是None,也就是说,我用终端设置的环境变量在程序中用
app.config['MAIL_USERNAME']=os.environ.get('MAIL_USERNAME')
并不能得到。
在广泛的看了dalao们的博客后,我发现问题主要出在pycharm无法使用定义的环境变量(原因不明,有dalao说是因为pycharm 的进程是桌面环境的子进程,终端启动的时候才会读取 .bashrc ,设定的环境变量不是配置在系统级别,所以 pycharm 看不到这个环境变量)
于是乎我们得寻找在pycharm中定义环境变量的方法:
1. Preference -> Build, Execution, Deployment -> Console -> Python Console 下最上面可设置环境变量
2. 任务栏顶部的 Run -> Edit Configurations 里面有个 Environment Variables
方法1如下图:
在Environment variables中导入即可。
然后再次print邮箱账号和密码会发现可以其已经有值了,而且邮件也能够正常发送了。