Python--yagmail,我用这个模块每天定时给同事发邮件

简介: Python--yagmail,我用这个模块每天定时给同事发邮件

前言

想要实现自动化发送邮件,自己的邮箱必须开通SMTP服务。

开通SMTP服务

以QQ邮箱为例,其他邮箱类似。点击下方的「生成授权码」依照提示发送短信后,就能看到一串授权码了,例如:复制这个授权码,别点击确定了,然后啥也不知道。

模块/包

yagmail模块先对简单易用,非常适合初学者。且底层用的依旧是smtplib

pip install yagmail

导入模块

import yagmail

发送邮件

import yagmail
mail = yagmail.SMTP('发送邮箱的账号','发送邮箱的授权码','smtp.qq.com')
mail.send('接受邮件的账号',"测试邮件","Hello QingAn")
mail.close()

send源码参数

def send(
        self,
        to=None,
        subject=None,
        contents=None,
        attachments=None,
        cc=None,
        bcc=None,
        preview_only=False,
        headers=None,
        prettify_html=True,
        message_id=None,
        group_messages=True,
    )
to 收件人邮箱
subject 邮件主题
attachments 附件
cc 抄送
bcc 密送(类似于抄送,但是收件人看不到其他人的邮箱地址)
perview_only 仅预览(可以发送,但是接收方收不到)
headers 头部信息(需要时字典格式)
prettify_html 修饰HTML
message_id 消息ID
group_messages 组消息

初始化源码参数

def __init__(
        self,
        user=None,
        password=None,
        host="smtp.gmail.com",
        port=None,
        smtp_starttls=None,
        smtp_ssl=True,
        smtp_set_debuglevel=0,
        smtp_skip_login=False,
        encoding="utf-8",
        oauth2_file=None,
        soft_email_validation=True,
        dkim=None,
        **kwargs
    )
user 用户名
password 密码
host 发信服务
port 默认端口
smtp_ssl True
smtp_set_debuglevel debug等级
smtp_skip_login 跳过登录
encoding 编码格式
oauth2_file 身份鉴权
soft_email_validation 邮箱验证

邮箱域名

163邮箱 smtp.163.com
126邮箱 smtp.126.com
qq邮箱 smtp.qq.com

SMTP服务器域名都类似

批量发送邮箱

import yagmail
mail = yagmail.SMTP('11049@qq.com','yrynkiaaj','smtp.qq.com')
contents = ['下午好',"安某人批量代码测试"]
to_list = ['1867@163.com','204110@qq.com']
# 接收人,标题,内容,抄送
mail.send(to_list,"测试邮件",contents,cc="8736@qq.com")
mail.close()

自定义邮箱内容

import yagmail
mail = yagmail.SMTP('110489@qq.com','yrynkergiaaj','smtp.qq.com')
# 这里面有图片的写法,以及加入了超链接的写法
contents = ['下午好',"以此文件为准。安某人批量代码测试。",yagmail.inline(r"E:\VUE_DEMO\gzh.jpg"),'<a href="https://www.yuque.com/docs/share/6c284c79-d721-42bc-b8c5-210c05e7324b?#"> 《自动化发送邮件(yagmail)》密码:kl1l</a>']
# 附件
attachments = r'E:\352稳定性测试脚本.bat'
to_list = ['1867@163.com','2041@qq.com']
mail.send(to_list,"测试邮件",contents,cc="876@qq.com",headers={"name":"清安"},attachments=attachments)
mail.close()

最后的呈现

b5e87121c9a9c821b86805ed93ae1d9.jpg

封装

class Mail:
    """
    邮件相关类
    """
    def log(self, content):
        now_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
        print(f'{now_time}: {content}')
    def yag_SMTP(self):
        return yagmail.SMTP(
            host=read_smtp()[0], user=read_smtp()[1],
            password=read_smtp()[2], smtp_ssl=True
        )
    def sendmail(self, contents=read_config()[0], subject=read_config()[1],
                 to=read_config()[2], attachments=read_config()[3]):
        """
        发送邮件
        Arguments:
            msg {str} -- 邮件正文
            title {str} -- 邮件标题
            receivers {list} -- 邮件发送者,数组
            attachment -- 测试报告附件
        """
        try:
            self.yag_SMTP().send(contents=contents, subject=subject,
                                 to=to, attachments=attachments)
            self.log("邮件发送成功")
        except BaseException as e:
            print(e)
            self.log("Error: 无法发送邮件")

拓展

在封装的基础上增加一个压缩的方法

import shutil
 def Filezip(self):
        try:
   # 在路径下寻找指定的包
            if os.path.exists('包路径/包名'):
                os.remove('删除包')
        except Exception as e:
            print(e, "没有zip压缩包可以删除")
        finally:
   # 以.zip为后缀,root_dir开始打包的路径
            shutil.make_archive('打包到指定的路径', "zip", root_dir=re.Base_reports)
    def func(self):
        # 压缩文件
        self.Filezip()
        # 发送邮件
        self.sendmail()

错误

exception yagmail.error.YagAddressError
原因:无法识别的电子邮件,一般的,指电子邮件格式错误
解决方案:检查电子邮件的格式
exception yagmail.error.YagConnectionClosed
原因:链接被销毁
解决方案:在链接建立时发送邮件(一般是因为发信前调用了close方法)
exception yagmail.error.YagInvalidEmailAddress
原因:邮件地址中存在语法错误
解决方案:检查地址是否正确

总结

可复制直接使用,最好自己实践一次。

目录
相关文章
|
10天前
|
Python
在Python中,可以使用内置的`re`模块来处理正则表达式
在Python中,可以使用内置的`re`模块来处理正则表达式
26 5
|
20天前
|
Java 程序员 开发者
Python的gc模块
Python的gc模块
|
23天前
|
数据采集 Web App开发 JavaScript
python-selenium模块详解!!!
Selenium 是一个强大的自动化测试工具,支持 Python 调用浏览器进行网页抓取。本文介绍了 Selenium 的安装、基本使用、元素定位、高级操作等内容。主要内容包括:发送请求、加载网页、元素定位、处理 Cookie、无头浏览器设置、页面等待、窗口和 iframe 切换等。通过示例代码帮助读者快速掌握 Selenium 的核心功能。
69 5
|
27天前
|
Python
SciPy 教程 之 SciPy 模块列表 6
SciPy教程之常量模块介绍:涵盖公制、二进制(字节)、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率及力学单位。示例展示了角度单位转换为弧度的几个常用常量。
19 7
|
27天前
|
Python
SciPy 教程 之 SciPy 模块列表 7
`scipy.constants` 模块提供了常用的时间单位转换为秒数的功能。例如,`constants.hour` 返回 3600.0 秒,表示一小时的秒数。其他常用时间单位包括分钟、天、周、年和儒略年。
18 6
|
24天前
|
Python
SciPy 教程 之 SciPy 模块列表 13
SciPy教程之SciPy模块列表13:单位类型。常量模块包含多种单位,如公制、二进制(字节)、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例代码展示了如何使用`constants`模块获取零摄氏度对应的开尔文值(273.15)和华氏度与摄氏度的转换系数(0.5556)。
18 1
|
25天前
|
XML 前端开发 数据格式
超级详细的python中bs4模块详解
Beautiful Soup 是一个用于从网页中抓取数据的 Python 库,提供了简单易用的函数来处理导航、搜索和修改分析树。支持多种解析器,如 Python 标准库中的 HTML 解析器和更强大的 lxml 解析器。通过简单的代码即可实现复杂的数据抓取任务。本文介绍了 Beautiful Soup 的安装、基本使用、对象类型、文档树遍历和搜索方法,以及 CSS 选择器的使用。
55 1
|
26天前
|
Python
SciPy 教程 之 SciPy 模块列表 9
SciPy教程之常量模块介绍,涵盖多种单位类型,如公制、质量、角度、时间、长度、压强等。示例展示了如何使用`scipy.constants`模块查询不同压强单位对应的帕斯卡值,包括atm、bar、torr、mmHg和psi。
15 1
|
26天前
|
Python
SciPy 教程 之 SciPy 模块列表 8
SciPy教程之常量模块单位类型介绍。该模块包含多种单位,如公制、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例展示了部分长度单位的转换值,例如英寸、英尺、海里等。
16 1
|
28天前
|
知识图谱 Python
SciPy 教程 之 SciPy 模块列表 5
本教程介绍SciPy常量模块中的单位类型,涵盖公制、质量、时间、长度等单位。示例代码展示了如何使用`scipy.constants`模块获取不同质量单位的千克值,如公吨、磅、盎司、原子质量单位等。
15 1
下一篇
无影云桌面