flask入门与发送邮件与QQ邮箱
前言: 快两个月没写博客了, 原因是懒了, 没有最初写博客那种看到阅读量上涨, 别人给自己文章点赞后的开心. 心态也发生了不少变化. 有机会再来写写. 前两个月我去厦门某公司实习, 本着去厦门玩一玩还有先了解下公司情况, 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邮箱的更多相关文章
- 使用phpmailer发送邮件(以QQ邮箱为例)
<?php include("class/class.phpmailer.php"); //下载phpmailer并include两个文件 include(" ...
- linux mailx 发送邮件到qq邮箱
POP3/SMTP服务默认是开启的,没开启的点开启 然后点击生成授权码,发送消息,就会给出授权码了 yum install mailx # centos sudo apt-get install he ...
- Java实现163邮箱发送邮件到QQ邮箱
注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6812973124141711876/ 先创建一个maven的普通项目 添加依赖,附在文档末尾 其中几个注意的地方 ...
- php——配合QQ邮箱发送邮件
最近做一个域名管理系统的项目,实现在域名还有三十天的时候系统发送邮件到QQ邮箱从而提醒续费: 这里运用到了phpmailer; 1:getAll函数: function getAll($con,$sq ...
- C#邮件发送(最坑爹的邮箱-QQ邮箱)---转发(SmallFlyElephant)
C#邮件发送(最坑爹的邮箱-QQ邮箱) 最近工作挺清闲的,有空的时候陪妹子出去玩玩,自己看看小说,看看电影,日子过的挺欢乐的,这个星期幡然悔悟,代码才是我的最爱,做点小东西,就写个邮件发送程序.说的邮 ...
- C#邮件发送(最坑爹的邮箱-QQ邮箱)
最近工作挺清闲的,有空的时候陪妹子出去玩玩,自己看看小说,看看电影,日子过的挺欢乐的,这个星期幡然悔悟,代码才是我的最爱,做点小东西,就写个邮件发送程序.说的邮件发送相信工作过基本上都会用到过,用户注 ...
- flask配置qq邮箱发送邮件
1.第三方登录qq邮箱不是使用邮箱密码,而是使用独立的授权码: 2.开始在python程序中使用os.environ.get()一直无法获取到环境变量,即使是用source命令重新加载配置文件后使用e ...
- PHP下利用PHPMailer配合QQ邮箱下的域名邮箱发送邮件
作 为PHP入门开发者,常常有这种述求:自己的网站中需要添加一个使用自己的域名作为发件人邮件地址的自动发送邮件的方法,用于诸如给用户发送验证码.通知 信息等.比如:我的某个用户注册模块,需要使用reg ...
- flask 发送QQ邮箱
from flask import Flask from flask_script import Manager, Shell from flask_mail import Mail, Message ...
随机推荐
- JS实现单选按钮回显时页面效果出现,但选中单选框的值为空
最近做了很多前端页面的工作,遇到的一个感觉很头疼的问题在这里记一下: 经常用JS回显单选框,但是明明从页面效果上来看,单选框已经被选中了,可是却不能触发单选框的change事件,取值的时候用某种方法取 ...
- oracle存储过程的创建和使用
创建存储过程: 格式:create or replace procedure procedure_name(参数 参数类型) Is/as 变量1 变量1的类型: begin ----------业务逻 ...
- webpack运行常见错误归纳
今天在运行项目的时候,又遇到坑了,在公司运行的好好的项目,到我自己电脑上就报错,提示跨域,想了好久都不明白为啥,webpack配置文件里的ip地址我也改成与本地ip对应的,百思不得其解,在寻求别人帮助 ...
- HDU 2682 Tree
题目: There are N (2<=N<=600) cities,each has a value of happiness,we consider two cities A and ...
- UE4 径向模糊radiu blur
hlsl代码为: float2 ScreenMult = ; ; ] = {-0.08,-0.05,-0.03,-0.02,-0.01,0.01,0.02,0.03,0.05,0.08}; float ...
- JavaScript八张思维导图—基本语句
JS基本概念 JS操作符 JS基本语句 JS数组用法 Date用法 JS字符串用法 JS编程风格 JS编程实践 不知不觉做前端已经五年多了,无论是从最初的jQuery还是现在火热的Angular,Vu ...
- dede文章插入分页符不起作用,编辑器中出现分页符,导致文章显示不全
文章来源:小灰博客| 时间:2013-10-30 13:40:21| 作者:Leo | 1 条评论 文章分类:IT技术分享.PHP 标签: dedecms 今天偶尔发现给一篇dede下的长文章 ...
- ios - 如何获取app上的数据
做过ios开发的人应该都用过Charles,通常叫它花瓶.Charles是Mac下常用的对网络流量进行分析的工具,类似于Windows下的Fiddler.在开发iOS程序的时候,往往需要调试客户端和服 ...
- myeclipse 10怎么安装与激活
http://jingyan.baidu.com/article/5553fa82eae0ce65a2393406.html
- 基础 - 32位操作系统最多只支持4G内存。
32位操作系统最多只支持4G内存. CPU能不能直接访问硬盘的数据呢, 不能. 只能通过把硬盘的数据先放到内存里, 然后再从内存里访问硬盘的数据.我们平时玩游戏碰上读图loading 进度条的这个过程 ...