Python快速上手系列--邮件发送--详解篇

简介: Python快速上手系列--邮件发送--详解篇

这里是清安,本章就来一起学习一下跑完自动化脚本后如何自动的发送邮件到指定的邮箱。

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是我的配置文件,也就是压缩的路径。最后说明一下,邮件发送需要根据自身框架的实际情况进行变更,所以,这里的只是以介绍的形式告诉你,可以这样做。需要灵活运用,善于百度!

目录
相关文章
|
6月前
|
数据安全/隐私保护 Python
Python实现邮件发送(含详细设置方法),并总结自己遇到的错误
Python实现邮件发送(含详细设置方法),并总结自己遇到的错误
|
3月前
|
前端开发 JavaScript Java
【实操】SpringBoot监听Iphone15邮件提醒,Selenium+Python自动化抢购脚本
本文介绍了一个结合SpringBoot和Python的实用功能,旨在监控iPhone 15的库存状态并通过邮件提醒用户。系统采用SpringBoot监听苹果官网API,解析JSON数据判断是否有货,并展示最近的库存记录。此外,还能自动触发Selenium+Python脚本实现自动化购买。文中详细介绍了技术栈、接口分析、邮件配置及自动化脚本的设置方法。该项目不仅适用于熟悉后端开发的人员,也适合回顾Layui和Jquery等前端技术。
54 0
【实操】SpringBoot监听Iphone15邮件提醒,Selenium+Python自动化抢购脚本
|
4月前
|
监控 网络协议 网络安全
SMTP操作使用详解并通过python进行smtp邮件发送示例
SMTP操作使用详解并通过python进行smtp邮件发送示例
136 3
|
5月前
|
Windows Python
每日自动发邮件(Python +QQ邮箱 + Windows 10定时任务)
每日自动发邮件(Python +QQ邮箱 + Windows 10定时任务)
每日自动发邮件(Python +QQ邮箱 + Windows 10定时任务)
|
4月前
|
机器学习/深度学习 数据采集 自然语言处理
Python基于词袋模型特征和TFIDF特征进行支持向量机模型中文邮件分类项目实战
Python基于词袋模型特征和TFIDF特征进行支持向量机模型中文邮件分类项目实战
|
6月前
|
安全 数据安全/隐私保护 开发者
Python实现简单的邮件发送系统
Python实现简单的邮件发送系统
75 3
|
6月前
|
运维 Shell Linux
第十四章 Python发送邮件(常见四种邮件内容)
第十四章 Python发送邮件(常见四种邮件内容)
|
6月前
|
API Python
Python邮件与日历管理
【4月更文挑战第13天】Python 通过 `smtplib` 和 `email` 发送邮件,`imaplib` 接收邮件。`google-api-python-client` 库用于管理 Google Calendar,示例代码展示了列出日历事件的功能。要使用 Google Calendar API,需设置服务帐户凭据和范围。
62 1
|
6月前
|
Python
Python自动化办公实战案例:文件整理与邮件发送
Python自动化办公实战案例:文件整理与邮件发送
84 0
|
6月前
|
监控 Python
Python监控主机是否存活,并发报警邮件
Python监控主机是否存活,并发报警邮件
下一篇
无影云桌面