在学习flask-mail来发送电子邮件的时候遇到了一些问题,其实都是些小问题,如今记录下来以便于之后查看。 html
pip install flask-mail
from flask.ext.mail import Mail mail = Mail(app)
MAIL_SERVER = 'smtp.live.com', MAIL_PROT = 25, MAIL_USE_TLS = True, MAIL_USE_SSL = False, MAIL_USERNAME = "", MAIL_PASSWORD = "", MAIL_DEBUG = True
MAIL_SERVER = 'smtp.qq.com', MAIL_PROT = 25, MAIL_USE_TLS = True, MAIL_USE_SSL = False, MAIL_USERNAME = "", MAIL_PASSWORD = "", MAIL_DEBUG = True
MAIL_SERVER = 'smtp.126.com', MAIL_PROT = 25, MAIL_USE_TLS = True, MAIL_USE_SSL = False, MAIL_USERNAME = "", MAIL_PASSWORD = "", MAIL_DEBUG = True
import os # ... app.config['MAIL_SERVER'] = 'smtp.163.com' app.config['MAIL_PORT'] = 465 app.config['MAIL_USE_SSL'] = True app.config['MAIL_USERNAME'] = os.environ.get('MAIL_USERNAME') app.config['MAIL_PASSWORD'] = os.environ.get('MAIL_PASSWORD')
注意,这里的端口改成了465,是网易邮箱的配置,在邮箱帮助中能够搜索到python
同时设置MAIL_USE_SSL为True,无需设置MAIL_USE_TSL,默认为Falseshell
其实服务器的配置都是挺简单的,各个不一样邮箱服务器的SMTP配置的不一样点就是MAIL_SERVER那里,再就是不一样的协议用端口不一样,根据本身的配置来设置,若是明明配置正确了都还不能够成功发送邮件,那就得检查一下本身的邮箱帐户里边儿有没有把SMTP服务给打开,具体的打开方式就本身百度了哈,都挺简单的事情。flask
from flask import Flask from flask.ext.mail import Mail, Message import os app = Flask(__name__) app.config.update( DEBUG = True, MAIL_SERVER='smtp.live.com', MAIL_PROT=25, MAIL_USE_TLS = True, MAIL_USE_SSL = False, MAIL_USERNAME = 'example@hotmail.com', MAIL_PASSWORD = '**********', MAIL_DEBUG = True ) mail = Mail(app) @app.route('/') def index(): # sender 发送方哈,recipients 邮件接收方列表 msg = Message("Hi!This is a test ",sender='example@example.com', recipients=['example@example.com']) # msg.body 邮件正文 msg.body = "This is a first email" # msg.attach 邮件附件添加 # msg.attach("文件名", "类型", 读取文件) with app.open_resource("F:\2281393651481.jpg") as fp: msg.attach("image.jpg", "image/jpg", fp.read()) mail.send(msg) print "Mail sent" return "Sent" if __name__ == "__main__": app.run()
咱们先来看文章主要内容:windows
这里讲一下SMTP和POP还有IMAP功能bash
这个主要达到的功能就是:能够经过非官方的客户端,来访问邮箱收发邮件服务器
好比:我用邮箱大师这个软件,能够绑定某个126邮箱,来进行收发邮件app
而POP和IMAP的区别在于,POP的操做,不会同步到服务器上,也就是不会影响到服务器post
而IMAP是和服务器同步的学习
而后126设置相关的页面以下:
特别要注意我附加在页面上的文字,网易会在开通这些功能的时候让你另外设置一个受权码!!这个受权码是当你在使用非网易客户端时,启用pop/smtp/imap几个功能时候的密码!!
也就是说,你用其余软件收发邮件的时候,密码不是你原来那个,而是你的受权码!!!
也能够在邮箱中把客户端受权密码关闭,直接使用密码发送便可
在开发过程当中,若是链接到外部SMTP 服务器,则可能更方便。举个例子,示例6-1 展现
了如何配置程序,以便使用Google Gmail 帐户发送电子邮件。
示例6-1 hello.py:配置Flask-Mail 使用Gmail
import os
# ...
app.config['MAIL_SERVER'] = 'smtp.126.com' #这里是设置每一个邮箱不一样的smtp服务器,因为GMAIL在国内被墙了,因此我这里使用126
app.config['MAIL_PORT'] = 25 #本身百度一下,每一个邮箱对应的smtp端口号
app.config['MAIL_USE_TLS'] = True
app.config['MAIL_USERNAME'] = os.environ.get('MAIL_USERNAME') #这里提示,不要将帐户和密码写入代码里面,而是设置在环境变量里面读取
app.config['MAIL_PASSWORD'] = os.environ.get('MAIL_PASSWORD')
前方大坑.....注意避让
保存电子邮件服务器用户名和密码的两个环境变量要在环境中定义。若是你在Linux 或
Mac OS X 中使用bash,那么能够按照下面的方式设定这两个变量:
(venv) $ export MAIL_USERNAME=<Gmail username>
(venv) $ export MAIL_PASSWORD=<Gmail password>
微软Windows 用户可按照下面的方式设定环境变量:
(venv) $ set MAIL_USERNAME=<Gmail username>
(venv) $ set MAIL_PASSWORD=<Gmail password>
我是windows用户,因此选取第二个选项
这里的1号大坑:设置的时候,要把<>去掉,而且!!你的邮箱名和密码,都要用引号括起来,也就是字符串!!!
后续更新!!!重要更新!!!
在cmd下面,设置环境变量的时候,不须要引号,在powershell下面设置的时候,须要引号!!!
这里的2号大坑:set这个设置环境变量的方法,是在cmd里面的!!我用的是powershell!!他的语句应该是
$env:MAIL_USERNAME='xxxxx@126.com'
$env:MAIL_PASSWORD='这里输密码'
补一下基础知识!
由于在cmd里面,查看全部环境变量的命令是set
而在powershell里面,查看环境变量的命令是ls env: 而设置的方法是 $env: name='variable' 这里的name是添加的变量名字,后面的variable则是变量内容
这里转载一篇其余前辈的博客,予以参考!! http://blog.sina.com.cn/s/blog_bfc35a260102vv88.html
若是你按照cmd里面的设置环境变量的方法set,那么,你就会碰到受权错误553或者550的信息,以下
发送邮件的代码以下:
(venv) $ python hello.py shell
>>> from flask.ext.mail import Message
>>> from hello import mail
>>> msg = Message('test subject', sender='you@example.com',
... recipients=['you@example.com'])
>>> msg.body = 'text body'
>>> msg.html = '<b>HTML</b> body'
>>> with app.app_context():
... mail.send(msg)
... #进行到这里没有报错的话,那就是ok了!!
咱们来看一下测试结果
而后咱们最后补一下关于cmd下还有powershell下面的环境变量区别
在powershell下面,你须要用ls env:的命令,才能显示参数
而设置方法,则是$env :
在windows下,在PyCharm的Terminal中设置环境变量,不行!!后来,在cmd命令下设置,关闭当前窗口后,就会失效,最关键的问题是在pycharm中没法获取,因此解决方法有两种
第一种:在个人电脑-右键-属性-高级系统设置-环境变量,将MAIL_USERNAME等设置
第二种:直接在pycharm中设置,设置后重启pycharm
参考
https://blog.csdn.net/u013753393/article/details/53401717
https://blog.csdn.net/werewolf_st/article/details/46805429
https://www.oschina.net/translate/the-flask-mega-tutorial-part-xi-email-support?lang=chs&page=1#