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

本文涉及的产品
对象存储 OSS,OSS 加速器 50 GB 1个月
简介: 本文详解如何用Python的boto库调用AWS SES发送邮件,涵盖账户配置、邮箱/域名验证、沙盒配额说明,并提供支持HTML/text双格式及Jinja2模板渲染的实用代码示例,助你快速集成邮件功能。(239字)

![ScreenShot_2026-02-05_110936_345](https://img2024.cnblogs.com/blog/2109139/202602/2109139-20260205111623582-1193139573.png)

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

## 设置

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

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

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

## 实例代码

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

```import boto.ses

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 = Email(to='test@gmail.com', subject='You are HTML Awesome')

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 模板引擎来处理模板的加载和渲染:

```import boto.ses

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 安全密钥放入代码中。而是使用环境变量之类的东西。

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

```email = Email(to='you@example.com', subject='OMG an Email!')

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

目录
相关文章
|
16天前
|
运维 监控 网络协议
别再说 IPv6 只是“未来”了:我在生产环境踩过的那些坑
别再说 IPv6 只是“未来”了:我在生产环境踩过的那些坑
167 3
|
19天前
|
缓存 运维 监控
从踩坑到高效落地:淘宝天猫商品详情API的实操心得
本文分享淘宝天猫商品详情API从踩坑到高效落地的实战经验,涵盖准入权限避坑、签名与调用规范、异常处理、缓存优化、批量调度及监控运维等关键环节,助开发者快速稳定接入,提升开发效率与系统稳定性。(239字)
|
19天前
|
数据采集 供应链 物联网
别再只会调用 API 了:一步步教你用 Python Fine-Tune 一个定制化大模型
别再只会调用 API 了:一步步教你用 Python Fine-Tune 一个定制化大模型
191 3
|
19天前
|
JSON 缓存 API
美股实时行情与 K 线数据对接
本文详解如何用StockTV全球金融API快速接入美股实时行情、K线、指数及IPO等数据,支持NYSE/NASDAQ双交易所,提供REST/WS低延迟接口,涵盖个股、指数、涨跌榜等全场景,助开发者高效构建全球资产配置工具。(239字)
|
26天前
|
存储 分布式计算 Java
PySpark入门教程(非常详细)从零基础入门到精通
本教程聚焦Spark Core核心原理,基于3.5.8版本,用Python详解RDD五大特性(分区、计算函数、依赖关系、分区器、首选位置)、容错机制、Shuffle、DAG调度及共享变量等,并通过WordCount实战演示。
271 4
PySpark入门教程(非常详细)从零基础入门到精通
|
4天前
|
人工智能 弹性计算 安全
2026年OpenClaw极简部署教程,两步拥有专属AI助理!
2026年,OpenClaw(原Moltbot/Clawdbot)以极简两步部署(选镜像+图形化配置),零代码即可在阿里云轻量服务器上启用24小时AI助理,支持自动化办公、多平台消息接入与智能执行,大幅提升个人与企业效率。
117 8
|
3天前
|
XML 人工智能 JSON
AI 再也不用截图点点点了!用一行命令让它直接画流程图
还在让 AI 用截图点 GUI 画流程图?慢、脆、还经常点错地方。 cli-anything-drawio 把 draw.io 的所有操作变成 CLI 命令, AI Agent 调一行命令就能生成专业流程图、架构图、组织架构图, 结果直接导出 PNG,全程不需要人盯着。
143 6
|
2月前
|
人工智能 应用服务中间件 API
刚刚,阿里云上线Clawdbot全套云服务!
阿里云上线Moltbot(原Clawdbot)全套云服务,支持轻量服务器/无影云电脑一键部署,可调用百炼平台百余款千问模型,打通iMessage与钉钉消息通道,打造开箱即用的AI智能体助手。
5425 48
刚刚,阿里云上线Clawdbot全套云服务!
|
3天前
|
人工智能 机器人 API
“小龙虾”OpenClaw保姆级教程:阿里云+本地部署步骤+钉钉集成+百炼API配置+常见问题解答
2026年,OpenClaw(曾用名Clawdbot、Moltbot,昵称“小龙虾”)作为开源AI智能体领域的领军工具,凭借跨平台部署能力、丰富的Skill生态以及灵活的第三方办公平台集成特性,成为个人高效办公与企业协同管理的核心助力。其核心价值在于打破AI“仅能聊天交互”的局限,通过对接外部大模型、集成主流办公工具,将AI能力嵌入实际工作流,实现任务自动化落地。钉钉作为国内企业办公协同的主流平台,与OpenClaw的深度集成,可让AI智能体直接嵌入钉钉聊天、审批、云盘、会议等全场景,实现消息自动回复、文档批量处理、会议纪要生成、任务提醒推送等自动化操作,大幅降低人工重复劳动,提升团队协作效率
480 2
|
1月前
|
人工智能 JavaScript Linux
OpenClaw 原版和汉化版windows 和Linux 下的部署实践
OpenClaw(原Clawdbot/Moltbot)是由彼得·斯坦伯格开发的开源个人AI代理,以“龙虾”为标识,口号“The AI that actually does things”。支持软件操作与长期记忆,2026年获Karpathy公开提及。提供中英文版本,基于TypeScript,可本地部署。
6254 131