这里是清安,本章就来一起学习一下跑完自动化脚本后如何自动的发送邮件到指定的邮箱。
zmail操作:
1. 导包 import zmail2. 邮件内容,包含:主题(subject)、正文(content_text)、附件(attachments)3. 发件人信息,包含:发件人账号,密码(授权码)4. 发送邮件,包含:收件人地址,邮件内容5. 群发邮件,收件人地址写在一个列表中,多个收件人以逗号分隔开
纯文字发送:
import zmail #邮件内容,主题subject内容content_text,不能随意定义 msg = { 'subject':'邮件主题:清安的测试报告', 'content_text':'通过率100%', } #发件人,授权码 sender = ('123456798@qq.com','dfddfdfdfggrgrgc') #收件人 reciver = '123456789@163.com' #群发形式,这里列表不支持改成元组 #reciver = ['123465789@163.com','12345678@qq.com'] # 登录,索引值账号、密码 sender = zmail.server(sender[0],sender[1])#(*sender)也叫解包,自动填充 # 发送邮件,发动到哪个邮件,以及发送内容 sender.send_mail(reciver,msg)
需要值得注意的是,这里的操作很简单,msg是一个字典变量,我们自己设定的,但是 里面的键是不能够改变的,是这个库内部规定的,其他的变量名可以随意的取,这里的sender是你的账号加上授权码。也可以进行群发哦,但是需要是列表形式的。这里说一下授权码怎么弄,在你邮件中,找到设置按钮,点击后进入设置界面,再找到你的账户按钮,点击进入,一直下拉:把这些服务全部打开:点击生成授权码,按照操作来,发送短信,点击我已发送,就可以得到一串授权码, 记得自己收好哦。
html格式发送:
我们还可以发送HTML形式的文档出去 ,所以这波操作也是一个关键,后续自动化发送邮件我们需要将报告进行压缩,如何以zip或者rar又或者以其他形式的方式进行发送。
# 方法一 comtent = ''' html内容 ''' # 方法二 with open('email_msg.html','r',encoding='utf-8') as e: comtent = e.read() #这里如果正文跟html都写,会被html格式内容跟所覆盖掉 msg = { 'subject':'邮件主题:自动化测试报告', 'content_html':comtent, } #发件人 sender = ('123456798@qq.com','dfddfdfdfggrgrgc') #收件人 reciver = '123456789@163.com' #群发形式,这里列表不支持改成元组 #reciver = ['123465789@163.com','12345678@qq.com'] # 登录,索引值账号、密码 sender = zmail.server(sender[0],sender[1])#(*sender)也叫解包,自动填充 # 发送邮件,发动到哪个邮件,以及发送内容 sender.send_mail(reciver,msg)
这里清安给出了两种方法,第一种呢比较拉跨,还是用第二种吧,html形式的就不是很适合发送不得了的图片了,但是我们可以以附件形式去发送。
附件格式发送:
直接上代码:
#发送附件,附件(attachments),多个附件的话用列表形式 msg = { 'subject':'邮件主题:你好', 'content_text':'附件', 'attachments':'1.png' } #'attachments':['1.png','test.make.txt'] #发件人 sender = ('123456798@qq.com','dfddfdfdfggrgrgc') #收件人 reciver = '123456789@163.com' #群发形式,这里列表不支持改成元组 #reciver = ['123465789@163.com','12345678@qq.com'] # 登录,索引值账号、密码 sender = zmail.server(sende[0],sende[1])#(*sender)也叫解包,自动填充 # 发送邮件,发动到哪个邮件,以及发送内容 sender.send_mail(reciver,msg)
封装
第一种
我们不想每次都来重新写这些代码,那么我们就封装一下,需要的时候直接导入类调用使用就好了。
class Email_file(): # 主题,正文,附件,初始化对应的属性,床送多个附件就必须要*attachments def __init__(self,subject,content_text,attachments): self.subject = subject self.content_text = content_text self.attachments = attachments #传送多个附件,转成列表形式 #self.attachments = list(attachments) self.msg= { 'subject':self.subject, 'content_text':self.content_text, 'attachments':self.attachments, } def send_email(self,*sender_more,**romve_more): #单个发件人,多个发件人 #self.sender = '1104282189@qq.com' self.sender = sender_more #收件人 # self.remove = '1104282189@qq.com' #多个收件人 self.list_remove = [] #把字典值存入列表中 for i in romve_more.values(): self.list_remove.append(i) #登录操作 self.get_email = zmail.server(*self.sender) #发送 self.get_email.send_mail(self.sender,self.msg) m = Email_file('邮件主题:你好','邮件正文内容:你好!','email_msg.html') #传值,多个发件人,多个收件人 m.send_email('123456789@qq.com','qokdghjdgjdkejye',user1='123456789@163.com',user2='123456789@qq.com')
第二种:
import yagmail import time from until_config.readconfig import readConfig import shutil class Mail: """ 邮件相关类 """ def log(self, content): now_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) print(f'{now_time}: {content}') def sendmail(self, receivers, title, msg, attachment): """ 发送邮件 Arguments: msg {str} -- 邮件正文 title {str} -- 邮件标题 receivers {list} -- 邮件发送者,数组 attachment -- 测试报告附件 """ yag = yagmail.SMTP( host='smtp.qq.com', user='自己的邮箱QQ', password='邮箱密匙,需要在自己邮箱看', smtp_ssl=True ) try: yag.send(receivers, title, msg, attachment) self.log("邮件发送成功") except BaseException as e: print(e) self.log("Error: 无法发送邮件") def Filezip(self): zipfile = readConfig.Base_report shutil.make_archive(readConfig.Base_report,"zip",zipfile) # if __name__ == '__main__': # # # 定义邮件参数内容 # msg = '测试报告已生成,请注意查收' # 邮件正文 # title = '《测试报告》' # 邮件标题 # receivers = ['1111111'] # 邮件接收者 # attachment = [readConfig.Base_report] # # # 通过邮件发送最新的报告 # Mail().sendmail(receivers, title, msg, attachment)
这里清安写了压缩的测试报告的步骤,也就是Filezip方法中。第二种方法也是另一个邮件发送的模块,做为了解,也可以直接拿去使用。此外,这里的readConfig是我的配置文件,也就是压缩的路径。最后说明一下,邮件发送需要根据自身框架的实际情况进行变更,所以,这里的只是以介绍的形式告诉你,可以这样做。需要灵活运用,善于百度!