python smtplib 모듈 자동 메 일 수신 기능(2)
6090 단어 pythonsmtplib우편물 을 수발 하 다.
1.최신 test 획득report
#coding=utf-8
import smtplib
from email.mime.text import MIMEText
from email.header import Header
import os,datetime,time
result_dir='C:\\Python34\\test_report' # test_report
lists=os.listdir(result_dir)
print (lists)
lists.sort(key=lambda fn: os.path.getmtime(result_dir+"\\"+fn)
if not os.path.isdir(result_dir+"\\"+fn) else 0)
print (' :'+lists[-1])
file=os.path.join(result_dir,lists[-1])
print (file)
F5,실행,획득:그러면 C:\Python 34\testreport\2016-03-24-16_00_34_result.html 는 최신 testreport
2.자동 발송 메 일 기능 통합
주로 다음 과 같은 몇 가지 부분 을 실현 한다.
1.관련 케이스 를 실행 하여 HTML test report 를 생 성 합 니 다.
2.test report 를 지정 한 메 일 로 보 냅 니 다.
스 크 립 트 바로 올 리 기:
import unittest
import HTMLTestRunner
import os
import time
import datetime
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
from email.header import Header
#
def sentemail(file_new):
#
sender='[email protected]'
#
receiver='[email protected]'
#
f=open(file_new,'rb')
mail_body=f.read()
f.close()
msg=MIMEText(mail_body,_subtype='html',_charset='utf-8')
#
msg['Subject']=u" "
msg['date']=time.strftime('%a, %d %b %Y %H:%M:%S %z')
smtp=smtplib.SMTP()
#smtpserver='smtp.263xmail.com'
smtp.connect('smtp.263xmail.com')
username='[email protected]'
password='123456'
smtp.login(username,password)
smtp.sendmail(sender,receiver,msg.as_string())
smtp.quit()
print ('Email has been sent out!')
# ,
def sendreport():
result_dir='C:\\Python34\\test_report'
lists=os.listdir(result_dir)
lists.sort(key=lambda fn: os.path.getmtime(result_dir+"\\"+fn)
if not os.path.isdir(result_dir+"\\"+fn) else 0)
#print (u' :'+lists[-1])
print (u' :'+lists[-2])
#
#file_new=os.path.join(result_dir,lists[-1])
file_new=os.path.join(result_dir,lists[-2])
print (file_new)
sentemail(file_new)
listaa='C:\\Python34\\test_case'
def createsuitel():
testunit=unittest.TestSuite()
'''discover '''
discover=unittest.defaultTestLoader.discover(listaa,
pattern='UnitTestHtml_*.py',
top_level_dir=None)
for test_suite in discover:
for test_case in test_suite:
testunit.addTests(test_case)
print (testunit)
return testunit
alltestnames=createsuitel()
now = time.strftime('%Y-%m-%d-%H_%M_%S',time.localtime(time.time()))
file_name='C:\\Python34\\test_report\\'+now+'_result.html'
fp = open(file_name, 'wb')
runner =HTMLTestRunner.HTMLTestRunner(
stream=fp,
title=u' ',
description=u' :')
if __name__=="__main__":
runner.run(alltestnames)
time.sleep(2)
sendreport()
fp.close()
F5 실행,획득:그림 과 같이 메 일 박스 보기:
그림 과 같이 메 일 내용 열기:
OK,이렇게 실제 프로젝트 의 자동 메 일 수신 기능 을 실현 했다.
그리고 몇 가지 지식 포인트:
1. os.listdir()
디 렉 터 리 에 있 는 모든 파일 목록 가 져 오기
2. lists.sort()
Python 목록 에 내 장 된 목록 이 있 습 니 다.sort()방법 은 목록 에 있 는 요소 의 위 치 를 바 꾸 는 데 사 용 됩 니 다.
3. key=lambda fn:
key 는 매개 요소 에 비교 값 을 추출 하 는 매개 변 수 를 가 진 함수 입 니 다.기본 값 은 None 입 니 다.즉,모든 요 소 를 직접 비교 하 는 것 입 니 다.
4.os.path.isdir()
isdir()함수 가 디 렉 터 리 인지 여 부 를 판단 합 니 다.
5.lists[-1]
-1 은 파일 목록 의 최대 값,즉 최근 에 만 든 파일 을 가 져 오 는 것 을 나타 낸다.
6.os.path.join()
join()방법 은 문자열 을 연결 하 는 데 사 용 됩 니 다.경로 와 파일 이름 을 연결 하면 디 렉 터 리 에 새로 만 든 파일 이름 의 전체 경 로 를 얻 을 수 있 습 니 다.
7.sentmail(file_new)
sentmail()메 일 함 수 를 정의 하고 매개 변수 file 을 받 습 니 다.new,최신 생 성 된 테스트 보고서 파일 을 받 는 것 을 표시 합 니 다.
8.open(file_new, ‘rb')
최신 생 성 된 테스트 보고서 파일 을 읽 기(rb)방식 으로 엽 니 다.
9.sendreport()
sendreport()를 정의 하여 최신 생 성 된 테스트 보고서 파일 filenew.
이 sample 을 성공 적 으로 실현 하기 전에 다음 과 같은 문제 가 발생 했 습 니 다.
지정 한 메 일 은 정상적으로 메 일 을 받 을 수 있 지만 받 은 메 일의 내용 은 비어 있 습 니 다.이것 은 HTML TestRunner 가 파일 을 보고 하 는 메커니즘 에 의 한 것 입 니 다.테스트 용례 가 실행 되 기 전에 보고 파일 을 생 성 합 니 다.전체 프로그램 이 완전히 실행 되 기 전에 프로그램 이 실행 한 결 과 를 파일 에 기록 하지 않 았 기 때문에 용례 가 실 행 된 후에 메 일 을 보 내 면 메 일의 내용 이 비어 있 습 니 다.
첫 번 째 스 크 립 트 중 두 줄 은 다음 과 같 습 니 다.
print (u' :'+lists[-1])
#
file_new=os.path.join(result_dir,lists[-1])
그래서 운행 이 끝 난 후 문제 가 생 겨 지정 한 메 일 은 정상적으로 메 일 을 받 을 수 있 지만 받 은 메 일의 내용 은 비어 있 었 다.스 크 립 트 실행 이 끝나 기도 전에 메 일의 자동 발송 기능 이 실 행 된 것 이다.따라서 위의 두 줄 을 고 친 스 크 립 트:
print (u' :'+lists[-2])
#
file_new=os.path.join(result_dir,lists[-2])
따라서 전체 프로그램 이 실행 되 지 않 았 을 때 현재 테스트 보고 서 를 보 낼 수 없습니다.우 리 는 지난번 실행 결과 의 보고 서 를 선택 하여 보 낼 수 있 습 니 다.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.