news 2026/6/15 12:11:49

如何使用python的boto库和SES发送电子邮件?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何使用python的boto库和SES发送电子邮件?

本文将由码云笔记介绍如何使用 boto 和 SES 发送电子邮件。boto 库是 Python 的一个非常不错的封装,帮助你与 AWS API 互动。

设置

首先你需要一个 AWS 账户(当然),以及你的账户的访问密钥和秘密密钥,这些将用于与 SES 服务器进行身份验证。有几种不同的方法可以使用密钥进行身份验证,但本文我们将只是将它们传递给 boto 提供的connect_to_region方法。

通过 SES 验证一个电子邮件地址(Gmail 地址完全没问题)或您拥有的域。如果您只是测试这个功能,我建议只验证一个电子邮件地址,因为这样会稍微快一点。您只需点击他们发送给您的验证电子邮件中的链接,而不是为验证域而在区域文件中添加 TXT 记录。

如果是第一次使用 SES,且你的应用程序需要发送大量电子邮件,可能需要提交请求来增加发送配额。你的 SES 账户最初会被放在一个沙盒中,在 24 小时内只能发送 200 封电子邮件。

实例代码

完成上面提到的初始设置,你应该能够使用下面的代码发送电子邮件。

AWS_ACCESS_KEY = 'YOUR-ACCESS-KEY-HERE' AWS_SECRET_KEY = 'YOUR-SECRET-KEY-HERE' class Email(object): def __init__(self, to, subject): self.to = to self.subject = subject self._html = None self._text = None self._format = 'html' def html(self, html): self._html = html def text(self, text): self._text = text def send(self, from_addr=None): body = self._html if isinstance(self.to, basestring): self.to = [self.to] if not from_addr: from_addr = 'me@example.com' if not self._html and not self._text: raise Exception('You must provide a text or html body.') if not self._html: self._format = 'text' body = self._text connection = boto.ses.connect_to_region( 'us-east-1', aws_access_key_id=AWS_ACCESS_KEY, aws_secret_access_key=AWS_SECRET_KEY ) return connection.send_email( from_addr, self.subject, None, self.to, format=self._format, text_body=self._text, html_body=self._html )

要使上面代码,您只需要做这件事:

email.text('This is a text body. Foo bar.') email.html('<html><body>This is a text body. <strong>Foo bar.</strong></body></html>') # Optional email.send()

该email.html()调用是可选的。如果在电子邮件中同时包含文本和 HTML,则两者都会包含在结果 MIME 中,电子邮件客户端将显示用户支持或偏好的格式。

使用电子邮件模板

当然上面的自定义模板比较朴素,如果你想要更加好看,可以尝试使用模板引擎。这样我们不必直接传递电子邮件正文字符串,而是可以从模板中加载它,就像在 Django 这样的 Web 框架中渲染 HTML 页面一样。

在这里我们使用 Jinja2 模板引擎来处理模板的加载和渲染:

from jinja2 import Environment, PackageLoader # env = Environment(loader=PackageLoader('yourapp', 'templates')) AWS_ACCESS_KEY = 'YOUR-ACCESS-KEY-HERE' AWS_SECRET_KEY = 'YOUR-SECRET-KEY-HERE' class Email(object): def __init__(self, to, subject): self.to = to self.subject = subject self._html = None self._text = None def _render(self, filename, context): template = env.get_template(filename) return template.render(context) def html(self, filename, context): self._html = self._render(filename, context) def text(self, filename, context): self._text = self._render(filename, context) def send(self, from_addr=None): # Same as before...

注意:在生产代码中,不要直接将 AWS 安全密钥放入代码中。而是使用环境变量之类的东西。

使用这个代码和之前类似,但是我们会直接传递模板文件名和模板填充的上下文:

ctx = {'username': user.username} email.text('email.txt', ctx) email.html('email.html', ctx) # Optional email.send()

通过上面的代码让你可以像创建和渲染网页一样轻松地创建和渲染 HTML 邮件。

结语

看到这儿相信大家对如何使用 boto 和 SES 发送电子邮件有了清楚地了解,希望这个简短的教程对你有所帮助。这里的代码应该适用于大多数用例,尽管你还可以通过添加抄送、密送、回复地址、返回路径,甚至文件附件来获得更高级的功能。

我刚刚提到的所有这些额外功能,除了附件,都可以通过send_email函数来处理。要发送附件,你必须使用较低级别的send_raw_email函数,这需要你自己构造 MIME 消息。https://mybj123.com/29061.html

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 12:20:49

Agent Skills 完全指南:从原理到实战彻底搞懂!

Agent Skills 最近非常的火&#xff0c;它是既 MCP 后 Anthropic 推出的又一个 Agent 领域的行业标准。 它的成长路线和 MCP 也非常像&#xff0c;25 年 10 月份发布时只有 Anthropic 自家产品支持&#xff0c;后来 Cursor、Codex、Opencode、Gemini CLI 等产品看到了 Skills …

作者头像 李华
网站建设 2026/6/9 2:32:04

Linux 下 malloc 内存分配机制详解

在 Linux 系统中&#xff0c;malloc() 是 C 语言标准库&#xff08;glibc&#xff09;提供的动态内存分配函数。虽然它看起来只是一个简单的 API&#xff0c;但其底层实现涉及虚拟内存管理、多线程并发控制、性能优化等多个操作系统核心机制。本文将系统讲解 Linux 下 malloc 的…

作者头像 李华
网站建设 2026/6/13 21:11:36

告别低效数据处理:JBoltAI如何赋能Java企业智能化

在Java企业的日常运营中&#xff0c;数据查询与结构化处理始终是绕不开的核心环节。业务人员需要从数据库中提取销售、库存等关键数据时&#xff0c;往往需要依赖开发人员编写SQL语句&#xff1b;大量非结构化的合同、发票、报表数据&#xff0c;也需要人工整理成JSON格式才能对…

作者头像 李华
网站建设 2026/5/24 17:42:18

看完就会:继续教育专用的降AI率工具,千笔AI VS 知文AI

在AI技术快速发展的今天&#xff0c;越来越多的学生和研究者开始借助AI工具辅助论文写作&#xff0c;提升效率、优化内容。然而&#xff0c;随着学术审查标准的不断提高&#xff0c;AI生成内容的痕迹逐渐被识别&#xff0c;AI率超标成为影响论文通过的重要隐患。面对查重系统对…

作者头像 李华
网站建设 2026/6/10 23:18:04

centos 7.9 ISO下载链接

最近在一台DELL台式机上安装rocky linux 9.5和rocky linux 8.10,都出现了错误。 而采用centos 7.9没有问题。 我是用DVD安装的&#xff0c;但是安装完成之后做KVM的环境还需要ISO。 下面是ISO的链接&#xff1a; https://vault.centos.org/7.9.2009/isos/x86_64/

作者头像 李华
网站建设 2026/6/10 16:13:32

git 常用操作

1. 首先判断项目结构 情况1&#xff1a;单一仓库&#xff0c;多模块&#xff08;Monorepo&#xff09; project/ ├── app/ # 主模块 ├── library1/ # 子模块 ├── library2/ # 子模块 └── build.gradle # 统一构建操作&#xff1a;在根目录操作…

作者头像 李华