瓶中电子邮件的使用

  

很多网络应用需要在诸如用户注册,密码找回等过程中,进行用户身份的有效性认证。采用电子邮箱进行确认是一种常用的方式.Python标准库smtplib可以实现发送电子邮件的功能,瓶框架的Flask-mail包装了smtplib库,扩展了对电子邮件发送的支持。

0 x01安装Flask-mail

可以采用脉冲安装Flask-mail:

pip  install  flask-mail1

0 x02初始化配置

创建电子邮件的蓝本(<代码>应用程序/__init__。py> 得到app.email  import  email  as  blueprint_email   app.register_blueprint (blueprint_email url_prefix=& # 39;/电子邮件# 39;)12

在初始化文件中导入邮件对象:

得到flask_mail  import 邮件   邮件=邮件(app)

Flask-mail可以连接SMTP服务器,并把邮件利用这个服务器发送出去.Flask-mail需要进行参数配置,常见参数如下:

序号参数默认值说明1 mail_serverlocalhostsmtp服务器主机或者IP地址2 mail_port25电子邮件服务器端口3 mail_use_tlsfalse是否启用传输层安全协议(TLS) 4 mail_use_sslfalse是否启用安全套接层协议(SSL) 5 mail_usernamenone电子邮箱账号用户名6 mail_passwordnone电子邮箱账号密码7 mail_debugfalse是否启动调试

在<代码>配置。py> #邮件配置   MAIL_SERVER=& # 39; smtp.126.com& # 39;   MAIL_PORT=25 mail_use_tls=True   MAIL_USERNAME=& # 39; * * * @126.com& # 39;   MAIL_PASSWORD=& # 39; * * * * * * & # 39;   MAIL_DEBUG=True1234567

0 x03发送邮件

完成初始化后,创建一个消息实例,包含需要发送邮件的信息(文件<代码>/app/电子邮件/观点。py )。

#编码:utf - 8   得到flask  import  render_template current_app   得到app.email  import 电子邮件   得到flask_mail  import  message.route(& # 39;/发送/& lt;字符串:content> & # 39;,方法=[& # 39;文章# 39;& # 39;得到# 39;])   def  sendmail(内容):   ,,,#发送邮件   ,,,味精=消息(u # 39;邮件主题& # 39;,发送方=& # 39;* * * @126.com& # 39;,接受者=[& # 39;* * * @qq.com& # 39;])   ,,,msg.body=u # 39;邮件内容& # 39;   ,,,msg.html=u # 39; & lt; h4>邮件html: {0} & lt;/h4> & # 39; .format(内容),,,,   ,,,,   ,,,#获取当前应用对象   ,,,应用=current_app._get_current_object (),,,   ,,,,   ,,,with  app.app_context ():,,,,,,,,   ,,,,,,,得到app  import 邮件   ,,,,,,,mail.send(味精),,,,   ,,,return  & # 39;发送# 39;

其中,发送方是邮件的发送者、接受者包含了全部收件者的邮箱地址列表。

0 x04改进发送过程

我们可以发现,在发送邮件的过程中,会出现程序停滞现象,浏览器也会出现等待,为了避免这个问题,可以采用异步方式来发送邮件。封装邮件发送函数,并启动子线程来发送邮件(文件<代码>/app/电子邮件/sendMail。py> #编码:utf - 8   得到flask_mail  import 消息   得到flask  import  render_template current_app   得到threading  import 线程      #发送邮箱的子线程类   class  SendMailThread(线程):   ,,,def  __init__(自我,应用,味精):   ,,,,,,,超级(SendMailThread,自我). __init__ ()   ,,,,,,,self.__app=应用   ,,,,,,,self.__msg=msg ,,, #异步发送邮件   ,,,def  send_asyc_mail(自我,应用,味精):   ,,,,,,,with  app.app_context ():,,,,,,,,,,,,   ,,,,,,,,,,,得到app  import 邮件   ,,,,,,,,,,,mail.send(味精),,,,   ,,def 运行(自我):   ,,,,,,,#发送邮件   ,,,,,,self.send_asyc_mail (self.__app self.__msg),   ,,,,,,   ,,,,,,   #封装邮件发送过程   #,参数:   ,,#,,主题:邮件主题   ,,#,,recv:收件邮箱地址   ,,#,,模板:邮件内容的模板   ,,#,,千瓦:模板参数键值对列的表   def  send_mail(主题、recv模板,* *千瓦):   ,,,,味精=消息(主题、发件人=& # 39;* * * @126.com& # 39;,接受者=recv)   ,,,,msg.body=u # 39;邮件内容& # 39;   ,,,,msg.html=render_template(模板,* *千瓦),,,,#,获取当前应用对象   ,,,,应用=current_app._get_current_object(),,,,,, #,子线程发送   ,,,,发送=SendMailThread (app,味精)   ,,,,send.start ()

在<代码>/app/电子邮件/观点。py> import  sendMail   #异步发送邮件   .route (& # 39;/asyc_send & # 39;,方法=[& # 39;文章# 39;& # 39;得到# 39;])   def  sendAsycMail ():   ,,,主题=u # 39;异步发送邮件测试& # 39;   ,,,rec=[& # 39; * * * @qq.com& # 39;】   ,,,tp=& # 39;电子邮件/send.html& # 39;   ,,,测试=& # 39;测试# 39;   ,,,#异步发送邮件   null   null

瓶中电子邮件的使用