(原创)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">&times;</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邮箱已经收到了邮件:

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

原文发布于微信公众号 - 七夜安全博客(qiye_safe)

原文发表时间:2016-03-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏腾讯云Elasticsearch Service

一文快速上手Logstash

Elasticsearch是当前主流的分布式大数据存储和搜索引擎,可以为用户提供强大的全文本检索能力,广泛应用于日志检索,全站搜索等领域。Logstash作为E...

3.5K9
来自专栏行者常至

idea Java 代码编写规范

390
来自专栏专业duilib使用+业余界面开发

duilib将资源文件压缩成zip并打包到exe的资源中

1733
来自专栏智能计算时代

Envoy架构概览(7):断路,全局限速和TLS

断路 断路是分布式系统的关键组成部分。快速失败并尽快收回下游施加压力几乎总是好的。 Envoy网格的主要优点之一是,Envoy在网络级别强制实现断路限制,而不必...

3016
来自专栏青玉伏案

iOS逆向工程之App脱壳

本篇博客以微信为例,给微信脱壳。"砸壳"在iOS逆向工程中是经常做的一件事情,,因为从AppStore直接下载安装的App是加壳的,其实就是经过加密的,这个“砸...

3185
来自专栏张戈的专栏

nginx配置文件参数详解

这年头原创技术博文真心难写,不可能每天都有灵感,也不可能每天都出问题。而且技术教程也非常全面,不管是百度一下,你就知道,还是谷歌一把,你就找到,基本要啥有啥,只...

3186
来自专栏Python攻城狮

itchat库初探--微信好友全头像的拼接

如果安装python的时候pip安装选项没打√ ,就先安装pip。 Python和pip的安装

612
来自专栏我的技术笔记

面向开发者的Cloud Foundry

Cloud Foundry是一个流行的开源PaaS(Platform as a Service 平台即服务)云平台。Cloud Foundry可以用在你自己部...

2195
来自专栏CodingToDie

使用Vue完成前后端分离开发Spring,Django,Flask(一)

本篇题为 使用Vue,Spring Boot,Flask,Django 完成Vue前后端分离开发 将通过一个项目整合(一前端项目对应三个后端项目),完成一个简单...

2542
来自专栏张善友的专栏

Office Web Apps

Office Web Apps 将为 Word、Excel、PowerPoint 乃至 OneNote 的桌面版本提供基于 Web 的版本。当然,在 Web 上...

22310

扫码关注云+社区