Python自動化運維筆記(六):使用smtplib模組傳送電子郵件
執行環境:
Python3.6
,Windwos10 RS1
,Pycharm
參考書籍—《Python自動化運維--技術與最佳實踐》
劉天斯著
模組介紹
我們在監測系統狀態傳送警報資訊,或者業務質量報表的時候,可以通過傳送郵件來第一時間獲取服務狀態。SMTP
是傳送郵件的協議,POP
是接收郵件的協議。Python
內建對SMTP
的支援,可以傳送純文字郵件、HTML郵件
以及帶附件的郵件。Python
對SMTP
支援有smtplib
和email
兩個模組,email
負責構造郵件,smtplib
負責傳送郵件。
所以我們可以使用smtplib
模組來實現郵件收發功能,模擬一個smtp
客戶端。在Python2.3
smtplib
模組。
模組的使用
常用類SMTP
SMTP
類是smtp
模組中最常用的類:有關於類的定義:
smtplib.SMTP(host[,port[,local_hostname[,,timeout]]])
# 可以完成登入、校驗、傳送、退出等
# host引數為遠端smtp主機地址,比如stmp.163.com;port為連線埠,預設為25;
# local_hostname的作用是在本地的FQDN(完整的域名)傳送HELO/EHLO指令
# timeout為連線或嘗試在多少秒超時。
在SMTP
類中有如下方法:
SMTP.connect([host[,port]]) # 連線遠端smtp主機方法,host為遠端主機地址,port為遠端主機smtp埠,預設25,也可以直接使用host:port形式表示,例如:SMTP.connect("smtp.163.com","25').
SMTP.login(user,password) # 遠端smtp主機的校驗方法,引數為使用者名稱與密碼,如SMTP.login("[email protected]",'123456').
SMTP.sendmail(from_addr,to_addrs,msg[,mail_options,rcpt_options]) # 實現郵件的傳送功能,引數依次為發件人,收件人,郵件內容,例如:SMTP.sendmail("[email protected]",'[email protected]',body),其中body內容定義如下:
"""From: [email protected]
To:[email protected]
Subject:test mail
test mail body"""
SMTP.starttls([keyfile[,certfile]]) # 啟用TLS(安全傳輸)模式,所有SMTP指令都講加密傳輸,例如使用gmail的stmp伺服器時需要啟動此項才能正常傳送郵件
SMTP.quit() # 埠smtp伺服器的連線
郵件傳送程式碼示例
我用的是QQ郵箱
向QQ郵箱
傳送郵件,下面附上一張QQ郵箱
的配置參考圖,SMTP
預設埠25
:
參考程式碼如下:
# -*- coding: utf-8 -*-
# @Time : 2017/10/3 11:24
# @File : smtplibTest.py
# @Software: PyCharm
import smtplib
#
# user = "你的郵箱地址"
# password = "你的郵箱密碼"
HOST = "smtp.qq.com" # 定義smtp主機
SUBJECT = "This is my first Python Email" # 定義郵件主題
TO = "[email protected]" # 定義郵件收件人
FROM = "[email protected]" # 定義郵件發件人
text = "python test mail" # 郵件的內容
BODY = "\r\n".join(( # 組裝sendmail方法的郵件主體內容,各段以"\r\n"進行分隔
"From:%s" % FROM,
"To:%s" % TO,
"Subject:%s" % SUBJECT,
"",
text
))
server = smtplib.SMTP() # 建立一個SMTP物件
server.connect(HOST, "25") # 通過connect方法連線smtp主機
server.starttls() # 啟動安全傳輸模式
server.login("[email protected]", "**MyPassword**") # 郵件賬戶登入校驗
server.sendmail(FROM, TO, BODY) # 郵件傳送
server.quit() # 斷開smtp連線
執行效果:
值得一提的是,我剛開始是按照書上的程式碼進行照搬的,書上的操作環境是Python2.6
,而我使用的是Python3.6
。在BODY
內容時會丟擲異常,一查原因原來是在Python2
中,string
模組中有一個join()
函式,用於以特定的分隔符分隔源變數中的字串,將其作為新的元素加入到一個列表中;但是在Python3
中,string
模組中取消了join()
函式,join()
函式作為一個全域性函式被使用。
所以可以按照下面兩個作為參考對變數BODY
進行更改:
Python2環境中
import string
# 組裝sendmail方法的郵件主體內容,各段以"\r\n"進行分隔
BODY = string.join((
"From: %s" % FROM,
"To: %s" % TO,
"Subject: %s" % SUBJECT,
""
text
),"\r\n")
Python3環境中
import string
# 組裝sendmail方法的郵件主體內容,各段以"\r\n"進行分隔
BODY = "\r\n".join((
"From:%s" % FROM,
"To:%s" % TO,
"Subject:%s" % SUBJECT,
"",
text
))
另外可以使用email模組
來實現郵件的個性化定製。
如果是想實現更多的功能,請參考廖雪峰的這篇教程(連結)
相關推薦
Python自動化運維筆記(六):使用smtplib模組傳送電子郵件
執行環境:Python3.6,Windwos10 RS1,Pycharm 參考書籍—《Python自動化運維--技術與最佳實踐》劉天斯著 模組介紹 我們在監測系統狀態傳送警報資
Python自動化運維筆記(五):使用filecmp模組實現檔案以及檔案目錄差異對比
執行環境:Python3.6,Windwos10 RS1,Pycharm 參考書籍—《Python自動化運維--技術與最佳實踐》劉天斯著 模組介紹 Python2.3以上的版本
自動化運維專題(二):Ansible批量自動化管理工具
一,工具簡介 1.1 ansible簡介 批量管理伺服器工具 無需部署agent,通過ssh進行管理 中小型公司常用的自動化運維工具 1.2 jenkins簡介 視覺化運維(主要用在視覺化部署) 持續構建,可以和git,snv結合 可結合ssh實
Linux運維筆記(一)網絡基礎知識
使用 可靠 height image inter 電話線 ppp協議 網址 esp 網絡基礎知識 一、基本概念 1.ARPANET & TCP/IP:以“軟件”技術將網絡硬件整合,使得不同的計算機或者數據可以通過這個軟件達成數據溝通(TCP/IP技術也被稱為Inte
《Python機器學習》筆記(六)
後者 mean 子空間 otl 計算模型 lencod pytho 兩個 show 模型評估與參數調優實戰基於流水線的工作流一個方便使用的工具:scikit-learn中的Pipline類。它使得我們可以擬合出包含任意多個處理步驟的模型,並將模型用於新數據的預測。加載威斯康
appium-python自動化之get_attribute筆記(摘)
原文轉自:https://www.cnblogs.com/yoyoketang/p/7942745.html 參考連結:https://blog.csdn.net/u012111923/article/details/80824189 獲取text # coding:utf-8
python自動化運維學習第六天--函式
函式 函式是完成特定功能的一個語句組,這組語句可以作為一個單位使用。 可以通過函式名在程式中不同地方多次執行(函式呼叫) 分為預定義函式和自定義函式 預定於函式可以直接使用 自定義函式需要自己編寫後才能使用 使用函式是為了提高應用的模組性和程式碼重用率 函式的定義和呼叫 def 函式名(
redis開發與運維筆記(3)
1、客戶端 通訊協議是建立在TCP協議之上的。Redis制定了RESP(REdis Serialization Protocol, Redis序列化協議) 實現客戶端與服務端的正常互動 (1)客戶端API。client .. 命令 client list。列出與Re
Cris 的Python筆記(六):函式基礎
1. 函式基礎語法知識 # 函式:函式也是一個物件,用來儲存可執行的程式碼並且在需要時隨時呼叫;而物件就是記憶體中用來儲存資料的一片記憶體空間 # 建立函式:def 函式名([arg1,arg2...]): # 程式碼塊 de
Linux 運維工程師(六)
夜光序言: 歲月未存慈悲,願你始終不疑真心~~ 失去的都會以另一種方式回來 正文:進階指令~~ &nbs
redis開發與運維筆記(1)
1、Redis特性與優點 速度快。redis所有資料都存放於記憶體;是用C語言實現,更加貼近硬體;使用了單執行緒架構,避免了多執行緒競爭問題。Redis使用了單執行緒架構和IO多路複用模型(epoll作為多路複用技術的實現,非阻塞IO)來實現。每次客戶端的請求都會經過傳送命
Deep Learning with Python 系列筆記(六):深度學習實踐進階
Keras functional API keras中常用的Sequential 模型,通常假設網路只有一個輸入和一個輸出,並且這些網路層之間是一種線性的堆疊。如下: 事實上,這種結構太過普通,我們需要把許多內容和實際操作都通過一個Sequential模型實現
Python學習筆記(六):列表和字典
以Mark Lutz著的《Python學習手冊》為教程,每天花1個小時左右時間學習,爭取兩週完成。 --- 寫在前面的話 2013-7-18 19:00 學習筆記 1,Python中的列表是任意物件的有序集合,而且是可變的。在標準的Python直譯器內部,列表是C陣列,不
好程式設計師分享Python自動化運維開發實戰 六、流程控制
好程式設計師分享Python自動化運維開發實戰 六、流程控制 PYTHON 條件語句 Python條件語句是通過一條或多條
Unity3D之Mecanim動畫系統學習筆記(六):使用腳本控制動畫
ont nim 復制代碼 info rip esc enter machine images 控制人物動畫播放 這裏我重新弄了一個簡單的場景和新的Animator Controller來作為示例。 下面先看看Animator Controller的配置: 人物在站
.net core 2.0學習筆記(六):Remoting核心類庫RealProxy遷移
ride dispatch 包含 void reflect 既然 splay creat (六) 在學習.net core的過程中,我們已經明確被告知,Remoting將不會被支持。官方的解釋是,.net framework 類型包含了太多的Runtime的內容,是
java學習筆記(六):變量類型
animal 單獨使用 div 位置 fin strong pub 局部變量 變量聲明 java一共三種變量: 局部變量(本地變量):方法調用時創建,方法結束時銷毀 實例變量(全局變量):類創建時創建,類銷毀時銷毀 類變量(靜態變量):程序啟動是創建,程序銷毀時銷毀
hadoop-3.0.0-beta1運維手冊(002):安裝Guest操作系統
虛擬機安裝linux hadoop虛擬機 虛擬機guest操作系統 hadoop-3.0.0-beta1 hdfs3. 2.1 什麽是Guest操作系統Guest指虛擬機,安裝Guest操作系統,就是在我們剛才定制的虛擬機nn1上安裝操作系統。我們要安裝的操作系統是Linux,它有很多發行
hadoop-3.0.0-beta1運維手冊(001):定制虛擬機
hadoop3.0 hdfs3.0 虛擬機安裝操作系統 centos 1.1 什麽是虛擬機虛擬機是一個軟件,運行在我們的計算機上,通過它可以模擬一臺計算機。虛擬機和真實的物理機器一樣,也有CPU、硬盤、網卡、內存這些硬件,在虛擬機上同樣可以安裝操作系統,操作系統安裝好後,使用起來和真實的機器基
hadoop-3.0.0-beta1運維手冊(003):安裝全分布式HDFS3.0.0-準備軟件
hadoop3.0.0 hdfs3.0.0 centos7 hadoop的jdk hadoop軟件上傳 3.1 準備軟件HDFS是Hadoop的一個組件,它並沒有單獨發布,因此,我們需要下載Hadoop的安裝包。1. 下載Hadoop3.0.0-beta1,保存到d:\hdfs3\soft