郵件,做爲最正式規範的溝通方式,在平常辦公過程當中常常被用到服務器
咱們都知道 Python內置了對 SMTP 的支持,能夠發送純文本、富文本、HTML 等格式的郵件app
本文將聊聊利用 Python 發送郵件的 3 種方式函數
以 126 郵箱爲例,在編碼以前,咱們須要開啓 SMTP 服務測試
而後,手動新增一個受權碼ui
其中,帳號、受權碼和服務器地址用於鏈接登陸郵箱服務器編碼
smtplib是 Python 自帶的依賴庫,能夠直接導入使用首先,經過郵箱帳號、受權碼、郵箱服務器地址初始化一個 SMTP 實例,而後進行鏈接3d
def __init__(self): # 初始化 self.smtp = smtplib.SMTP() # 鏈接郵箱服務器地址 self.smtp.connect('smtp.126.com') # 加入主題和附件,郵件體 self.email_body = MIMEMultipart('mixed') # 發件人地址及受權碼 self.email_from_username = '**@126.com' self.email_from_password = '受權碼' # 登陸 self.smtp.login(self.email_from_username, self.email_from_password)
而後,將收件人列表、郵件標題、郵件正文內容、附件路徑及附件文件名加入到上面定義的郵件體中code
def generate_email_body(self, email_to_list, email_title, email_content, attchment_path, files): """ 組成郵件體 :param email_to_list:收件人列表 :param email_title:郵件標題 :param email_content:郵件正文內容 :param attchment_path:附件的路徑 :param files:附件文件名列表 :return: """ self.email_body['Subject'] = email_title self.email_body['From'] = self.email_from_username self.email_body['To'] = ",".join(email_to_list) for file in files: file_path = attchment_path + '/' + file if os.path.isfile(file_path): # 構建一個附件對象 att = MIMEText(open(file_path, 'rb').read(), 'base64', 'utf-8') att["Content-Type"] = 'application/octet-stream' att.add_header("Content-Disposition", "attachment", filename=("gbk", "", file)) self.email_body.attach(att) text_plain = MIMEText(email_content, 'plain', 'utf-8') self.email_body.attach(text_plain)
接着,就可使用 SMTP 實例對象,將郵件發送出去server
# 收件人列表 email_to_list = ['收件人1地址','收件人2地址'] # 發送郵件 # 注意:此處必須同時指定發件人與收件人,不然會看成垃圾郵件處理掉 self.smtp.sendmail(self.email_from_username, email_to_list, self.email_body.as_string())
郵件發送完畢以後,退出服務便可對象
def exit(self): """ 退出服務 :return: """ self.smtp.quit()
Zmail 項目建立目的是,使郵件處理變得更簡單使用 Zmail 發送接收郵件方便快捷,不須要手動添加服務器地址、端口以及適合的協議,能夠輕鬆建立 MIME 對象和頭文件注意:Zmail 僅支持 Python3,不支持 Python2首先,安裝依賴庫
# 安裝依賴庫 pip3 install zmail
而後,使用郵箱帳號、受權碼建立一個郵箱服務對象
class ZMailObject(object): def __init__(self): # 郵箱帳號 self.username = '**@126.com' # 郵箱受權碼 self.authorization_code = '受權碼' # 構建一個郵箱服務對象 self.server = zmail.server(self.username, self.authorization_code)
接着,將郵件主題、郵件內容、包含的附件路徑加入到一個字典中,組成郵件主體
# 郵件主體 mail_body = { 'subject': '測試報告', 'content_text': '這是一個測試報告', # 純文本或者HTML內容 'attachments': ['./attachments/report.png'], }
最後,將調用send_mail()函數,將郵件發送出去便可
# 收件人 # 能夠指定一我的,字符串;也能夠是多我的,列表 mail_to = "收件人1" # 發送郵件 self.server.send_mail(mail_to, mail_body)
yagmail 只須要幾行代碼,就能實現發送郵件的功能
相比 zmail,yagmail 實現發送郵件的方式更加簡潔優雅
首先,安裝依賴庫
# 安裝依賴庫 pip3 install yagmail
而後,經過帳號、受權碼和服務器地址鏈接郵箱服務器,返回一個服務對象
import yagmail # 鏈接服務器 # 用戶名、受權碼、服務器地址 yag_server = yagmail.SMTP(user='**@126.com', password='受權碼', host='smtp.126.com')
接着,經過 send() 函數,將郵件發送出去
# 發送對象列表 email_to = ['**@qq.com', ] email_title = '測試報告' email_content = "這是測試報告的具體內容" # 附件列表 email_attachments = ['./attachments/report.png', ] # 發送郵件 yag_server.send(email_to, email_title, email_content, email_attachments)
郵件發送完畢以後,關閉鏈接便可
# 關閉鏈接 yag_server.close()
上面總結了 Python 發送郵件的 3 種方式,實際項目中,更推薦使用後兩種方式
我已經將文中所有源碼上傳到公衆號「 AirPython 」後臺,關注公衆號後回覆「 email 」便可得到所有源碼
若是你以爲文章還不錯,請你們 點贊、分享、留言下,由於這將是我持續輸出更多優質文章的最強動力!