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

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

设置

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

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

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

实例代码

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

import 复制代码
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.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 复制代码
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 复制代码
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

相关推荐
serve the people1 小时前
python环境搭建 (十二) pydantic和pydantic-settings类型验证与解析
java·网络·python
小天源1 小时前
Error 1053 Error 1067 服务“启动后立即停止” Java / Python 程序无法后台运行 windows nssm注册器下载与报错处理
开发语言·windows·python·nssm·error 1053·error 1067
喵手2 小时前
Python爬虫实战:HTTP缓存系统深度实战 — ETag、Last-Modified与requests-cache完全指南(附SQLite持久化存储)!
爬虫·python·爬虫实战·http缓存·etag·零基础python爬虫教学·requests-cache
喵手2 小时前
Python爬虫实战:容器化与定时调度实战 - Docker + Cron + 日志轮转 + 失败重试完整方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·容器化·零基础python爬虫教学·csv导出·定时调度
2601_949146532 小时前
Python语音通知接口接入教程:开发者快速集成AI语音API的脚本实现
人工智能·python·语音识别
寻梦csdn3 小时前
pycharm+miniconda兼容问题
ide·python·pycharm·conda
Java面试题总结4 小时前
基于 Java 的 PDF 文本水印实现方案(iText7 示例)
java·python·pdf
不懒不懒4 小时前
【决策树算法实战指南:从原理到Python实现】
python·决策树·id3·c4.5·catr
马猴烧酒.4 小时前
【面试八股|Java集合】Java集合常考面试题详解
java·开发语言·python·面试·八股