码迷,mamicode.com
首页 > 其他好文 > 详细

Flask学习之十一 邮件支持

时间:2015-02-08 18:10:47      阅读:318      评论:0      收藏:0      [点我收藏+]

标签:

英文博客地址:blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-xi-email-support

中文翻译地址:http://www.pythondoc.com/flask-mega-tutorial/email.html

开源中国社区:http://www.oschina.net/translate/the-flask-mega-tutorial-part-xi-email-support

 

对于我们这个应用,我们可能想要有这样的功能,当有一个新的关注者的时候,发一封邮件给用户。

幸运地,Flask 已经存在处理邮件的扩展,尽管不是 100% 支持我们想要的功能,但是已经很好了。

在前面我们就已经安装了Flask-Mail,安装命令为:

flask/bin/pip install flask-mail

 

 

一、配置

需要设置两个方面的内容:

  • 邮件服务器信息
  • 用户邮箱地址
# email server
MAIL_SERVER = your.mailserver.com
MAIL_PORT = 25
MAIL_USERNAME = None
MAIL_PASSWORD = None

# administrator list
ADMINS = [you@example.com]

上面是之前的代码,其中并没有设置切实可用的邮件服务器和邮箱。现在我们通过一个例子来看如何使用gmail邮箱账户来发送邮件:

# email server
MAIL_SERVER = smtp.googlemail.com
MAIL_PORT = 465
MAIL_USE_TLS = False
MAIL_USE_SSL = True
MAIL_USERNAME = os.environ.get(MAIL_USERNAME)
MAIL_PASSWORD = os.environ.get(MAIL_PASSWORD)

# administrator list
ADMINS = [your-gmail-username@gmail.com]

 Note: We are not going to enhance the server setup to allow those that require an encrypted communication through TLS or SSL.

(大概意思应该是:我们不会提高服务器设置,让那些需要加密通信的通过TLS或者SSL)

上面的代码是要求把用户名和密码写到环境变量中,再从环境变量中读取,这样会比较安全。不过我暂时不会怎么把信息写入环境变量,所以暂时还是直接写入源码了:

# email server
MAIL_SERVER = smtp.googlemail.com
MAIL_PORT = 465
MAIL_USE_TLS = False
MAIL_USE_SSL = True
MAIL_USERNAME = your-gmail-username
MAIL_PASSWORD = your-gmail-password

# administrator list
ADMINS = [your-gmail-username@gmail.com]

我们也需要初始化一个 Mail 对象,这个对象为我们连接到 SMTP 服务器并且发送邮件(文件 app/__init__.py):

from flask.ext.mail import Mail
mail = Mail(app)

 

然后试一下发邮件:

>>> from flask.ext.mail import Message
>>> from app import app, mail
>>> from config import ADMINS
>>> msg = Message(‘test subject‘, sender=ADMINS[0], recipients=ADMINS)
>>> msg.body = ‘text body‘
>>> msg.html = ‘<b>HTML</b> body‘
>>> with app.app_context():
...     mail.send(msg)
....

然后发现忧桑地被墙了,暂时找不到解决办法,错误代码:

socket.error: [Errno 101] Network is unreachable

使用gmail不成功我就改QQ邮箱试一下了。

# mail server settings
MAIL_SERVER = smtp.qq.com
MAIL_PORT = 587
MAIL_USE_TLS = True
MAIL_USE_SSL = False
MAIL_USERNAME = your-gmail-username
MAIL_PASSWORD = your-gmail-password
# administrator list
ADMINS = [your-gmail-username@qq.com]

改成QQ邮箱出现错误:

raise SMTPAuthenticationError(code, resp)
smtplib.SMTPAuthenticationError: (454, ‘Authentication failed, please open smtp flag first!‘)

原因是我没有开启POP3/SMTP服务

解决方法:在QQ邮箱的设置里面,找到账户-》POP3/IMAP/SMTP选择开启POP3/SMTP服务

smtplib.SMTPAuthenticationError: (535, ‘Authentication failed‘)

 上面的错误是说我验证失败了,因为我刚才开启了POP3/SMTP服务,需要有一个独立密码,而我一开始用的是我的QQ密码。

改正了密码之后就可以了。

备注:因为我不断在修改配置文件,所以我就把命令行的代码直接放到一个test.py文件里面了:

#!flask/bin/python
from flask.ext.mail import Message
from app import app, mail
from config import ADMINS
msg = Message(test subject, sender=ADMINS[0], recipients=ADMINS)
msg.body = text body
msg.html = <b>HTML</b> body
with app.app_context():
    mail.send(msg)

 

Flask学习之十一 邮件支持

标签:

原文地址:http://www.cnblogs.com/AminHuang/p/4280242.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!