附註:

將 OCI 電子郵件傳遞服務與 OCI 函數、OCI 物件儲存、OCI 保存庫及 OCI 資料庫整合至 PostgreSQL

簡介

企業依靠有效的電子郵件通訊來進行各種用途,包括自動通知、應用程式更新和行銷活動。為了滿足這些需求,Oracle Cloud Infrastructure (OCI) 提供強大的電子郵件傳遞服務,旨在提供快速可靠的託管解決方案,以傳送安全、大量行銷和交易電子郵件。

本教學課程說明如何使用 OCI Email Delivery 服務以簡化電子郵件傳送、與 OCI Functions、OCI Vault、OCI Object Storage 及 OCI Database 緊密整合,藉助 PostgreSQL 提升電子郵件分派程序的自動化和可靠性,同時也提供可建立可靠電子郵件傳遞解決方案的彈性平台。提供的程式碼是開發人員根據特定需求建置自訂電子郵件傳遞管線的起點。

呼叫此功能時,使用 OCI Functions 服務建立的函數將會從 OCI Object Storage 擷取電子郵件樣板、使用 PostgreSQL 資料庫連線至 OCI 資料庫以擷取收件者電子郵件地址,並且會將電子郵件傳送給所有這些收件者。

目標

必要條件

工作 1:設定 OCI 電子郵件傳遞服務

若要設定 OCI Email Delivery 服務,請參閱使用 OCI Email Delivery 傳送電子郵件的逐步指示影片:如何在 OCI 中設定電子郵件傳遞

完成組態之後,您的 OCI 使用者應至少有一個核准的電子郵件寄件者和簡單郵件傳輸協定 (SMTP) 證明資料。

作業 2:在 OCI 物件儲存的儲存桶中上傳電子郵件樣板

請從此處下載電子郵件樣板:電子郵件樣板,然後將其上傳至現有的儲存桶。

包含要傳送之電子郵件樣板的儲存桶

工作 3:使用 PostgreSQL 資料庫在 OCI 資料庫中設定收件者位址

  1. 使用 PostgreSQL 資料庫系統連線至 OCI 資料庫。如需詳細資訊,請參閱使用 PostgreSQL CLI 連線至 OCI 資料庫並搭配 PostgreSQL

  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 保存庫中建立加密密碼

在您的保存庫中建立您將使用之機密值的加密密碼,例如 SMTP 使用者名稱和密碼 (由 OCI 電子郵件傳遞服務使用)、OCI 資料庫 (使用 PostgreSQL 資料庫使用者名稱和密碼)。這些加密密碼稍後將用於 OCI 函數。

保存庫加密密碼

作業 5:設定 OCI 函數

  1. 建立函數。如需詳細資訊,請參閱函數:開始使用 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 保存庫 (decodeSecret) 中的加密密碼的功能。

    • 定義主要處理程式函數 (handler),其:

      • 從函數相關資訊環境擷取 SMTP 證明資料、SMTP 主機、SMTP 連接埠以及其他組態值。

      • 從 OCI 物件儲存擷取電子郵件樣板內容。

      • 從內送 JSON 有效負載擷取寄件者資訊和主體。

      • 使用從 OCI 保存庫取得的證明資料,以 PostgreSQL 資料庫連線至 OCI 資料庫。

      • 執行查詢以從資料庫中的表格擷取電子郵件地址。

      • 透過擷取的電子郵件地址重複,並使用 sendEmail 函數傳送電子郵件。

      • 傳回表示已傳送電子郵件之電子郵件地址的成功訊息。

    注意:

    • 將命令檔中的 host 取代為您自己的 OCI 資料庫,並將位於 OCI 資料庫底下的 PostgreSQL 資料庫系統端點取代為 PostgreSQL 連線區段。您也可以將它設定為 OCI 保存庫中的另一個加密密碼,或從有效負載中取得。

    • 如果您要從另一個未命名為 func.py 的檔案執行函數,請將該檔案放置在函數的資料夾中,然後相應地編輯 func.yaml 檔案。

  4. 編輯 requirements.txt 檔案以包含新的 Python 程式碼依賴的額外程式庫:

    • oci:將函數部署至 OCI Functions 時,確保將 OCI 軟體開發套件 (SDK) 安裝在函數的程式實際執行環境中。

    • psycopg2-binary:允許函數代碼使用 PostgreSQL 資料庫連線和操控 OCI 資料庫。

    $ cat requirements.txt
    fdk
    oci
    psycopg2-binary
    
  5. 將下列組態新增至函數相關資訊環境。將保存庫的 Oracle Cloud Identifier (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 Email Delivery 服務的核准寄件者。
    • 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 Help Center