前段時間寫了個自動爬蟲的腳本,定時在阿里雲服務器上執行,會從某個網站上爬取連接保存到txt文本中,可是腳本不夠完善,我須要爬蟲完畢以後經過郵件把附件給我發送過來,以前寫過一個《利用Python+163郵箱受權碼發送郵件》的博客,可是那篇文章是沒有帶附件的,所以,我想到了爬蟲完畢以後,再執行一段發送郵件的代碼,把爬蟲保存的TXT文件經過郵件發送到個人郵箱中,需求開始明確了,就開始分析和寫代碼實現吧。html
SMTP(Simple Mail Transfer Protocol),即簡單郵件傳輸協議,它是一組用於由源地址到目的地址傳送郵件的規則,由它來控制信件的中轉方式。
python的smtplib提供了一種很方便的途徑發送電子郵件。它對smtp協議進行了簡單的封裝。python
看到阿里雲服務上的定時任務以下:git
爬蟲執行完畢獲取到TXT文件命名以下,前面xfurlwett-是固定的,後面是日期,".txt"是固定的後綴github
在python中用如下兩行代碼格式化時間,格式化以後把它轉爲字符串賦給一個變量caodate服務器
ISOTIMEFORMAT='%Y%m%d' caodate=str(time.strftime(ISOTIMEFORMAT, time.localtime()))
文件名以下,可在字符串xfurlwett前面加上絕對路徑的文件名app
filename='xfurlwett-'+caodate+'.txt'
發送帶附件的郵件,首先要建立MIMEMultipart()實例,而後構造附件,若是有多個附件,可依次構造,最後利用smtplib.smtp發送。網站
message = MIMEMultipart() message['subject'] = caodate+'下載附件通知' # 設置郵件標題 message['from'] = sender # 設置發送人 message['to'] = receiver0 # 設置接收人 message.attach(msg) filename='xfurlwett-'+caodate+'.txt' # 構造附件1,傳送當前目錄下的 filename 文件 att1 = MIMEText(open(filename, 'rb').read(), 'base64', 'utf-8') att1["Content-Type"] = 'application/octet-stream' # 這裏的filename能夠任意寫,寫什麼名字,郵件中顯示什麼名字 att1["Content-Disposition"] = 'attachment; filename="'+filename+'"' message.attach(att1)
import time import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart ISOTIMEFORMAT='%Y%m%d' def sentemail(): caodate=str(time.strftime(ISOTIMEFORMAT, time.localtime())) host = 'smtp.163.com' # 設置發件服務器地址 port = 465 # 設置發件服務器端口號。注意,這裏有SSL和非SSL兩種形式 sender = 'a419914150@163.com' # 設置發件郵箱,必定要本身註冊的郵箱 pwd = 'ifujfnjdfnhkgnjfd' # 設置發件郵箱的密碼,163郵箱的受權碼,等會登錄會用到 receiver0 = '419914150@qq.com' # 設置郵件接收人,能夠是扣扣郵箱 receiver1 = '1879230382@qq.com' body = '<h1>'+caodate+'</h1><p>zhongfs</p>' # 設置郵件正文,這裏是支持HTML的 msg = MIMEText(body, 'html') # 設置正文爲符合郵件格式的HTML內容 message = MIMEMultipart() message['subject'] = caodate+'下載附件通知' # 設置郵件標題 message['from'] = sender # 設置發送人 message['to'] = receiver0 # 設置接收人 message.attach(msg) filename='xfurlwett-'+caodate+'.txt' # 構造附件1,傳送當前目錄下的 filename 文件 att1 = MIMEText(open(filename, 'rb').read(), 'base64', 'utf-8') att1["Content-Type"] = 'application/octet-stream' # 這裏的filename能夠任意寫,寫什麼名字,郵件中顯示什麼名字 att1["Content-Disposition"] = 'attachment; filename="'+filename+'"' message.attach(att1) try: s = smtplib.SMTP_SSL(host, port) # 注意!若是是使用SSL端口,這裏就要改成SMTP_SSL s.login(sender, pwd) # 登錄郵箱 s.sendmail(sender, receiver0, message.as_string())# 發送郵件! #s.sendmail(sender, receiver1, msg.as_string()) print ('Done.sent email success') except smtplib.SMTPException: print ('Error.sent email fail') if __name__ == '__main__': sentemail()
程序運行截圖:阿里雲
收到郵件截圖:
url
本文簡單介紹瞭如何利用python經過163郵箱發送帶附件的郵件,並附上了代碼。因爲比較簡單,再也不過多闡述。已上傳github代碼,連接以下:3d
https://github.com/rootzhongfengshan/python_practical/blob/master/SentMail/SentMailWithAttachment.py