这段时间一直在学习flask框架,看到flask扩展中有一个mail插件,所以今天就给大家演示如果发邮件。

首先我注册了一个163邮箱,需要开启smtp功能,因为咱们python发送邮件经过的是smtp.163.com(网易的电子邮件服务器)。

注册好163邮箱,然后开启smtp功能,如下图所示:

开启的过程中需要绑定手机。

我最终实现的样子是这样的:

使用flask搭建了一个web服务器,然后做了一个网页,将收件人,主题,正文填好之后,点击发送,上面会显示发送结果。

下面是整个工程的结构:

templates是存放了两个html文件,pyMail实现所有的功能。接下来我列一下源代码,然后将发送部分的核心代码进行讲解。

  1. base.html
  2. {% extends "bootstrap/base.html" %}
  3.  
  4. {% block title %}Flasky {% endblock %}
  5.  
  6. {% block navbar %}
  7. <div class="navbar navbar-inverse" role="navigation">
  8. <div class="container">
  9. <div class="navbar-header">
  10. <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
  11. <span class="sr-only">Toggle navigation</span>
  12. <span class="icon-bar"></span>
  13. <span class="icon-bar"></span>
  14. <span class="icon-bar"></span>
  15. </button>
  16. <a class="navbar-brand" href="/">七夜</a>
  17. </div>
  18. <div class="navbar-collapse collapse">
  19. <ul class="nav navbar-nav">
  20. <li><a href="http://blog.csdn.net/qiye_/">CSDN博客</a></li>
  21. <li><a href="http://www.cnblogs.com/qiyeboy/">博客园</a></li>
  22. <li><a href="/">公众号:qiye_python</a></li>
  23. </ul>
  24. </div>
  25. </div>
  26. </div>
  27. {% endblock %}
  28.  
  29. {% block content %}
  30.  
  31. <div class="container">
  32. {% for message in get_flashed_messages() %}
  33. <div class="alert alert-warning">
  34. <button type="button" class="close" data-dismiss="alert">×</button>
  35. {{ message }}
  36. </div>
  37. {% endfor %}
  38.  
  39. {% block page_content %}{% endblock %}
  40. </div>
  41.  
  42. {% endblock %}

  

  1. index.html

  2. {% extends "base.html" %}
  3. {% import "bootstrap/wtf.html" as wtf %}
  4.  
  5. {% block title %}首页 {% endblock %}
  6.  
  7. {% block page_content %}
  8.  
  9. <div class="page-header">
  10. {% if name %}
  11. <h1> Hello,{{ name }}! </h1>
  12. {% else %}
  13. <h1>Hello,Stranger!</h1>
  14. {% endif %}
  15. </div>
  16.  
  17. {{ wtf.quick_form(form) }}
  18.  
  19. {% endblock %}
  1. pyMail.py:
  2.  
  3. #coding:utf-8
  4. from flask import Flask,render_template,session,url_for,redirect,flash
  5. from flask.ext.mail import Mail, Message
  6. from flask.ext.moment import Moment
  7. from flask.ext.wtf import Form
  8. from flask.ext.bootstrap import Bootstrap
  9. from wtforms import StringField,SubmitField, TextAreaField
  10. from wtforms.validators import Required, Email
  11.  
  12. import sys
  13. reload(sys)
  14. sys.setdefaultencoding('utf8')#设置系统默认编码为utf-8
  15.  
  16. '''
  17. 这个类描述了网页上的结构
  18. '''
  19. class MailForm(Form):
  20. receiver = StringField('收件人:',validators=[Required(),Email()])
  21. style = StringField('主题:',validators=[Required()])
  22. body = TextAreaField('正文:',validators=[Required()])
  23. submit = SubmitField('发送')
  24.  
  25. app = Flask(__name__)
  26. app.config['SECRET_KEY'] = 'qiyeboy'
  27. #下面是SMTP服务器配置
  28. app.config['MAIL_SERVER'] = 'smtp.163.com' #电子邮件服务器的主机名或IP地址
  29. app.config['MAIL_PORT'] = '25' #电子邮件服务器的端口
  30. app.config['MAIL_USE_TLS'] = True #启用传输层安全
  31. app.config['MAIL_USERNAME'] ='xxxxxx@163.com' #os.environ.get('MAIL_USERNAME') #邮件账户用户名
  32. app.config['MAIL_PASSWORD'] = 'your password'#os.environ.get('MAIL_PASSWORD') #邮件账户的密码
  33.  
  34. mail = Mail(app)
  35. bootstrap = Bootstrap(app)#进行网页渲染
  36. moment = Moment(app)#时间
  37.  
  38. @app.route('/',methods=['GET','POST'])
  39. def index():
  40. '''
  41. flask中的路由
  42. :return:
  43. '''
  44. mailForm = MailForm()#表单
  45. if mailForm.validate_on_submit():#表单提交成功的判断
  46. try:
  47. receiverName = mailForm.receiver.data #收件人文本框的内容
  48. styledata = mailForm.style.data#主题文本框的内容
  49. bodydata = mailForm.body.data#正文文本框的内容
  50. msg = Message(styledata,sender='xxxxxx@163.com',recipients=[receiverName])#发件人,收件人
  51. msg.body = bodydata
  52. mail.send(msg)
  53. flash('邮件发送成功!')#提示信息
  54. except:
  55. flash('邮件发送失败!')
  56.  
  57. return render_template('index.html',form=mailForm,name ='xxxxxx@163.com' )#渲染网页
  58.  
  59. if __name__ == '__main__':
  60. app.run(debug=True)

  

  1. 我将代码中我的邮箱和密码都隐藏了,如果大家要试验的话,请换成自己的邮箱和密码,记住这个密码不是登录密码,而是开启smtp时输入的管理密码。
    mail核心代码:
    1.首先配置smtp服务器:
  1. #下面是SMTP服务器配置
  2.  
  3. app.config['MAIL_SERVER'] = 'smtp.163.com' #电子邮件服务器的主机名或IP地址
    app.config['MAIL_PORT'] = '25' #电子邮件服务器的端口
    app.config['MAIL_USE_TLS'] = True #启用传输层安全
    app.config['MAIL_USERNAME'] ='xxxxxx@163.com' #os.environ.get('MAIL_USERNAME') #邮件账户用户名
    app.config['MAIL_PASSWORD'] = 'xxxxxx'#os.environ.get('MAIL_PASSWORD') #邮件账户的密码

2.发送邮件:

  1. msg = Message(styledata,sender='xxxxxx@163.com',recipients=[receiverName])#发件人,收件人
    msg.body = bodydata
    mail.send(msg)

填好发件人,收件人,主题,正文,然后发送就OK了。

最后给大家看一下发送的演示图:

这时候我的qq邮箱已经收到了邮件:

今天的分享就到这里,七夜音乐台的开发正在进行中,敬请期待,记得打赏呦。

欢迎大家支持我的公众号:

(原创)python发送邮件的更多相关文章

  1. python发送邮件

    python发送邮件(无附件) ======================================================= #!/usr/bin/env python#coding ...

  2. python发送邮件及附件

    今天给大伙说说python发送邮件,官方的多余的话自己去百度好了,还有一大堆文档说实话不到万不得已的时候一般人都不会去看,回归主题: 本人是mac如果没有按照依赖模块的请按照下面的截图安装 导入模块如 ...

  3. python 发送邮件实例

    留言板回复作者邮件提醒 -----------2016-5-11 15:03:58-- source:python发送邮件实例

  4. 解读Python发送邮件

    解读Python发送邮件 Python发送邮件需要smtplib和email两个模块.也正是由于我们在实际工作中可以导入这些模块,才使得处理工作中的任务变得更加的简单.今天,就来好好学习一下使用Pyt ...

  5. python 发送邮件例子

    想到用python发送邮件 主要是服务器 有时候会产生coredump文件  ,然后因为脚本重启原因,服务器coredump产生后会重启 但是没有主动通知开发人员 想了下可以写个脚本一旦产生cored ...

  6. 利用python发送邮件

    找了很多使用python发送邮件的文章, 发现写的并不是太全, 导致坑特别多, 刚把这个坑跨过去, 在此记录下来 本代码使用163作为发送客户端, 接收邮箱随意 首先登录163邮箱, 开启POP3/S ...

  7. 用Python发送邮件

    文件:send.py # -*- coding:utf-8 -*- # ## 任兴测试用Python发送邮件 import os import sys import getopt import tim ...

  8. ETL过程跑完后,使用python发送邮件

    目标库中,如果有行数为0的表,使用python发送邮件 # -*- coding:utf-8 -*- # Author: zjc # Description:send monitor info to ...

  9. 【转】【Python】Python发送邮件(常见四种邮件内容)

    在写脚本时,放到后台运行,想知道执行情况,会通过邮件.SMS(短信).飞信.微信等方式通知管理员,用的最多的是邮件.在linux下,Shell脚本发送邮件告警是件很简单的事,有现成的邮件服务软件或者调 ...

随机推荐

  1. Go testing 库 testing.T 和 testing.B 简介

    testing.T 判定失败接口 Fail 失败继续 FailNow 失败终止 打印信息接口 Log 数据流 (cout 类似) Logf format (printf 类似) SkipNow 跳过当 ...

  2. Vue 子组件调用父组件 $emit

    <!DOCTYPE html><html>    <head>        <meta charset="utf-8">      ...

  3. 网络测量中基于Sketch方法的调查

    目录 LD Sketch SeqHash What's New reversible sketch Count-Sketch和Count-min sketch Diamond Sketch: Accu ...

  4. 串行通讯协议--起止式异步通讯协议(UART)

    起止式异步通讯协议: 特点与格式: 起止式异步协议的特点是一个字符一个字符传输,并且传送一个字符总是以起始位开始,以停止位结束,字符之间没有固定的时间间隔要求.其格式如图3 所示.每一个字符的前面都有 ...

  5. HTML5与CSS3网页设计

    <!--一个网页的基本结构写法--> <!doctype html> <html> <head>//头部 <title>标题</tit ...

  6. .net core API 使用swagger

    第一种方法:直接添加swagger,会在app_start中生成SwaggerConfig,在该文件中配置相关内容(把生成xml打开): 第二种方法:添加四个引用文件Swashbuckle.AspNe ...

  7. 接入Gobelieve IM开发平台的DEMO代码

    接入Gobelieve IM开发平台的DEMO代码, 请求头部: Authorization: Basic $base64(appid:$hex_md5(appsecret))意思是 appsecre ...

  8. linux、SMART、Shell的学习

    Linux指令 useradd 添加用户 添加用户 -d 添加用户路径 -e 制定密码有效时间 -G -g 指定用户所属组 -c 指定一段用户描述 -s Shell文件指定用户的登录Shell -u ...

  9. 解决placeholder对ie9及以下的不兼容

    具体的看代码,都写在注释里了,欢迎讨论 <script> $(function () { /* *页面加载立刻执行 *@method:each遍历每个包含placeholder属性的对象( ...

  10. .net下redis和rabbitmq简单使用demo

    是参考 一下两篇博文整理了下. Redis:   https://www.cnblogs.com/5ishare/p/6492380.html RabbitMq:   https://www.cnbl ...