(原创)python发送邮件
这段时间一直在学习flask框架,看到flask扩展中有一个mail插件,所以今天就给大家演示如果发邮件。
首先我注册了一个163邮箱,需要开启smtp功能,因为咱们python发送邮件经过的是smtp.163.com(网易的电子邮件服务器)。
注册好163邮箱,然后开启smtp功能,如下图所示:
开启的过程中需要绑定手机。
我最终实现的样子是这样的:
使用flask搭建了一个web服务器,然后做了一个网页,将收件人,主题,正文填好之后,点击发送,上面会显示发送结果。
下面是整个工程的结构:
templates是存放了两个html文件,pyMail实现所有的功能。接下来我列一下源代码,然后将发送部分的核心代码进行讲解。
- base.html:
- {% extends "bootstrap/base.html" %}
- {% block title %}Flasky {% endblock %}
- {% block navbar %}
- <div class="navbar navbar-inverse" role="navigation">
- <div class="container">
- <div class="navbar-header">
- <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
- <span class="sr-only">Toggle navigation</span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- </button>
- <a class="navbar-brand" href="/">七夜</a>
- </div>
- <div class="navbar-collapse collapse">
- <ul class="nav navbar-nav">
- <li><a href="http://blog.csdn.net/qiye_/">CSDN博客</a></li>
- <li><a href="http://www.cnblogs.com/qiyeboy/">博客园</a></li>
- <li><a href="/">公众号:qiye_python</a></li>
- </ul>
- </div>
- </div>
- </div>
- {% endblock %}
- {% block content %}
- <div class="container">
- {% for message in get_flashed_messages() %}
- <div class="alert alert-warning">
- <button type="button" class="close" data-dismiss="alert">×</button>
- {{ message }}
- </div>
- {% endfor %}
- {% block page_content %}{% endblock %}
- </div>
- {% endblock %}
- index.html:
- {% extends "base.html" %}
- {% import "bootstrap/wtf.html" as wtf %}
- {% block title %}首页 {% endblock %}
- {% block page_content %}
- <div class="page-header">
- {% if name %}
- <h1> Hello,{{ name }}! </h1>
- {% else %}
- <h1>Hello,Stranger!</h1>
- {% endif %}
- </div>
- {{ wtf.quick_form(form) }}
- {% endblock %}
- pyMail.py:
- #coding:utf-8
- from flask import Flask,render_template,session,url_for,redirect,flash
- from flask.ext.mail import Mail, Message
- from flask.ext.moment import Moment
- from flask.ext.wtf import Form
- from flask.ext.bootstrap import Bootstrap
- from wtforms import StringField,SubmitField, TextAreaField
- from wtforms.validators import Required, Email
- import sys
- reload(sys)
- sys.setdefaultencoding('utf8')#设置系统默认编码为utf-8
- '''
- 这个类描述了网页上的结构
- '''
- class MailForm(Form):
- receiver = StringField('收件人:',validators=[Required(),Email()])
- style = StringField('主题:',validators=[Required()])
- body = TextAreaField('正文:',validators=[Required()])
- submit = SubmitField('发送')
- app = Flask(__name__)
- app.config['SECRET_KEY'] = 'qiyeboy'
- #下面是SMTP服务器配置
- 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'] = 'your password'#os.environ.get('MAIL_PASSWORD') #邮件账户的密码
- mail = Mail(app)
- bootstrap = Bootstrap(app)#进行网页渲染
- moment = Moment(app)#时间
- @app.route('/',methods=['GET','POST'])
- def index():
- '''
- flask中的路由
- :return:
- '''
- mailForm = MailForm()#表单
- if mailForm.validate_on_submit():#表单提交成功的判断
- try:
- receiverName = mailForm.receiver.data #收件人文本框的内容
- styledata = mailForm.style.data#主题文本框的内容
- bodydata = mailForm.body.data#正文文本框的内容
- msg = Message(styledata,sender='xxxxxx@163.com',recipients=[receiverName])#发件人,收件人
- msg.body = bodydata
- mail.send(msg)
- flash('邮件发送成功!')#提示信息
- except:
- flash('邮件发送失败!')
- return render_template('index.html',form=mailForm,name ='xxxxxx@163.com' )#渲染网页
- if __name__ == '__main__':
- app.run(debug=True)
- 我将代码中我的邮箱和密码都隐藏了,如果大家要试验的话,请换成自己的邮箱和密码,记住这个密码不是登录密码,而是开启smtp时输入的管理密码。
mail核心代码:
1.首先配置smtp服务器:
- #下面是SMTP服务器配置
- 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.发送邮件:
- msg = Message(styledata,sender='xxxxxx@163.com',recipients=[receiverName])#发件人,收件人
msg.body = bodydata
mail.send(msg)
填好发件人,收件人,主题,正文,然后发送就OK了。
最后给大家看一下发送的演示图:
这时候我的qq邮箱已经收到了邮件:
今天的分享就到这里,七夜音乐台的开发正在进行中,敬请期待,记得打赏呦。
欢迎大家支持我的公众号:
(原创)python发送邮件的更多相关文章
- python发送邮件
python发送邮件(无附件) ======================================================= #!/usr/bin/env python#coding ...
- python发送邮件及附件
今天给大伙说说python发送邮件,官方的多余的话自己去百度好了,还有一大堆文档说实话不到万不得已的时候一般人都不会去看,回归主题: 本人是mac如果没有按照依赖模块的请按照下面的截图安装 导入模块如 ...
- python 发送邮件实例
留言板回复作者邮件提醒 -----------2016-5-11 15:03:58-- source:python发送邮件实例
- 解读Python发送邮件
解读Python发送邮件 Python发送邮件需要smtplib和email两个模块.也正是由于我们在实际工作中可以导入这些模块,才使得处理工作中的任务变得更加的简单.今天,就来好好学习一下使用Pyt ...
- python 发送邮件例子
想到用python发送邮件 主要是服务器 有时候会产生coredump文件 ,然后因为脚本重启原因,服务器coredump产生后会重启 但是没有主动通知开发人员 想了下可以写个脚本一旦产生cored ...
- 利用python发送邮件
找了很多使用python发送邮件的文章, 发现写的并不是太全, 导致坑特别多, 刚把这个坑跨过去, 在此记录下来 本代码使用163作为发送客户端, 接收邮箱随意 首先登录163邮箱, 开启POP3/S ...
- 用Python发送邮件
文件:send.py # -*- coding:utf-8 -*- # ## 任兴测试用Python发送邮件 import os import sys import getopt import tim ...
- ETL过程跑完后,使用python发送邮件
目标库中,如果有行数为0的表,使用python发送邮件 # -*- coding:utf-8 -*- # Author: zjc # Description:send monitor info to ...
- 【转】【Python】Python发送邮件(常见四种邮件内容)
在写脚本时,放到后台运行,想知道执行情况,会通过邮件.SMS(短信).飞信.微信等方式通知管理员,用的最多的是邮件.在linux下,Shell脚本发送邮件告警是件很简单的事,有现成的邮件服务软件或者调 ...
随机推荐
- Go testing 库 testing.T 和 testing.B 简介
testing.T 判定失败接口 Fail 失败继续 FailNow 失败终止 打印信息接口 Log 数据流 (cout 类似) Logf format (printf 类似) SkipNow 跳过当 ...
- Vue 子组件调用父组件 $emit
<!DOCTYPE html><html> <head> <meta charset="utf-8"> ...
- 网络测量中基于Sketch方法的调查
目录 LD Sketch SeqHash What's New reversible sketch Count-Sketch和Count-min sketch Diamond Sketch: Accu ...
- 串行通讯协议--起止式异步通讯协议(UART)
起止式异步通讯协议: 特点与格式: 起止式异步协议的特点是一个字符一个字符传输,并且传送一个字符总是以起始位开始,以停止位结束,字符之间没有固定的时间间隔要求.其格式如图3 所示.每一个字符的前面都有 ...
- HTML5与CSS3网页设计
<!--一个网页的基本结构写法--> <!doctype html> <html> <head>//头部 <title>标题</tit ...
- .net core API 使用swagger
第一种方法:直接添加swagger,会在app_start中生成SwaggerConfig,在该文件中配置相关内容(把生成xml打开): 第二种方法:添加四个引用文件Swashbuckle.AspNe ...
- 接入Gobelieve IM开发平台的DEMO代码
接入Gobelieve IM开发平台的DEMO代码, 请求头部: Authorization: Basic $base64(appid:$hex_md5(appsecret))意思是 appsecre ...
- linux、SMART、Shell的学习
Linux指令 useradd 添加用户 添加用户 -d 添加用户路径 -e 制定密码有效时间 -G -g 指定用户所属组 -c 指定一段用户描述 -s Shell文件指定用户的登录Shell -u ...
- 解决placeholder对ie9及以下的不兼容
具体的看代码,都写在注释里了,欢迎讨论 <script> $(function () { /* *页面加载立刻执行 *@method:each遍历每个包含placeholder属性的对象( ...
- .net下redis和rabbitmq简单使用demo
是参考 一下两篇博文整理了下. Redis: https://www.cnblogs.com/5ishare/p/6492380.html RabbitMq: https://www.cnbl ...