前言: 快两个月没写博客了, 原因是懒了, 没有最初写博客那种看到阅读量上涨, 别人给自己文章点赞后的开心. 心态也发生了不少变化. 有机会再来写写. 前两个月我去厦门某公司实习, 本着去厦门玩一玩还有先了解下公司情况, 11月底就去厦门了. 这两个月最大的变化是我自己变得更会玩了, 蛮开心的. 公司2月13号才放假员工过春节, 我就先请假回家了, 2月9号就到家了. 这几天在家除了吃和睡, 也随便看看flask, 感觉flask真的是很简单呀. 我看的是下面这本书, 我才看一两天, 书写得很好, 当然有一很坑. 接下来我会写一些文章来总结我学flask的过程, 因为我已经大致学过django了, flask与django大致是一样的, 所以我只挑我感得有意思有坑的写, 建议小白还是看书学比较系统.

一、功能讲解

因为是初学flask, 讲一下我现在的小项目的功能.当你访问网址时(请忽略192.168.90.63:30102), 这是我用公司内部镜像暴露端口出来给我访问的. 你没有VPN, 也是访问不了的. 你访问这个界面时, 你被当成了陌生人, 被要求输入名字.

OK, 接下来我输入zcl, 点击提交按钮后, 出现如下图. 显示(Happy to see you again), 这是因为点击提交按钮后会把你的名字存到数据库, zcl用户之前已经存到数据库了, 当你再次输入zcl时, 出显示Happy to see you again.

那如果我输入一个数据库中不存在的用户, 会发生什么情况呢? 比如我输入big SB

下面是代码, 看不懂也没关系. 我来讲, 当你输入big SB, 再点击提交, 后台会根据用户名big SB去数据库查这个用户. 很显然, 查不到, 所以下面的第5行代码user为None。既然数据库中没有big SB这个用户, 那就来创建这个用户, 再保存到数据库中呗.

但我还不满足, 我还想实现一个发邮件的功能. 比如项目的管理员用户是:zcl, 当有新用户产生(类似big SB用户)时, 会必送一个邮件给zcl用户. 在这实践过程中, 发现这功能有坑, 故下面详细讲下flask发邮件这个功能

@app.route('/', methods=['GET', 'POST'])
def index():
form = NameForm()
if form.validate_on_submit():
user = User.query.filter_by(username=form.name.data).first()
if user is None:
user = User(username=form.name.data)
db.session.add(user)
db.session.commit()
session['known'] = False
if app.config['FLASKY_ADMIN']:
send_email(app.config['FLASKY_ADMIN'], 'New User', 'mail/new_user', user=user)
else:
session['known'] = True
session['name'] = form.name.data
return redirect(url_for('index'))
return render_template('index.html', form=form, name=session.get('name'),
known=session.get('known', False))

二、发送邮件效果

先来看效果, 我实现自己给自己的邮箱帐号发送一份邮件, 来说明增加的是哪个新用户.

三、具体实现

1、导入第三方库

from flask_mail import Mail, Message

Flask-Mail 连接到简单邮件传输协议(Simple Mail Transfer Protocol,SMTP)服务器,并把邮件交给这个服务器发送。如果不进行配置,Flask-Mail 会连接 localhost 上的端口 25,无需验证即可发送电子邮件。表 6-1 列出了可用来设置 SMTP 服务器的配置。

在开发过程中,如果连接到外部 SMTP 服务器,则可能更方便.

2、写配置文件

你可能看不懂这此配置文件, 没关系, 我下面会讲.

具体实现时, app.config['FLASKY_MAIL_SENDER'] = '1274828542@qq.com'会发送邮件给管理员app.config['FLASKY_ADMIN'] = '1274828542@qq.com'

第9行与发送邮件主题相关. 既然发送者要发送邮件, 那他肯定需要登录邮箱呀! 所以就必然需要密码.故app.config['MAIL_PASSWORD'] = 'kjhymbxowmey****'是密码(为了避免我的密码泄露, 不显示后面4位数).

1~3行为什么是465, smtp.qq.com, True, 下面会讲.

 app.config['MAIL_SERVER'] = 'smtp.qq.com'  # this is email server
app.config['MAIL_PORT'] = 465 # this is the port of email server
app.config['MAIL_USE_SSL'] = True
app.config['MAIL_USERNAME'] = '1274828542@qq.com'
# app.config['MAIL_PASSWORD'] = 'abcdefg' # 为了避免我的密码泄露, 这不是我邮箱的真正密码
app.config['MAIL_PASSWORD'] = 'kjhymbxowmey****' # this is email password(这是什么?下面会讲)
app.config['FLASKY_MAIL_SENDER'] = '1274828542@qq.com' # this is sender
app.config['FLASKY_ADMIN'] = '1274828542@qq.com' # this is the email of admin
app.config['FLASKY_MAIL_SUBJECT_PREFIX'] = '[Flasky]' # this is subject of email we will send

如上, 我想发邮件到我的QQ邮箱. 便调用以下方法.

def send_email(to, subject, template, **kwargs):
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)
mail.send(msg)

3、发送邮件

            if app.config['FLASKY_ADMIN']:
send_email(app.config['FLASKY_ADMIN'], 'New User', 'mail/new_user', user=user)

四、坑总结与配置讲解

1、邮箱没有开启SMTP服务

最开始我的邮件是发不出去的. app.config['MAIL_PORT'] = 465也是按书上来的, 我只知道是一个端口. 邮件发不出去, 怎么办. 看了网上一些文章, 发现我的QQ邮箱可能没有开启SMTP服务. 哇擦,这也太坑了吧. 登入QQ邮箱, 设置->帐户.

如果, 我没有开启, 下图是我开启后的截图, 我之前是没有开启的.

开启时还需要发短信才给通过验证, 通过后就可以开启了.通过后会显示如下授权码, 请务必把你QQ邮箱的授权码记下来!!!

2、配置讲解

密码错误也是一个坑. 在讲这个坑之前, 先来讲下邮箱配置的1~3行为什么是465, smtp.qq.com, True.

进入下图红色方框内的链接:

重点来了:

 app.config['MAIL_SERVER'] = 'smtp.qq.com'  # this is email server
app.config['MAIL_PORT'] = 465 # this is the port of email server
app.config['MAIL_USE_SSL'] = True

使用SSL, 所以第3行为True; 发送邮件的服务器是smtp.qq.com, 所以第一行也是smtp.qq.com; 当然第二行你写587我想也是可以的(没试过)

3、密码错误

因为我的邮箱密码是abcdefg; 所以最开始是这样写的, 但是依旧发不出邮件. 太TM伤心了.

app.config['MAIL_PASSWORD'] = 'abcdefg'

出现了一个错误:

关于发邮件报错535 Error:authentication failed

这时让我不得不怀疑, 这密码是不是错误了, 但不可能呀, 我密码就是abcdefg. 这就陷入死胡同了.

直到看到这篇文章: http://blog.csdn.net/huochen1994/article/details/51282093

调用163邮箱服务器来发送邮件,我们需要开启POP3/SMTP服务,这时163邮件会让我们设置客户端授权码,这个授权码替代上面代码部分的passwd即可成功发送邮件

于是这将密码更改如下(开启SMTP服务时, 我已经让你记下授权码了!!):

app.config['MAIL_PASSWORD'] = 'kjhymbxowmey****'  # this is email password

收到邮件的那一刻, 开心是真的.

最近感觉, 在一个城市工作两三个月, 然后再换一个城市工作两三个月. 会很好玩.

转发请注明出处: http://www.cnblogs.com/0zcl/p/8443544.html , 不然我也拿你没办法~_~

flask入门与发送邮件与QQ邮箱的更多相关文章

  1. 使用phpmailer发送邮件(以QQ邮箱为例)

    <?php   include("class/class.phpmailer.php"); //下载phpmailer并include两个文件  include(" ...

  2. linux mailx 发送邮件到qq邮箱

    POP3/SMTP服务默认是开启的,没开启的点开启 然后点击生成授权码,发送消息,就会给出授权码了 yum install mailx # centos sudo apt-get install he ...

  3. Java实现163邮箱发送邮件到QQ邮箱

    注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6812973124141711876/ 先创建一个maven的普通项目 添加依赖,附在文档末尾 其中几个注意的地方 ...

  4. php——配合QQ邮箱发送邮件

    最近做一个域名管理系统的项目,实现在域名还有三十天的时候系统发送邮件到QQ邮箱从而提醒续费: 这里运用到了phpmailer; 1:getAll函数: function getAll($con,$sq ...

  5. C#邮件发送(最坑爹的邮箱-QQ邮箱)---转发(SmallFlyElephant)

    C#邮件发送(最坑爹的邮箱-QQ邮箱) 最近工作挺清闲的,有空的时候陪妹子出去玩玩,自己看看小说,看看电影,日子过的挺欢乐的,这个星期幡然悔悟,代码才是我的最爱,做点小东西,就写个邮件发送程序.说的邮 ...

  6. C#邮件发送(最坑爹的邮箱-QQ邮箱)

    最近工作挺清闲的,有空的时候陪妹子出去玩玩,自己看看小说,看看电影,日子过的挺欢乐的,这个星期幡然悔悟,代码才是我的最爱,做点小东西,就写个邮件发送程序.说的邮件发送相信工作过基本上都会用到过,用户注 ...

  7. flask配置qq邮箱发送邮件

    1.第三方登录qq邮箱不是使用邮箱密码,而是使用独立的授权码: 2.开始在python程序中使用os.environ.get()一直无法获取到环境变量,即使是用source命令重新加载配置文件后使用e ...

  8. PHP下利用PHPMailer配合QQ邮箱下的域名邮箱发送邮件

    作 为PHP入门开发者,常常有这种述求:自己的网站中需要添加一个使用自己的域名作为发件人邮件地址的自动发送邮件的方法,用于诸如给用户发送验证码.通知 信息等.比如:我的某个用户注册模块,需要使用reg ...

  9. flask 发送QQ邮箱

    from flask import Flask from flask_script import Manager, Shell from flask_mail import Mail, Message ...

随机推荐

  1. [国嵌攻略][182][Sqlite嵌入式数据库移植]

    数据库系统构成 在计算机系统中,保存数据的方式一般有两种: 1.普通文件方式 2.数据库方式 相比于普通文件方式,使用数据库来管理大批量数据具有更高的效率与安全性. 数据库系统一般由三个部分构成 1. ...

  2. CSS中的定位与浮动

    CSS中的定位与浮动 本文主要讲述CSS中的三种定位样式static.relative和absolute的区别以及浮动元素的特征. 定位样式 CSS中定位样式position的取值有三个,默认值:st ...

  3. Tomcat配置虚拟路径访问容器外的硬盘资源

    问题: 如果tomcat中上传了很多的图片,会导致tomcat启动的时候会慢,所以应该把图片上传到tomcat容器外部 那么,问题来了: tomcat出于安全考虑,禁止了直接访问外部硬盘资源. 解决: ...

  4. Oracle:FOR循环语句练习

    --打印输出从1到10的正整数DECLARE v_i NUMBER(10) := 0;BEGIN LOOP v_i := v_i + 1; DBMS_OUTPUT.put_line(v_i); EXI ...

  5. WEBZIP为什么打不开网页

    先试三个办法 一.打开IE,点工具,点internet选项,点高级,点恢复默认设置,点保存,退出,重新打开IE 二.打开IE,刷新五次以上 三.打开IE,点工具,点internet选项,点删除文件,点 ...

  6. 阿里云邮箱POP3、SMTP设置教程

    3G免费网www.3gmfw.cn免费为你分享阿里云邮箱POP3.SMTP设置教程,阿里云邮箱 阿里云邮箱POP3设置 阿里云邮箱SMTP设置的相关资源如下: 什么是POP3.SMTP? 阿里云邮箱已 ...

  7. block一点也不神秘————如何利用block进行回调

    我们在开发中常常会用到函数回调,你可以用通知来替代回调,但是大多数时候回调是比通知方便的,所以何乐而不为呢?如果你不知道回调使用的场景,我们来假设一下: 1.我现在玩手机 2.突然手机没有电了 3.我 ...

  8. vue源码入口文件分析

    开发vue项目有段时间了, 之前用angularjs 后来用 reactjs 但是那时候一直没有时间把自己看源码的思考记录下来,现在我不想再浪费这 来之不易的思考, 我要坚持!! 看源码我个人感觉非常 ...

  9. JavaScript URL传值过程中遇到的问题及知识点总结

    JavaScript URL传值过程中遇到的问题及知识点总结 Web系统开发过程中经常用到URL进行传值,刚刚接触时不太会解析,会出现中文乱码问题等. 1.父子页面之间的传值(在一个页面中以加载ifr ...

  10. 在Spring Boot中使用swagger-bootstrap-ui

    在Spring Boot中使用swagger-bootstrap-ui swagger-bootstrap-ui是基于swagger接口api实现的一套UI,因swagger原生ui是上下结构的,在浏 ...