注意:

将 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 数据库以检索收件人电子邮件地址,并将电子邮件发送给所有这些收件人。

目标

先决条件

任务 1:设置 OCI 电子邮件传送服务

要配置 OCI 电子邮件传送服务,请参阅使用 OCI 电子邮件传送发送电子邮件的分步说明视频:如何在 OCI 中配置电子邮件传送

完成配置后,您的 OCI 用户应至少具有一个批准的电子邮件发件人以及简单邮件传输协议 (Simple Mail Transfer Protocol,SMTP) 身份证明。

任务 2:在 OCI 对象存储存储桶中上载电子邮件模板

从此处下载电子邮件模板:电子邮件模板,并将其上载到现有存储桶。

包含要发送的电子邮件模板的存储桶

任务 3:使用 PostgreSQL 数据库在 OCI 数据库中设置收件人地址

  1. 使用 PostgreSQL 数据库系统连接到 OCI 数据库。有关详细信息,请参阅使用 PostgreSQL CLI 通过 PostgreSQL 连接到 OCI 数据库

  2. 使用 PostgreSQL 数据库为 OCI 数据库中的收件人电子邮件地址创建表。

    CREATE TABLE emails (
        address VARCHAR(255) PRIMARY KEY
    );
    
  3. 在表中插入值。

    INSERT INTO emails (address) VALUES
        ('email1@example.com'),
        ('email2@example.com'),
        ('email3@example.com');
    

任务 4:在 OCI Vault 中创建密钥

在 Vault 中为要使用的敏感值创建密钥,例如 SMTP 用户名和密码(由 OCI 电子邮件传送服务使用)、OCI 数据库以及 PostgreSQL 数据库用户名和密码。这些密钥稍后将在 OCI Functions 中使用。

Vault 密钥

任务 5:设置 OCI 函数

  1. 创建函数。有关更多信息,请参见 Functions:Get Started using the CLI

    注:在本教程中,我们使用 Python 函数。

    在本教程中,应用程序名为 email-delivery-function,部署的函数名为 email_function

    应用程序功能

  2. 设置原始基本函数后,函数文件夹中将包含以下文件。

    • func.py: 放置定制 Python 函数代码。
    • func.yaml: 函数的配置数据。
    • requirements.txt: 列出函数代码所需的相关项。
  3. 从此处下载函数代码: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 文件。

  4. 编辑 requirements.txt 文件以包括新 Python 代码所依赖的额外库:

    • oci:确保将 OCI 软件开发工具包 (SDK) 部署到 OCI Functions 时安装在函数的运行时环境中。

    • psycopg2-binary:允许函数代码使用 PostgreSQL 数据库连接和处理 OCI 数据库。

    $ cat requirements.txt
    fdk
    oci
    psycopg2-binary
    
  5. 将以下配置添加到函数上下文中。将 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"
    
  6. 部署函数。

    注:email-delivery-function 替换为应用程序的名称。

    fn -v deploy --app email-delivery-function
    
  7. 调用该函数。该函数需要一个有效负载,其中应包括:

    • 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']!
    

确认

更多学习资源

浏览 docs.oracle.com/learn 上的其他实验室,或者通过 Oracle Learning YouTube 频道访问更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 以成为 Oracle Learning Explorer。

有关产品文档,请访问 Oracle 帮助中心