SMTP是發送郵件的協議,Python內置對SMTP的支持,能夠發送純文本郵件、HTML郵件以及帶附件的郵件。html
Python對SMTP支持有smtplib和email兩個模塊,email負責構造郵件,smtplib負責發送郵件。python
有一個shell腳本,須要有發送郵件的功能。若是直接使用shell自帶的mail發送linux
echo 郵件正文」 | mail -s 郵件主題 收件地址
這種郵件收到後,會被郵箱服務器攔截到。可能會進入到垃圾收件箱中,可能連垃圾箱都沒有(被攔截了)。shell
可是又不想搭建郵箱服務器,太麻煩了!bash
怎麼辦呢?使用Python就能夠解決。服務器
咱們須要使用shell腳原本調用Python腳本,因此傳參數時,須要使用命令行方式傳參。測試
sys.argv[]是用來獲取命令行輸入的參數的(參數和參數之間空格區分),sys.argv[0]表示代碼自己文件路徑,因此從參數1開始,表示獲取的參數了!ui
在python3.5.2版本中,默認已經有smtplib和email兩個模塊,因此不須要安裝了!編碼
註釋都寫好了,mail-send.py完整代碼以下:加密
#!/usr/bin/env python3 # coding:utf-8 import sys import smtplib # 加載smtplib模塊 from email.mime.text import MIMEText from email.utils import formataddr class SendMail(object): def __init__(self,sender,title,content): self.sender = sender #發送地址 self.title = title # 標題 self.content = content # 發送內容 self.sys_sender = '123456@163.com' # 系統帳戶 self.sys_pwd = '123456' # 系統帳戶密碼 def send(self): try: """ 構造一個郵件對象, 第一個參數就是郵件正文, 第二個參數是MIME的subtype,傳入'html',最終的MIME就是'text/html'。 最後必定要用utf-8編碼保證多語言兼容性。 """ msg = MIMEText(self.content, 'html', 'utf-8') # 發件人格式 msg['From'] = formataddr(["IT事業部系統", self.sys_sender]) # 收件人格式 msg['To'] = formataddr(["", self.sender]) # 郵件主題 msg['Subject'] = self.title # SMTP服務器 server = smtplib.SMTP("smtp.163.com", 25) # 登陸帳戶 server.login(self.sys_sender, self.sys_pwd) # 發送郵件 server.sendmail(self.sys_sender, [self.sender, ], msg.as_string()) # 退出帳戶 server.quit() return True except Exception as e: print(e) return False if __name__ == '__main__': # 參數個數,因爲sys.argv[0]就是腳本名,因此要減1 num = len(sys.argv) - 1 if num < 3 or num > 3: exit("參數錯誤,必須傳3個參數!當前參數個數爲%s"%num) sender = sys.argv[1] # 發送地址 title = sys.argv[2] # 標題 content = sys.argv[3] # 發送內容 # 調用send方法,發送郵件 ret = SendMail(sender,title,content).send() if ret: print('發送成功!') else: print('發送失敗!')
注意:須要修改系統帳戶的郵箱和密碼!
若是是163郵箱,SMTP服務器無需修改,不然須要修改!
若是是qq郵箱,改動以下:
1.qq郵箱密碼換成它提供的16位受權碼
2.端口號改成465
3.smtplib.SMTP改成smtplib.SMTP_SSL
可能有些人會有疑惑,爲何要改爲smtplib.SMTP_SSL。由於騰訊的郵箱服務器,使用的是SSL加密方式。
將腳本上傳到 linux服務器,先用命令行運行。
語法以下:
python3 mail-send.py 發送地址 標題 發送內容
測試執行:
python3 mail-send.py 88888888@qq.com 申請單 '帳戶: xiao <br>密碼:123456 <br>請妥善保管好帳戶信息,本 郵件由系統發送,請勿回覆!謝謝配合!<br>'
這個時候,收到的郵件以下:
使用shell腳本調用,也是一樣的道理。將命令直接寫進入就能夠了!
腳本以下:
#!/bin/bash python3 mail-send.py 987334176@qq.com 申請單 '帳戶: xiao <br>密碼:123456 <br>請妥善保管好帳戶信息,本 郵件由系統發送,請勿回覆!謝謝配合!<br>'
執行腳本,效果同上!