1. 程式人生 > >flask入門與傳送郵件與QQ郵箱

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'] = '[email protected]'會發送郵件給管理員app.config['FLASKY_ADMIN'] = '[email protected]'

第9行與傳送郵件主題相關. 既然傳送者要傳送郵件, 那他肯定需要登入郵箱呀! 所以就必然需要密碼.故app.config['MAIL_PASSWORD'] = 'kjhymbxowmey****'是密碼(為了避免我的密碼洩露, 不顯示後面4位數).

1~3行為什麼是465, smtp.qq.com, True, 下面會講. 

1 app.config['MAIL_SERVER'] = 'smtp.qq.com'  # this is email server
2 app.config['MAIL_PORT'] = 465  # this is the port of email server
3 app.config['MAIL_USE_SSL'] = True
4 app.config['MAIL_USERNAME'] = '[email protected]'
5 # app.config['MAIL_PASSWORD'] = 'abcdefg'  # 為了避免我的密碼洩露, 這不是我郵箱的真正密碼
6 app.config['MAIL_PASSWORD'] = 'kjhymbxowmey****'  # this is email password(這是什麼?下面會講)
7 app.config['FLASKY_MAIL_SENDER'] = '[email protected]'  # this is sender
8 app.config['FLASKY_ADMIN'] = '[email protected]'  # this is the email of admin
9 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.

進入下圖紅色方框內的連結:

重點來了:

1 app.config['MAIL_SERVER'] = 'smtp.qq.com'  # this is email server
2 app.config['MAIL_PORT'] = 465  # this is the port of email server
3 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. 這就陷入死衚衕了

呼叫163郵箱伺服器來發送郵件,我們需要開啟POP3/SMTP服務,這時163郵件會讓我們設定客戶端授權碼,這個授權碼替代上面程式碼部分的passwd即可成功傳送郵件

於是這將密碼更改如下(開啟SMTP服務時, 我已經讓你記下授權碼了!!):

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

收到郵件的那一刻, 開心是真的.

最近感覺, 在一個城市工作兩三個月, 然後再換一個城市工作兩三個月. 會很好玩.

相關推薦

flask入門傳送郵件QQ郵箱

前言: 快兩個月沒寫部落格了, 原因是懶了, 沒有最初寫部落格那種看到閱讀量上漲, 別人給自己文章點贊後的開心. 心態也發生了不少變化. 有機會再來寫寫. 前兩個月我去廈門某公司實習, 本著去廈門玩一玩還有先了解下公司情況, 11月底就去廈門了. 這兩個月最大的變化是我自己變得更會玩了, 蠻開心的. 公司2月

ubuntu16.04 傳送郵件QQ郵箱

1、安裝heirloom-mailx sudo apt-get install heirloom-mailx 安裝好之後就可以傳送郵件了 2、傳送 echo ‘this is test’ | mail

java 程式碼實現163郵箱傳送郵件QQ郵箱

1.建立一個使用者類,來接收發送郵件的郵箱地址和授權密碼(需要注意的是,這裡的密碼不是正常使用郵箱的登陸密碼,而是客戶端生成的另一個專門的授權碼   ,這裡需要開啟相應的傳送郵件的服務,這裡開啟的是pop3/smtp服務)package appsoft.cd.applicat

JAVA學習---QQ傳送郵件接收

QQ郵箱的設定 PS:菜鳥一個,只是為了防止犯下同一個錯誤,所以,寫了這個部落格,歡迎大家多提意見,雖然我不一定會聽,但我一定認真考慮。 第一步:QQ郵箱的設定 話不多說,直接配置: 登入QQ郵箱後,進入設定頁面, 在最上面一行, 賬戶選單下,最下邊有四個

Flask入門之SQLAlchemy配置數據庫連接

數據 rdo nsh imp log kref mod pre file 1. 安裝SQLAlchemy pip install flask-sqlalchemy 2. 導入和配置 from flask_sqlalchemy import SQLAlchemy bas

Ubuntu 中sendmail 的安裝、配置傳送郵件的具體實現

一、安裝 ubuntu中sendmail函式可以很方便的傳送郵件,ubuntu sendmail先要安裝兩個包。 必需安裝的兩個包: 程式碼  sudo apt-get install sendmail  sudo apt-get install sendmail-

一、JAVA傳送簡單郵件QQ郵箱為例)

以QQ郵箱為例 1.匯入jar包:## <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> &l

springboot2.0傳送郵件QQ、網易【親測有效】

目的:springboot2.0-傳送郵箱。QQ、網易郵箱  第一步:新增依賴【網上都是說添一種依賴這是錯誤的,會出現注入的時候為null】 <!--郵箱依賴--> <dependency> <grou

monkeyrunner入門傳送郵件(四)

這裡我已Gmail為例,道理都是一樣的 device.touch裡面的數字是手機螢幕的座標,手機螢幕的座標這樣得知: 開啟設定–系統—開發者選項–指標座標 device.type模擬鍵盤輸入內容 提供可複製程式碼: #coding:utf-8 #儲存檔案格式記得選擇utf-8

Linux——使用mail傳送郵件給外部郵箱

相信大家都用過電子郵箱,例如網易163、騰訊QQ、Gmail等等。 在上一篇部落格裡小編剖析了crond&crontab(部落格連結http://blog.csdn.net/enchanting_/article/details/73752291),然

python以程式碼發郵件(以qq郵箱為例)

-用python寫郵件要配置郵箱這裡以qq郵箱為例 -登入qq郵箱在設定中心的賬戶裡面設定smtp pop3等開啟然後點選下面生成授權碼 -smtp負責寫郵件 使用email構建郵件 1.純文字 2. -pop3負責收郵件 傳送帶附件的郵件 發郵件要設定郵件

Linux配置root登陸時傳送郵件到指定郵箱

出於安全考慮,需要監控部分敏感主機的root賬號訪問情況,於是實現root登入時傳送郵件到指定郵箱。 提前明確: 發件箱、發件箱授權碼、發件箱smtp地址、收件箱 第一步 申請郵箱授權碼 選擇騰訊企業郵箱,登入發件箱賬號後,繫結微信,啟用安全登入,選擇“客戶端專用

android 後臺傳送郵件到指定郵箱

這個主要是蒐集app報錯資訊之後將資訊上傳到郵箱,請不要用做其他非法用途。程式碼請參考: MailUtils.java public class MailUtils {     /**      * 建立一封只包含文字的簡單郵件      *      * @param

使用Flask-Mail和qq郵箱SMTP服務傳送郵件

專案中不可避免需要使用郵箱認證,如果使用flask則可以利用Flask-Mail來實現。 Flask-Mail 擴充套件提供了一個簡單的介面,可以在 Flask 應用中設定 SMTP 使得可以在檢視以及指令碼中傳送郵件資訊。 開啟qq郵箱S

windows關機前執行指令碼設定關機blat自動傳送郵件指令碼模板

1.開始——執行——gpedit.msc2.策略——計算機配置——Windows設定——指令碼(啟動/關機)3.右擊"關機"4.新增——瀏覽:選擇指令碼確定;5.完成設定,重啟測試。 注:關機指令碼啟動目錄:C:\Windows\System32\GroupPolicy\Machine\Scripts\Sh

分享《Flask Web開發實戰:入門、進階原理解析》PDF+源代碼

1.0 baidu rip 更多 aid size log fff web 下載:https://pan.baidu.com/s/1gbC5uhh_vjVbDk55_p7SOA 更多資料分享:http://blog.51cto.com/3215120 《Flask Web開

Flask Web開發實戰:入門、進階原理解析》PDF+原始碼

下載:https://pan.baidu.com/s/1gbC5uhh_vjVbDk55_p7SOA 更多資料分享:http://blog.51cto.com/3215120 《Flask Web開發實戰:入門、進階與原理解析》PDF,帶目錄書籤,文字可以複製貼上;配套原始碼。 一本面向Python程式

asp.net 郵件傳送提醒功能(接收方包括QQ郵箱等)

 1、編寫一個通用的郵件傳送操作類:MailHelper.cs,程式碼如下: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.

[Xcode10 實際操作]八、網路多執行緒-(5)使用UIApplication物件傳送郵件

本文將演示如何使用應用程式單例物件,傳送郵件的功能。 在專案導航區,開啟檢視控制器的程式碼檔案【ViewController.swift】 注:需要使用真機進行測試。 1 import UIKit 2 3 class ViewController: UIViewController {

Jenkins傳送郵件的配置(不是QQ郵箱

1.首先確認下是否安裝了Email Extension Plugin 外掛 在系統設定》外掛管理中檢視 2.系統管理》系統設定中進行如下配置 2.1配置系統管理員郵箱 2.2Extended E-mail Notification設定 2.3郵件通知配