1. 程式人生 > 其它 >【實操系列】| Python傳送郵件的一個具體應用

【實操系列】| Python傳送郵件的一個具體應用

技術標籤:教程python技能python程式語言效率

歡迎關注微信公眾號“Python小灶,和我一起每天學習Python新知識”
在這裡插入圖片描述

文章目錄

簡單介紹

本人是自動化測試工程師,主要語言為Python。
實操系列是結合我平時工作中遇到的情況寫的一些指令碼,總結分享出來的東西;
因為真實的場景難以模擬,只能說個大概,但是因為真實場景的總結分享,應該來說有一定的參考和學習價值。
不過有沒有通用性就不好講了,因為這個完全是和業務相關,業務場景決定指令碼邏輯,寫程式碼主要還是鍛鍊解決問題的能力。

需求

公司測試場景是用遠端PC(windows10)連線測試物料,具體測試啥就不說了哈,現在大部分都是這種場景:遠端PC連線測試物料,本地PC連線遠端PC操作,直接自動化測試。
現在的問題是,在測試場景不穩定的情況下,經常會測試中斷,然後登陸遠端伺服器排查問題後繼續跑起來。
因為不知道何時異常中斷,需要頻繁的登陸(這個環節還沒整合到CI)檢視情況,所以想定時將環境截圖或者蒐集log,然後通過郵件傳送給指定人員,如果有異常,再登陸檢視(每次輸賬號密碼也很煩人)。

如果沒有此應用場景,可以作為參考。

回顧

用Python傳送郵件的基本實現參考我之前的公眾號文章

更多Python傳送郵件資料點選此處

程式碼

導包

# -*- coding: UTF-8 -*-

 

import os

import time

import socket

import smtplib

from email.mime.image import MIMEImage

from email.mime.multipart import MIMEMultipart

from email.mime.text import MIMEText

from email.header import Header

from PIL import ImageGrab

郵件的一些常規設定

# 第三方SMTP服務

mail_host =
"smtp.qq.com" # 設定伺服器 mail_user = "[email protected]" # 你的使用者名稱 mail_pass = "xxx" # 你生成的口令,不知道的請看回顧 # 設定傳送人和收件人 sender = "[email protected]" # 會顯示由這個郵箱代發 receivers = "[email protected]" # 你要傳送給的人,可以固定,可以讀取檔案 pic_name = time.strftime("%Y%m%d_%H%M%S", time.localtime()) hostname = socket.gethostname() ip = socket.gethostbyname(hostname)

截圖功能

def pic():

    im = ImageGrab.grab()

    im.save(r'C:\Python_Code\email\picture\{}.jpeg'.format(pic_name))

    time.sleep(2)

傳送郵件功能

def send_email(info):

    # 傳送郵件

    subject = 'IP:{}    Time:{}'.format(ip, pic_name)  # 郵件主題

    msg = MIMEMultipart('related')

    # 第一個引數為郵件內容,第二個引數為設定文字格式,第三個引數為編碼設定

    content = MIMEText('<p>status check</p>'

                        '<html><body><img src="cid:imageid" alt="imageid"></body></html>', 'html', 'utf-8')

    msg.attach(content)

    msg['Subject'] = Header(subject, 'utf-8')  # 標題

    msg['From'] = Header("blyang", 'utf-8')  # 發件人

 

    file = open(r'C:\Python_Code\email\picture\{}.jpeg'.format(pic_name), "rb")

    img_data = file.read()

    file.close()

 

    img = MIMEImage(img_data)

    img.add_header('Content-ID', 'imageid')

    msg.attach(img)

 

    try:

        smtpObj = smtplib.SMTP_SSL(mail_host, 465)  # qq郵箱帶SSL

        smtpObj.login(mail_user, mail_pass)  # 登陸

        smtpObj.sendmail(sender, receivers, msg.as_string())

        print("send success")

    except smtplib.SMTPException:

        print("Error: send fail")

 

 

if __name__ == "__main__":

    while True:

         pic()

         send_email()

         time.sleep(60 * 60)

總結

這是一個臨時的小需求,不過確實可以幫助節省很多精力,省去了頻繁登陸檢視的低效,事實上也可以傳送日誌,附件等等,看具體場景。

可能遇到的問題

截圖失敗及解決方法