您的位置:首页 > 大数据 > 人工智能

用Flask-mail发送邮件失败解决方案

2016-08-19 14:40 316 查看
在看Flask-web开发第六章的时候发现运行书上的代码有错误,在挣扎了一中午,终于找到问题所在以及解决方法:

shell方面:

from hello import mail
from flask_mail import Message
from hello import mail
from flask import current_app
msg = Message('Test mail', sender='xxx@qq.com',
recipients=['xxx@.qq.com'])
msg.body = 'text body'
msg.html = '<b>HTML</b> body'
app_ctx = app.app_context()
app_ctx.push()
with app_ctx:
mail.send(msg)


在PS中设置了环境变量:

(venv) $ set MAIL_USERNAME=XXXXXXXX@qq.com #此处填写你的账户
(venv) $ set MAIL_PASSWORD=******* #此处填写你的密码


设置完进shell,运行书上代码,错误如下:

Traceback (most recent call last):
File "<console>", line 2, in <module>
File "D:\flasky\env\lib\site-packages\flask_mail.py", line 492, in send
message.send(connection)
File "D:\flasky\env\lib\site-packages\flask_mail.py", line 427, in send
connection.send(self)
File "D:\flasky\env\lib\site-packages\flask_mail.py", line 192, in send
message.rcpt_options)
File "c:\python27\Lib\smtplib.py", line 736, in sendmail
raise SMTPSenderRefused(code, resp, from_addr)
SMTPSenderRefused: (503, 'Error: need EHLO and AUTH first !', u'xxxxxxx@qq.com')


出的错误太多了,改着改着还有这种:
SMTPSenderRefused:(553,'Mail from must equal authorized user…………


原来用的Gmail,以为是邮箱问题就换了qq,安全验证也换了SSL(原来是
app.config['MAIL_USE_TLS'] = True


但还是有错误,我想可能是账户的问题,经过一顿恶搜,终于知道了一个方法来检查输入的环境变量:

os.environ.get("MAIL_USERNAME") # 获取环境变量中你所输入的值


随后我就在shell里试了试,居然是
None
,这么说我之前改的环境变量没设置进去,问题这就出来了

接下来是想尽一些办法成功设置环境变量,书上的示例代码如下:

(venv) $ set MAIL_USERNAME=<Gmail username>
(venv) $ set MAIL_PASSWORD=<Gmail password>


但还是None,我想要不换CMD试试?,结果就在CMD中输入环境变量(之前一直是PoweShell):

(venv) $ set MAIL_USERNAME=xxxxxxxx
(venv) $ set MAIL_PASSWORD=11111

(env) D:\flasky\env>PYTHON hello.py shell

>>> import os
>>> os.environ.get('MAIL_USERNAME')
'xxxxxxxx'
>>> os.environ.get('MAIL_PASSWORD')
'11111'


这说明set是在cmd里的命令,我一直误会了,关于在PS中设置环境变量的
8ca2
操作我也找了,看下面:

# 查看所有环境变量
ls env:

# 搜索环境变量
ls env:NODE*

# 查看单个环境变量
$env:NODE_ENV

# 添加/更新环境变量
$env:NODE_ENV=development

# 删除环境变量
del evn:NODE_ENV


对比cmd:

#Powershell设置环境变量

#查看所有环境变量
ls env:

#搜索环境变量
ls env:NODE*

#查看单个环境变量
$env:NODE_ENV

#添加/更新环境变量
$env:NODE_ENV=development

#删除环境变量
del evn:NODE_ENV


对比cmd:

# 查看所有环境变量
set

# 查看单个环境变量
set NODE_ENV

# 添加/更新环境变量
set NODE_ENV=development

# 删除环境变量
set NODE_ENV=


说一下需要注意的坑:

邮箱的安全协议(Gmail是TLS,qq和一些别的是SSL)

有些设置在PowerShell中会失败,那就换CMD试试

大小写一定要看好(因为马虎没少吃亏)

windows改环境变量后要重启CMD才生效
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: