yagmail:用 Python 发邮件可以这么简单

用 Python 发邮件,不少人写过 smtplib 的几十行代码,处理过编码、附件、HTML 格式各种琐事。yagmail 把这个过程压到了三行代码,目前在 GitHub 上已经积累了 2,725 个 Star。

正文顶部截图

核心设计:能少写一行是一行

yagmail 的定位就是让发邮件变得足够简单。基础用法只需要:

import yagmail
yag = yagmail.Client('username', 'password')
yag.send('to@someone.com', 'subject', 'body')

三行代码完成发邮件。标准库 smtplib 里需要手动设置的 SMTP 服务器地址、端口、TLS,以及 MIME multipart 的拼装,都被封装在 Client 内部。连接对象可复用,离开作用域时会自动清理。

内容处理有巧思

yagmail 的 contents 参数支持自动识别。丢一个文件路径进去,它会判断是内联图片、HTML 还是附件。字符串如果包含 HTML 标签,也会自动渲染。

contents = ['这是一段正文', '/path/to/image.png', '<h1>HTML 标题</h1>']
yag.send('to@someone.com', 'subject', contents)

如果需要更精确的控制,也提供了 raw 和 inline 两个显式选项。附件支持本地文件路径和文件对象,后者很适合在 Web 应用里处理用户上传的文件。

批量发送与别名

收件人参数支持多种形式:单字符串、字符串列表、带别名的字典。不给 to 参数时默认发给自己。

yag.send(to=['a@x.com', 'b@x.com'])  # 群发
yag.send(to={'a@x.com': '张三'})      # 带别名

对于需要批量发通知、日报的场景,这个设计省了不少事。

安全方面没省略

虽然接口简化了,安全功能并没有砍掉。除了常规密码登录,yagmail 支持 OAuth2 认证,用令牌代替密码,降低泄露风险。令牌可以单独撤销,权限也可控。同时也支持 DKIM 签名,安装时加上 [all] 或 [dkim] 依赖即可启用。

异步客户端内置

yagmail 还内置了基于 asyncio 的异步客户端 AsyncClient,不需要额外依赖第三方库。用法和同步版基本一致,改成 async with 和 await 即可。

async with yagmail.AsyncClient('user', 'pass') as yag:
    await yag.send('to@x.com', 'subject', 'body')

对于需要高并发发邮件的场景,这个内置支持很实用。

命令行也能用

除了当库调用,yagmail 安装后也提供命令行入口,可以直接在终端发邮件。脚本化操作或者 CI 流程里发通知,这种方式很方便。

README区域截图

适合什么人用

如果你经常需要用 Python 做自动化邮件相关的事,yagmail 值得一看。API 设计直观,文档清楚,上手成本很低。

2,725 个 Star 在邮件发送这个细分领域里算比较成熟的方案了,核心功能稳定。对于只需要简单发邮件的场景,yagmail 能帮你少写很多样板代码。

ar 在邮件发送这个细分领域里算比较成熟的方案了,核心功能稳定。对于只需要简单发邮件的场景,yagmail 能帮你少写很多样板代码。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐