Python(1)自動發送郵件

python發郵件須要掌握兩個模塊的用法,smtplib和email,這倆模塊是python自帶的,只需import便可使用。smtplib模塊主要負責發送郵件,email模塊主要負責構造郵件。html

smtplib模塊主要負責發送郵件:是一個發送郵件的動做,鏈接郵箱服務器,登陸郵箱,發送郵件(有發件人,收信人,郵件內容)。python

email模塊主要負責構造郵件:指的是郵箱頁面顯示的一些構造,如發件人,收件人,主題,正文,附件等。api

1.smtplib模塊

import smtplib smtp = smtplib.SMTP() smtp.connect('smtp.163.com,25') smtp.login(username, password) smtp.sendmail(sender, receiver, msg.as_string()) smtp.quit()

2.email模塊

from email.mime.text import MIMEText from email.header import Header from email.mime.application import MIMEApplication from email.mime.multipart import MIMEMultipart

咱們必須把Subject,From,To添加到MIMEText對象或者MIMEMultipart對象中,郵件中才會顯示主題,發件人,收件人。服務器

# 組裝郵件內容和標題,中文需參數‘utf-8’,單字節字符不須要
        msg = MIMEMultipart() msg['Subject'] = Header(subject) msg['From'] = sender msg['To'] = ','.join(user_list)

3.編寫發件函數,方便調用

自動化測試報告爲HTML,以附件方式發送,併發

無論什麼類型的附件,均可以用MIMEApplication,MIMEApplication默認子類型是application/octet-streamapp

# 發送html內容的郵件
import smtplib import time import os from email.mime.text import MIMEText from email.header import Header from email.mime.application import MIMEApplication from email.mime.multipart import MIMEMultipart class SendMail(): def find_new_file(self, dir): '''查找目錄下最新的文件''' file_lists = os.listdir(dir) file_lists.sort(key=lambda fn: os.path.getmtime(dir + "\\" + fn) if not os.path.isdir(dir + "\\" + fn) else 0) # print('最新的文件爲: ' + file_lists[-1])
        file = os.path.join(dir, file_lists[-1]) print('完整文件路徑:', file) return file def send_mail_html(self, file): '''發送html格式測試報告郵件'''
        # 發送郵箱
        sender = 'name@163.com'
        # 接收郵箱
        user_list = [ 'user@foxmail.com', 'user@qq.com', 'user@qq.com'] # 發送郵件主題
        t = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) subject = '接口自動化測試結果(請下載附件查看)_' + t # 發送郵箱服務器
        smtpserver = 'smtp.163.com'
        # 發送郵箱用戶/密碼
        username = 'user@163.com' password = 'youer_password'
        # 組裝郵件內容和標題,中文需參數‘utf-8’,單字節字符不須要
        msg = MIMEMultipart() msg['Subject'] = Header(subject) msg['From'] = sender msg['To'] = ','.join(user_list) # ---這是附件部分---
        # html類型附件,無論什麼類型的附件,均可以用MIMEApplication,MIMEApplication默認子類型是application/octet-stream。
        part = MIMEApplication(open(file, 'rb').read()) part.add_header('Content-Disposition', 'attachment', filename=file) msg.attach(part) # 登陸併發送郵件
        try: smtp = smtplib.SMTP() smtp.connect(smtpserver) smtp.login(username, password) smtp.sendmail(sender, user_list, msg.as_string()) except BaseException: print("郵件發送失敗!") else: print("郵件發送成功!") finally: smtp.quit() if __name__ == '__main__': sen = SendMail() dir = r'D:\\api\\report'  # 指定文件目錄
    b = sen.find_new_file(dir)  # 查找最新的html文件
    sen.send_mail_html(b)  # 發送html內容郵件

ps:函數

python郵件發送給多人時,只有第一我的能收到的問題,測試

MIMEText()["to"]的數據類型與sendmail(from_addrs,to_addrs,...)的to_addrs不一樣;前者爲str類型,多個地址使用逗號分隔,後者爲list類型。ui

expects toaddrs to be a list of email addresses. (Or, of course, just use recipients in place of toaddrs.)

參考連接:https://stackoverflow.com/questions/20509427/python-not-sending-email-to-multiple-addressesspa

相關文章
相關標籤/搜索