面向对象:python自动化发送邮件

selenium 自动发送邮件_最新的测试报告

# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# 需要准备的信息:
# SMTPSERVER = 'smtp.qq.com'  # 发邮件服务器
# USERNAME = 'hnx****@qq.com'  # 用户名
# PASSWORD = 'qtiyqviftfucbeje'  # 密码
# SEND = 'hn****@qq.com'  # 发邮件者
# RECRIVER = 'hn****@qq.com'  # 接收邮件这
# SUBJECT = 'Python email test'  # 发送邮箱主题
# EMAIL_TEXT = "这是一个自动发送邮件的测试邮件"  # 邮件内容
# REPORT_PATH = '../reprot'  # 测试报告位置  邮件附件
# PATH = "../data_file/data.ymal"
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

1.首先,创建一个在项目目录中创建一个 data_file/data.yaml 文件

data:
 "SMTPSERVER": "smtp.qq.com"
 "USERNAME": "******@qq.com"
 "PASSWORD": "qtiyqviftfucbeje"
 "RECRIVER": "******@qq.com"
 "SUBJECT": "Python email test"
 "EMAIL_TEXT": "这是一个自动发送邮件的测试邮件"
 "REPORT_PATH": "../report"

还需要创一个report的放置测试报告的文件夹,里面放置文件为html格式。

基础项目目录如下:

object- data_file
       - data.ymal
     - base
       - __init__.py
       - casebase.py
     - testcase
       - test_001.py
       - test_002.py
     - testpage
       - page001.py
       - page002.py
     - testsuite
       - suite.py
     - runer
       - runner.py
     - tool
       - E_mail.py

2.调用相关方法, 写一个E_mail 类来封装这个邮件发送的

import datetime
import os
import smtplib
import yaml
from email.header import Header
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

class E_mail(object):
    TIME = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")  # 使用格式化时间,方便时间后期调用

    def __init__(self, server, username, password, to, subject=None, text=None, reportpath='../report' or None):
        self.rpp = reportpath  # 测试报告的位置
        self.lists = os.listdir(reportpath)  # 系统获取默认的目录下文件
        self.server = server  # 邮箱服务器
        self.user = username  # 邮箱地址
        self.pwd = password  # 邮箱密码
        self.to = to  # 发送给谁
        self.sub = subject  # 邮件标题
        self.txt = text  # 邮件内容
        self.smtp = smtplib.SMTP()  # 调用邮箱协议
        self.msg = MIMEMultipart()  # 调用邮箱携带 超文本内容 协议方式,而且兼容MIMEText(多用途互联网邮件扩展类型)
        self.att = MIMEText(open(self.__new_dir(), 'r+', encoding='utf-8').read(), 'base64', 'utf-8')

    def comment(self):
        """
        该方法最主要输出的是文本类邮件,且只输出文本类邮件
        """
        self.msg['Subject'] = Header(
            f'{self.sub}(' + str(self.TIME) + ')', 'utf8')  # 在邮箱的超文本协议中添加 标题
        self.msg['From'] = self.user  # 谁发送
        self.msg['To'] = self.to  # 发送给谁
        self.msg.attach(MIMEText(self.txt, 'html', 'utf-8'))  # 执行发送内容
        print("成功获取正文内容")

    def __new_dir(self):
        """获取最新测试报告"""
        self.lists.sort(key=lambda fn: os.path.getmtime(self.rpp + "\\" + fn))  # 根据所在目录的内容用时间排序(从旧到新)
        return os.path.join(self.rpp, self.lists[-1])  # 返回给当前函数,(self.rpp)当前地址的倒数第一个文件

    def accessory(self):
        """获取最新的测试报告,并把测试报告写进邮件中"""
        # Content-Type 指示响应内容的格式
        self.att["Content-Type"] = 'application/octet-stream'
        # content-disposition 指示如何处理响应内容。
        # inline:直接在页面显示 attchment:以附件形式下载
        self.att["Content-Disposition"] = f'attachment; filename={self.rpp + self.TIME}'
        self.msg.attach(self.att)
        print("成功获取附件")

    def send(self):
        """发送邮件"""
        self.smtp.connect(self.server)  # 获取邮箱的服务器
        self.smtp.login(self.user, self.pwd)  # 登录邮箱账户
        self.smtp.sendmail(self.user, self.to, self.msg.as_string())  # 发送邮件
        self.smtp.quit()  # 关闭邮箱
        print("邮件发送成功")

3.为方便使用ymal进行参数化,再写一个新的类封装上一个类:

class Email_send(object):
    """重新封装邮件"""
    def __init__(self, path="../data_file/data.ymal" or None):
        self.PATH = path

    def e_send(self):
        """获取ymal文件中的data中的参数"""
        with open(self.PATH, encoding="utf-8") as yaml_file:
            data = yaml.safe_load(yaml_file)
            value = list(data["data"].values())
        try:
            # 执行发送邮件的过程
            email = E_mail(value[0], value[1], value[2], value[3], value[4], value[5], value[6])  # 实例化E_mail对象,调用参数
            email.comment()  # 发送文本信息
            email.accessory()  # 发送附件内容
            email.send()  # 发送邮件
        except(ValueError, ArithmeticError):
            print("配置文件参数值异常")

4.最后实例化对象并调用,携带附件的邮件发送成功:

# 使用的时候直接在需要的位置调用Email_send,输入参数PATH,因为我这里写了默认参数就不写了
em = Email_send()
em.e_send()  

欢迎同学和我一起来学习python自动化

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
要实现Python自动化发送邮件,首先需要准备工作和设置邮箱的SMTP服务。可以参考《快学Python自动化办公轻松实战》一书中的相关章节\[1\]。在准备工作中,需要了解电子邮件的基础知识,并使用Python邮件库来实现自动发送邮件\[2\]。 在Python中,可以使用SMTP()和send()方法来实现邮件的发送。SMTP()方法用于建立与邮件服务器的连接,而send()方法用于发送邮件。具体的实现步骤可以参考书中的实例代码\[2\]。 在实现之前,需要开启自己邮箱的SMTP服务。一般可以在邮箱的设置中找到SMTP服务的开启选项。开启SMTP服务后,可以获取到当前账户的授权码,该授权码在程序实现的过程中会用到\[3\]。 总结起来,要实现Python自动化发送邮件,需要进行以下步骤: 1. 了解电子邮件的基础知识。 2. 使用Python邮件库来实现自动发送邮件。 3. 开启自己邮箱的SMTP服务,并获取授权码。 参考资料: \[1\] 《快学Python自动化办公轻松实战》, 黄伟、朱鹏伟, 电子工业出版社, 9787121436345, 2022. \[2\] 参考信息中的《快学Python自动化办公轻松实战》一书中的相关章节。 \[3\] 参考信息中的《快学Python自动化办公轻松实战》一书中的相关章节。 #### 引用[.reference_title] - *1* *2* *3* [python自动发送邮件实现](https://blog.csdn.net/weixin_42521211/article/details/128857411)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v4^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丨土豆丨

谢谢您的鼓励,我会继续努力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值