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 ...
随机推荐
- UEP-保存
uep的保存操作分为ajaxgrid和ajaxform两种方式 1.ajaxgrid public void storeInfoSave(){ try { //两个dataWrap 一个dataWra ...
- windows下pip安装python模块时报错
windows下pip安装python模块时报错总结 装载于:https://www.cnblogs.com/maxaimee/p/6515165.html 前言: 这几天把python版本升级后, ...
- 解决无限 This file is indented with tabs instead of 4 spaces
File -> Settings -> Editor -> Code Style -> Java -> Tabs and Indents -> Use tab ch ...
- Thinkphp5.0+Vue2.0前后端分离框架Vuethink
VueThink是一套基于Vue全家桶(Vue2.x + Vue-router2.x + Vuex)+ Thinkphp的前后端分离框架. 脚手架构建也可以通过vue官方的vue-cli脚手架工具构建 ...
- 独立服务器 云主机、VPS以及虚拟主机三者之间的区别是什么?哪个更好?
https://www.zhihu.com/question/21442353#answer-2442764 云主机(如 EC2,[1] )和 VPS (如 Linode,[2])都是完整的操作系统( ...
- 关于Vue的路由、脚手架笔记
在页面引入vue-router.js文件,开始配置路由 <div id="box"> <ul><li> <a v-link="{ ...
- ==和equals详解+例子
一开始遇见==和equals我也是分不清,后来看了很多博客,收益匪浅, 担心以后给忘了,所以写下这个,以后复习可以用. (有哪里写得不对的,希望可以留言帮忙改进,大家一起共同进步) 一.Java数据类 ...
- Android带有粘性头部的ScrollView
前言,一天在点外卖的时候,注意到饿了么列表页的滑动效果不错,但是觉得其中的手势滑动还是挺复杂的,正好又碰到了在熟悉Touch事件的理解当中,所以就抽空对着饿了么的列表页面尝试写写这个效果 1.先贴一个 ...
- linux的crash之hardlock排查记录
3.10.0-327的内核,crash记录如下: KERNEL: vmlinux DUMPFILE: vmcore [PARTIAL DUMP] CPUS: 48 DATE: Wed Oct 18 2 ...
- xampp使用中mysql端口被占用问题的解决方案
如果在安装XAMPP前本机已经安装了mysql,并且添加了Windows服务中 使用xampp时,两个Mysql在Windows服务中有冲突 这意味着你之前在电脑上使用过mysql,路径.端口都被占用 ...