前言
最近突然冒出的一個(gè)想法所以有了這篇文章:使用python腳本檢測機(jī)器是否異常召庞,繼而判斷異常后自動(dòng)發(fā)送郵件到郵箱俩檬。而在此之前柒莉,我基本上都是等機(jī)器出現(xiàn)異常情況盼砍,導(dǎo)致程序出現(xiàn)問題才去解決尘吗。所以這個(gè)是很有必要學(xué)習(xí)如何自動(dòng)發(fā)送郵件。
相關(guān)定義
-
SMTP:全稱是“Simple Mail Transfer Protocol”浇坐,即簡單郵件傳輸協(xié)議睬捶。它是一組用于從源地址到目的地址傳輸郵件的規(guī)范,通過它來控制郵件的中轉(zhuǎn)方式近刘。
SMTP 協(xié)議屬于 TCP/IP 協(xié)議簇擒贸,它幫助每臺(tái)計(jì)算機(jī)在發(fā)送或中轉(zhuǎn)信件時(shí)找到下一個(gè)目的地。SMTP 服務(wù)器就是遵循 SMTP 協(xié)議的發(fā)送郵件服務(wù)器觉渴。
SMTP 認(rèn)證介劫,簡單地說就是要求必須在提供了賬戶名和密碼之后才可以登錄 SMTP 服務(wù)器,這就使得那些垃圾郵件的散播者無可乘之機(jī)疆拘。 -
POP3:是Post Office Protocol 3的簡稱蜕猫,即“郵局協(xié)議版本3”是TCP/IP協(xié)議族中的一員,由RFC1939 定義哎迄。本協(xié)議主要用于支持使用客戶端遠(yuǎn)程管理在服務(wù)器上的電子郵件回右。提供了SSL加密的POP3協(xié)議被稱為POP3S。
這些郵件客戶端軟件包括OutlookExpress漱挚,Outlook翔烁,NetscapeMessenger或Communicator,Eudora旨涝,Pegasus蹬屹,NuPOP,Z-Mail白华,F(xiàn)oxMail慨默,TheBat,Kmail弧腥,和Unixmail厦取。
支持離線郵件處理,客戶端從服務(wù)器下載所有郵件到本地管搪。 - IMAP:全稱是Internet Mail Access Protocol虾攻,即交互式郵件存取協(xié)議铡买,“與POP3協(xié)議的主要區(qū)別是用戶可以不用把所有的郵件全部下載,可以通過客戶端直接對(duì)服務(wù)器上的郵件進(jìn)行操作霎箍。
發(fā)送SMTP的幾種方式
- Jenkins
- python
- Java
...
SMTP Server的類型
1.一些已存在的郵件: 126.com, 163.com, outlook.com等
2.使用window系統(tǒng)自帶工具搭建SMTP
3.使用hmailServer搭建(需要有備案好的域名)
實(shí)現(xiàn)步驟
本文以python3.6+163郵箱為例奇钞,實(shí)現(xiàn)發(fā)送SMTP郵件
# 第三方 SMTP 服務(wù)
mail_host = "smtp.163.com" # 設(shè)置服務(wù)器
mail_user = "***@163.com" # 用戶名
mail_pass = "***" # 授權(quán)碼
sender = '***@163.com'
receiver = '**@qq.com' # 接收郵件,可設(shè)置為你的QQ郵箱或者其他郵箱
message = MIMEText("python email test content", "plain", "utf-8")
message['From'] = sender
message['To'] = receiver
subject = 'Python SMTP Email 163'
message['Subject'] = Header(subject, 'utf-8')
try:
smtpObj = smtplib.SMTP()
smtpObj.connect(mail_host, 25) # 25 為 SMTP 端口號(hào)
smtpObj.ehlo() # 向Gamil發(fā)送SMTP 'ehlo' 命令
smtpObj.starttls() #啟動(dòng)TLS
smtpObj.login(mail_user, mail_pass)
smtpObj.sendmail(sender, receiver, message.as_string())
smtpObj.quit()
print("Send Successfully")
except smtplib.SMTPException as e:
print(e)
注意:
- 檢查發(fā)送郵件的機(jī)子能否ping通 smtp.163.com漂坏, 如果不能ping通可能是被屏蔽了或者是網(wǎng)絡(luò)有問題景埃。
- 我們的163郵箱需要開啟客戶端授權(quán)碼,上面的mail_pass是授權(quán)碼樊拓,而不是郵箱的密碼纠亚。如果不知道如何開啟,請(qǐng)戳這里筋夏。
- 郵件主題不要存在test等字眼蒂胞,否則會(huì)被當(dāng)成違規(guī)內(nèi)容而發(fā)送不成功。
小結(jié)
因?yàn)楣镜碾娔X會(huì)將163,126等smtp server屏蔽掉条篷,最后只能用公司自己的郵箱服務(wù)器骗随,而且公司如果將上面的代碼參數(shù)替換成公司的郵箱服務(wù)器會(huì)報(bào)錯(cuò),主要是因?yàn)轵?yàn)證方式不支持赴叹,所以最后放棄了python發(fā)送郵件的方式鸿染,最后采用了Jenkins發(fā)送郵箱,關(guān)于Jenkins發(fā)送郵件乞巧,請(qǐng)參考這里涨椒。