注意:
- 此教程需要访问 Oracle Cloud。要注册免费账户,请参阅开始使用 Oracle Cloud Infrastructure Free Tier 。
- 它使用 Oracle Cloud Infrastructure 身份证明、租户和区间示例值。完成实验室时,请将这些值替换为特定于您的云环境的值。
将 OCI 电子邮件传送服务与 OCI Functions、OCI Object Storage、OCI Vault 和 OCI Database 集成到 PostgreSQL
简介
企业依靠有效的电子邮件通信来实现各种目的,包括自动通知、应用更新和营销活动。为了满足这些需求,Oracle Cloud Infrastructure (OCI) 提供了强大的电子邮件传送服务,旨在提供快速可靠的托管解决方案来发送安全的大量营销和事务处理电子邮件。
本教程展示了 OCI 电子邮件传送服务如何用于简化电子邮件发送,与 OCI Functions、OCI Vault、OCI Object Storage 和 OCI Database 无缝集成以及 PostgreSQL,从而增强电子邮件发送流程的自动化和可靠性,并提供了一个灵活的平台来创建可靠的电子邮件传送解决方案。提供的代码是开发人员根据其特定需求构建定制电子邮件传送管道的起点。
调用时,使用 OCI Functions 服务创建的函数将从 OCI 对象存储检索电子邮件模板,使用 PostgreSQL 数据库连接到 OCI 数据库以检索收件人电子邮件地址,并将电子邮件发送给所有这些收件人。
目标
-
将 OCI 电子邮件传送服务与 OCI 函数集成。
-
利用 OCI Vault 安全管理身份证明和敏感信息。
-
使用 PostgreSQL 数据库从 OCI 数据库检索收件人地址以进行个性化电子邮件发送。
-
从 OCI Object Storage 动态检索电子邮件模板以获取可定制内容。
先决条件
-
访问 Oracle Cloud Infrastructure Identity and Access Management (OCI IAM) 中允许的 OCI 租户和策略。
-
访问 OCI 资源 - OCI 电子邮件传送、OCI 函数、OCI Vault、OCI 对象存储服务。
-
现有 OCI 对象存储存储桶、OCI Vault、带有 PostgreSQL 数据库系统的 OCI 数据库。
任务 1:设置 OCI 电子邮件传送服务
要配置 OCI 电子邮件传送服务,请参阅使用 OCI 电子邮件传送发送电子邮件的分步说明和视频:如何在 OCI 中配置电子邮件传送。
完成配置后,您的 OCI 用户应至少具有一个批准的电子邮件发件人以及简单邮件传输协议 (Simple Mail Transfer Protocol,SMTP) 身份证明。
任务 2:在 OCI 对象存储存储桶中上载电子邮件模板
从此处下载电子邮件模板:电子邮件模板,并将其上载到现有存储桶。
任务 3:使用 PostgreSQL 数据库在 OCI 数据库中设置收件人地址
-
使用 PostgreSQL 数据库系统连接到 OCI 数据库。有关详细信息,请参阅使用 PostgreSQL CLI 通过 PostgreSQL 连接到 OCI 数据库。
-
使用 PostgreSQL 数据库为 OCI 数据库中的收件人电子邮件地址创建表。
CREATE TABLE emails ( address VARCHAR(255) PRIMARY KEY );
-
在表中插入值。
INSERT INTO emails (address) VALUES ('email1@example.com'), ('email2@example.com'), ('email3@example.com');
任务 4:在 OCI Vault 中创建密钥
在 Vault 中为要使用的敏感值创建密钥,例如 SMTP 用户名和密码(由 OCI 电子邮件传送服务使用)、OCI 数据库以及 PostgreSQL 数据库用户名和密码。这些密钥稍后将在 OCI Functions 中使用。
任务 5:设置 OCI 函数
-
创建函数。有关更多信息,请参见 Functions:Get Started using the CLI 。
注:在本教程中,我们使用 Python 函数。
在本教程中,应用程序名为
email-delivery-function
,部署的函数名为email_function
。 -
设置原始基本函数后,函数文件夹中将包含以下文件。
func.py:
放置定制 Python 函数代码。func.yaml:
函数的配置数据。requirements.txt:
列出函数代码所需的相关项。
-
从此处下载函数代码:Python 脚本并替换
func.py
文件中的代码。脚本
func.py
的作用概要:-
导入必要的库,以发送电子邮件、处理 JSON 数据、访问 OCI 服务以及与 OCI 数据库与 PostgreSQL 数据库交互。
-
定义用于发送电子邮件 (
sendEmail
) 和解码存储在 OCI Vault 中的密钥 (decodeSecret
) 的功能。 -
定义一个主处理程序函数 (
handler
),该函数:-
从函数上下文中检索 SMTP 凭证、SMTP 主机、SMTP 端口和其他配置值。
-
从 OCI 对象存储检索电子邮件模板内容。
-
从传入的 JSON 有效负载中检索发件人信息和主题。
-
使用从 OCI Vault 获取的身份证明连接到具有 PostgreSQL 数据库的 OCI 数据库。
-
执行查询,从数据库中的表中检索电子邮件地址。
-
迭代通过检索到的电子邮件地址并使用
sendEmail
函数发送电子邮件。 -
返回成功消息,指明电子邮件发送到的电子邮件地址。
-
注:
-
使用 PostgreSQL 连接部分将脚本中的
host
替换为您自己的 OCI 数据库,使用 OCI 数据库下的 PostgreSQL 数据库系统端点。您还可以在 OCI Vault 中将其设置为另一个密钥,或者将其从有效负载中提取。 -
如果要从另一个未命名为
func.py
的文件运行该函数,请将该文件放在函数的文件夹中,并相应地编辑func.yaml
文件。
-
-
编辑
requirements.txt
文件以包括新 Python 代码所依赖的额外库:-
oci
:确保将 OCI 软件开发工具包 (SDK) 部署到 OCI Functions 时安装在函数的运行时环境中。 -
psycopg2-binary
:允许函数代码使用 PostgreSQL 数据库连接和处理 OCI 数据库。
$ cat requirements.txt fdk oci psycopg2-binary
-
-
将以下配置添加到函数上下文中。将 Vault 的 Oracle Cloud 标识符 (OCID) 和 OCI 数据库的地址替换为 PostgreSQL 数据库系统端点。
fn config function email-delivery-function email_function db-host "..postgres_endpoint_IP.." fn config function email-delivery-function email_function vault-ocid "ocid1.vault.oc1.eu-frankfurt-1..." fn config function email-delivery-function email_function smtp-host "smtp.email.eu-frankfurt-1.oci.oraclecloud.com" fn config function email-delivery-function email_function smtp-port 587 fn config function email-delivery-function email_function smtp-password "xxxxxxxxxx" fn config function email-delivery-function email_function smtp-username "smtp_username" fn config function email-delivery-function email_function db-username "dbuser" fn config function email-delivery-function email_function db-password "xxxxxxxxxx"
-
部署函数。
注:将
email-delivery-function
替换为应用程序的名称。fn -v deploy --app email-delivery-function
-
调用该函数。该函数需要一个有效负载,其中应包括:
sender-email
:来自 OCI 电子邮件传送服务的批准的发件人。sender-name
:向收件人显示的发件人名称。subject
:电子邮件的主题。
如果需要,请替换应用程序名称和函数名。
echo '{ "sender-email":"...approved_sender_address...", "sender-name":"Company Test", "subject":"test email" }' | fn invoke email-delivery-function email_function
函数调用应返回消息:
Email successfully sent to ['email1@example.com', 'email2@example.com', 'email3@example.com']!
相关链接
确认
- 作者 - Adina Nicolescu(高级云工程师)
更多学习资源
浏览 docs.oracle.com/learn 上的其他实验室,或者通过 Oracle Learning YouTube 频道访问更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 以成为 Oracle Learning Explorer。
有关产品文档,请访问 Oracle 帮助中心。
Integrate OCI Email Delivery Service with OCI Functions, OCI Object Storage, OCI Vault, and OCI Database with PostgreSQL
F96469-01
April 2024