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

前言

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

开通SMTP服务

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

模块/包

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_sslTrue
smtp_set_debugleveldebug等级
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

原因:邮件地址中存在语法错误

解决方案:检查地址是否正确

总结

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

清安无别事

慢慢的积累一杯奶茶吧

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

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

打赏作者

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

抵扣说明:

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

余额充值