首页 > 其他分享 >Selenium39-发送邮件

Selenium39-发送邮件

时间:2022-12-29 22:33:20浏览次数:39  
标签:content Selenium39 server 发送 send mail zmail 邮件

为什么要发送邮件

自动化测试生成了测试报告文件,无法通知相关人员
目标:每次Selenium自动化测试代码运行完毕后,通过自动发送邮件方式告知相关人员具体测试结果信息。

Python发送邮件的库

  • smtplib:以前较为常用
    • smtplib需要设置发件人邮箱中的SMTP服务器,一些主流的邮箱的服务器都可以设置,而可能需求需要使用的某企业邮箱的服务器是没有此项配置的。
  • zmail:简单且容易上手
    • zmail仅支持python3,不需要任何外部依赖,不支持python2。
    • 不需要手动添加服务器地址、端口以及适合的协议。
    • 此外,使用一个python字典来代表邮件内容也更容易理解。

zmail特性

  • 自动寻找服务器地址以及端口
  • 自动使用可靠的链接协议
  • 自动将一个python字典映射成MIME对象(带有附件的)
  • 自动添加头文件以及localhostname来避免服务器拒收你的邮件
  • 轻松自定义你的头文件
  • 支持使用HTML作为邮件内容
  • 仅需python>=3.5,你可以将其嵌入你的项目而无需其他的依赖

安装zmail

pip install zmail==0.2.8
使用须知:
使用Python3,不是Python2

生成邮箱授权码

  • 用浏览器访问:mail.qq.com,用自己的QQ账号登陆进入邮箱,开启smtp服务
    • 开启POP3/SMTP服务
    • 生成授权码,保存下来(注意保密)

测试SMTP和POP功能是否正常

import zmail
server = zmail.server('发件人邮箱地址', '授权码')
if server.smtp_able():
    pass
if server.pop_able():
    pass

自定义服务器配置

  • 如果zmail不能正常工作,可以通过可选参数来自定义server的配置:
server = zmail.server('[email protected]','授权码',smtp_host='smtp.163.com',smtp_port=994,smtp_ssl=True,pop_host='pop.163.com',pop_port=995,pop_tls=True)
server = zmail.server(username="[email protected]",password="授权码",smtp_host="smtp.qq.com", smtp_port=465,config="qq")

zmail使用基本步骤

# 导入zmail模块
import zmail
# 配置邮件账号:
server = zmail.server('发件人邮箱地址', '授权码')
# 发送邮件:
server.send_mail('收件人邮箱地址',{'subject':'标题','content_text':'邮件正文.'})
#一个收件人
# 收件人如果有多个,用列表表示。

增加附件

import zmail
mail_content = {'subject': '标题', 
    'content_text': '邮件正文', 
    'attachments': ['C:\\附件1.zip','C:\\附件2.jpg']
}
server = zmail.server('发件人邮件地址’, '授权码')
server.send_mail('收件人邮件地址', mail_content)

发送HTML作为邮件正文

import zmail
mail_content = {'subject': '标题', 
    'content_text': '邮件正文', 
    'attachments': ['C:\\附件1.zip','C:\\附件2.jpg']
}
server = zmail.server('发件人邮件地址’, '授权码')
server.send_mail('收件人邮件地址', mail_content)
  with open(file_path, 'r',encoding='utf-8') as f:
    mail_content = {
                'from': "[email protected]",# 发件人邮箱
                'subject': '最新的测试报告邮件',# 邮件主题
                'content_html': f.read(),# 邮件正文内容
                'attachments': file_path # 邮件附件
            }

使用抄送

  • 抄送cc
    server.send_mail(['邮箱地址1','邮箱地址2'],mail_content,cc=['抄送者邮箱1','抄送者邮箱2'])
    # 邮箱使用元组形式(命名,邮箱地址)
    server.send_mail(['邮箱地址1','邮箱地址2'],mail_content,cc=[('经理','抄送者邮箱1'),'抄送者邮箱2'])
    

设计发送邮件模块

  • utils包里新建一个模块:send_email.py
    • 导入zmail
    • 定义类EmailUtil
    • 定义方法send_email,参数是file_path代表html报告文件路径
    • 打开html报告文件
    • 准备邮件内容
    • 配置邮件账号
    • 发送邮件
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from ecshop.utils.read_mailconf import MailConf
from ecshop.utils.report_utility import Report

class SendMail():
    def send(self,filename):
        # #设置登录及服务器信息
        # mail_host = 'smtp.qq.com'
        # mail_user = '登录者'
        # mail_password = '授权码'
        # sender = '[email protected]'
        # receivers = ['[email protected]']
        mc=MailConf()
        mail_host=mc.get_mail_host()
        mail_user=mc.get_mail_user()
        mail_password=mc.get_mail_password()
        sender=mc.get_sender()
        receivers=mc.get_receivers()

        #设置eamil信息
        #添加一个MIMEmultipart类,处理正文及附件
        message = MIMEMultipart()
        message['From'] = sender
        message['To'] = receivers[0]
        message['Subject'] = 'Test Report'+filename
        #推荐使用html格式的正文内容,这样比较灵活,可以附加图片地址,调整格式等
        with open(filename,'r',encoding="utf-8") as f:
            content = f.read()
        #设置html格式参数
        part1 = MIMEText(content,'html','utf-8')
        #添加一个txt文本附件
        with open(filename,'r',encoding="utf-8")as h:
            content2 = h.read()
        #设置txt参数
        part2 = MIMEText(content2,'plain','utf-8')
        #附件设置内容类型,方便起见,设置为二进制流
        part2['Content-Type'] = 'application/octet-stream'
        #设置附件头,添加文件名
        part2['Content-Disposition'] = 'attachment;filename="report.html"'
        # #添加照片附件
        # with open('1.png','rb')as fp:
        #     picture = MIMEImage(fp.read())
        #     #与txt文件设置相似
        #     picture['Content-Type'] = 'application/octet-stream'
        #     picture['Content-Disposition'] = 'attachment;filename="1.png"'
        #将内容附加到邮件主体中
        message.attach(part1)
        message.attach(part2)
        # message.attach(picture)

        #登录并发送
        try:
            smtpObj = smtplib.SMTP()
            smtpObj.connect(mail_host,25)
            smtpObj.login(mail_user,mail_password)
            smtpObj.sendmail(
                sender,receivers,message.as_string())
            print('success')
            smtpObj.quit()
        except smtplib.SMTPException as e:
            print('error',e)

if __name__ == '__main__':
    # SendMail().send("../report/test_report.html")
    SendMail().send(Report().get_lastest_report())

使用发送邮件模块

  • 在测试套件里发送html报告给相关人员
# 导入EmailUtil
from utils.send_mail import EmailUtil
# 测试套件末尾,发送邮件,参数是前面准备好的带有变化数据的测试结果报告文件名称
EmailUtil().send_email(report_file_path)#发送邮件

标签:content,Selenium39,server,发送,send,mail,zmail,邮件
From: https://www.cnblogs.com/sean-test/p/17013716.html

相关文章

  • java发送http请求
    java发送http请求有几种方法1、HttpURLConnection、URLConnection使用JDK原生提供的net,无需其他jar包;2、HttpClient3、Socket本文使用依赖于第三方jar包的HttpClient......
  • vue websockt 实现站内消息的发送和接收
    1.什么是 WebSocketwebsocket是HTML5开始提供的一种网络通信协议,它的目的是在浏览器之间建立一个不受限的双方通信的通道,比如说,服务器可以在任意时刻发送信息给浏览器。......
  • 获取USG防火墙的NAT记录并发邮件给相应人员提醒
    授权USGNAT配置的时候需要遵循NAT_张三_20221201_长期importparamikoimportsmtplibfromemail.mime.textimportMIMETextfromemail.headerimportHeaderimpor......
  • 如何通过外贸邮件营销获取更多客户订单
    对于外贸企业来说,要想开发新客户、与潜在客户建立联系、推广新产品等,邮件营销是非常有效的营销渠道。但是,由于很多外贸业务员没有采用科学的发送方式,只是不停地往外发送邮件......
  • springboot mail 发送163邮件基础配置操作
    #发送邮件配置spring.mail.protocol=smtps#配置smtp服务器地址spring.mail.host=smtp.163.com#服务器的端口spring.mail.port=465#配置邮箱用户名spring.mail......
  • Gitea 的邮件通知
    有这样的一个需求,当仓库中被推送或者更新代码的时候,希望在邮件中收到邮件通知。Gitea是可以实现这个功能的,但是在默认情况下这个功能是关闭的。修改配置文件根据Gitea......
  • 利用py实现邮件群发功能——办公必备利器
    作为一个不负责任的公号运营者,最近一直忙着搬砖,也没有太多时间来更新公众号,小编目前还是一个在惨遭社会蹂躏的低级码农,随随便便的一个高难度技术问题,仿佛就成了压死我的最后......
  • 欢迎加入Apache Mina高性能通信框架研究邮件列表.
    一直到现在,我都没有发现国内讨论ApacheMina高性能通信框架研究的好地方。我也经常被网友问起一些有关ApacheMina高性能通信框架研究相关的问题,有些问题是很基本的网络编......
  • 在Netty底层监控消息发送到Socket的时间
    1、调用writeAndFlush方法之后获取ChannelFuture;2、新增消息发送ChannelFutureListener,监听消息发送结果,如果消息写入网络Socket成功,则Netty会回调C......
  • 超过最大重发次数后如何设置文件仍然发送失败的邮件告警?
    在使用知行EDI系统时,客户常常会遇到由于某一段时间网路不稳定,而导致文件发送失败的情况,但由于我们配置了自动重发机制,EDI系统会根据设置的时间间隔重新发送,但如果重发次数......