發送郵件這個功能很是實用,好比你寫了一個爬蟲,能夠經過郵件來接收程序異常或者任務完成的通知,再好比你搭了一個網站,別人只需留下他的郵箱,你就能夠自動給他發送郵件。html
總之我以爲郵件通知很是適合那些處理批量、大量任務,你能夠不用守在電腦前等待處理結果,在程序裏配置好郵件通知後,只需留意郵箱通知就行了。python
下面咱們一塊兒來看看如何使用 python 來實現郵件發送,郵件通常分爲純文本郵件、html 郵件、以及帶附件郵件,今天咱們使用 python 來分別實現這三種郵件的發送。bash
在 python 實現發送郵件須要兩個模塊,分別是 smtplib 和 email,這兩個模塊都是內置的,不須要本身安裝,直接 import 導入便可。服務器
email 主要是用來構建郵件的,好比郵件收發人、郵件標題、郵件正文以及附件啥的,smtplib 則是用來發送郵件的。app
這裏咱們使用 qq 郵箱來做爲發件郵箱,在使用前,須要簡單的配置下 qq 郵箱。函數
打開 qq 郵箱,依次找到 設置 -> 帳戶,而後檢查 POP3/SMTP 服 務是否開啓。網站
若是沒開啓則開啓,根據提示開啓以後咱們須要獲取受權碼,這個受權碼下面咱們會要用到的,這一步只要獲取到受權碼就好了。ui
咱們先來實現一個簡單的純文本郵件發送,我這裏只把一些關鍵的代碼解釋一下,文章最後面再附上完整的源碼。spa
首先就是使用 email 模塊構建郵件,plain 即表明文本郵件,郵件構建完後,再使用 smtplib 發送郵件。code
#構建純文本郵件
from email.mime.text import MIMEText
from email.header import Header
msg = MIMEText('我是郵件正文...', 'plain', 'utf-8') # plain 表示純文本郵件
msg['From'] = "這裏是發件者郵箱"
msg['To'] = "這裏是收件者郵箱"
msg['Subject'] = Header("我是郵件的標題", 'utf-8') #郵件標題
#使用smtplib模塊發送郵件
email_client = smtplib.SMTP("smtp.qq.com")
email_client.login("這裏是發件者郵箱", "這裏就是上面提到獲取到的受權碼")
email_client.sendmail("這裏是發件者郵箱", "這裏是收件件者郵箱", msg.as_string())
email_client.quit()
複製代碼
發送郵件的時候有兩個須要注意的地方,一個是 smtplib.SMTP 的郵件服務器設置。
這裏咱們用的 qq 郵箱做爲發件郵箱,因此設置爲 smtp.qq.com,若是是其餘郵箱如網易郵箱,則須要設置爲 smtp.163.com。
再一個須要注意的就是 login 方法了,這個登陸方法裏的第二個參數是指上面提到的受權碼,並非你發件郵箱的登陸密碼。
html 郵件主要是能夠給郵件內容定義更豐富的樣式,並且能夠很方便的插入連接。html 郵件和純文本郵件大同小異,把完整的 html 內容做爲文本內容就行,再把 plain 改成 html 類型便可。
#構建html郵件
content = '<html><body><h3>Hello,這是一封 html 郵件,點擊連接能夠去看個人博客哈。</h3>' + '<p><a href="www.weatherfood.com">譚某人的博客</a></p>' + '</body></html>'
puretext = MIMEText(content, 'html', 'utf-8')
複製代碼
附件郵件稍微麻煩一些,在構建郵件對象的時候,就須要聲明構建一個附件郵件對象,msg = MIMEMultipart(),而後再添加 MIMEText 做爲郵件正文,最後再把 MIMEApplication 做爲附件加入便可。
最後我再附上一份完整的帶圖片附件且正文爲 html 的郵件發送源碼,注意把源碼中的發件郵箱改爲你本身的郵箱,並獲取發件郵箱的受權碼。
# coding=utf-8
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
#郵件發送函數
#SMTPHost 郵件服務器
#fromAccount 發件郵箱
#fromPasswd 發件郵件受權碼,注意並非郵箱登陸密碼
#toAccount 收件郵箱
#subject 郵件標題
#content 郵件正文
def sendMail(SMTPHost, fromAccount, fromPasswd, toAccount, subject, content):
#構建郵件
msg = MIMEMultipart()
msg['Subject'] = Header(subject, 'utf-8')
msg['From'] = fromAccount
msg['To'] = toAccount
content = '<html><body><h3>Hello,這是一封 html 郵件,點擊連接能夠去看個人博客哈。</h3>' + '<p><a href="www.weatherfood.com">譚某人的博客</a></p>' + '</body></html>'
puretext = MIMEText(content, 'html', 'utf-8')
msg.attach(puretext)
# 附件
xlsxpart = MIMEApplication(open('tim.jpg', 'rb').read()) #這裏填寫你本身目錄下的附件文件
xlsxpart.add_header('Content-Disposition', 'attachment', filename='tim.jpg')
msg.attach(xlsxpart)
#使用smtplib模塊發送郵件
email_client = smtplib.SMTP(SMTPHost)
email_client.login(fromAccount, fromPasswd)
email_client.sendmail(fromAccount, toAccount, msg.as_string())
email_client.quit()
#主函數
if __name__ == '__main__':
sendMail(
'smtp.qq.com',
'********@qq.com',#你的郵箱
'**********',#受權碼
'playactors@163.com',
'很開心你來看個人文章了,歡迎關注哦。',
'文章中有疑問的地方,歡迎留言與我聯繫哈,感謝你的支持!'
)
複製代碼
有問題歡迎在下面留言交流,也歡迎關注,若是以爲對你有幫助就點個贊吧,感謝支持。