用python发送电子邮件验证这个功能,可以说花费了我很久时间,这也是为什么我重头敲了之前的两遍代码。不要说我傻,仅仅是笨了一点而已 ^.- 。
之前我所参考是如何发送 GMail. 但是我并不想这么干,谁叫天朝居然把goole都给墙了.....$.$,虽然我有VPN,但是,我还是好好忍住了。
我用的是flask-email:
其中对邮箱的一些配置信息:
MAIL_SERVER = "smtp.qq.com"
MAIL_PORT = 25
# MAIL_USE_TLS = True
# MAIL_USE_SSL = True
MAIL_USERNAME = '1164258202@qq.com'
MAIL_PASSWORD = 'password'
看到配置中你会发现我有两个地方注释了:
Q:那么这个TLS和SSL是干什么的?
A:其实小C也不知道啦,主要用于web的安全传输协议,基本原理:先非对称加密传递对称加密所要用的钥匙,然后双方用该钥匙对称加密和解密往来的数据。百度到这个,还有这个,你就会know more了。
反正当我开启SSL的时候,我的邮件就发送失败:
SSLError: [Errno 1] _ssl.c:507: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
说不知道这个协议。好把,那我只能把你给关了。但支持TLS协议,你可以开启它
MAIL_PASSWORD = 'password' // 对于这个我当时也是不解。为什么密码不是qq邮箱的密码,而是这个:
就是上面这个二货了。 but,你要设置这个密码,前提你要在邮箱中开启这个POP3/SMTP服务
然后就是发送你的邮件操作了。
from threading import Thread
from flask import current_app, render_template
from flask.ext.mail import Message
from . import mail
def send_async_email(app, msg):
with app.app_context():
mail.send(msg) def send_email(to, subject, template, **kwargs):
app = current_app._get_current_object()
msg = Message(app.config['FLASKY_MAIL_SUBJECT_PREFIX'] + ' ' + subject,
sender=app.config['FLASKY_MAIL_SENDER'], recipients=[to])
msg.body = render_template(template + '.txt', **kwargs)
msg.html = render_template(template + '.html', **kwargs)
thr = Thread(target=send_async_email, args=[app, msg])
thr.start()
return thr
最后就是发邮件操作了:
send_email(current_user.email,'Confirm Your Account', 'auth/email/confirm',user= current_user,token = token)
当然还有些细节我就不在这里说了,我卡住的地方就是邮件的相关配置问题,毕竟我是小C(python 业余爱好者),哈哈。