在專用 Exadata 基礎架構上的自治式 AI 資料庫傳送電子郵件
您可以使用電子郵件傳遞服務或 DBMS_CLOUD_NOTIFICATION 程序,在專用 Exadata 基礎架構上的自治式 AI 資料庫上傳送電子郵件。本文將說明如何使用這兩種選項傳送電子郵件。
在自治式 AI 資料庫上以電子郵件傳遞服務傳送電子郵件
描述在專用 Exadata 基礎架構上的自治式 AI 資料庫上使用 UTL_SMTP 傳送電子郵件的步驟。
使用 UTL_SMTP 傳送電子郵件:
-
識別電子郵件傳遞的 SMTP 連線端點。
-
若要使用 Oracle Cloud Infrastructure (OCI) Email Delivery 服務,請指定用於 Email Delivery 的連線端點。例如,當美國西部 (鳳凰城) 是傳送區域時,請選取
smtp.email.us-phoenix-1.oci.oraclecloud.com。如需詳細資訊,請參閱設定 SMTP 連線。注意:如果您目前的區域無法使用電子郵件傳遞,您可能需要訂閱其他 Oracle Cloud Infrastructure 區域。
-
如果要使用第三方 SMTP 伺服器,您的網路管理員必須設定 SMTP 伺服器及其與自治式 AI 資料庫租用戶的連線,並提供 SMTP 連線端點資訊。
-
-
產生 OCI 使用者之電子郵件傳遞的 SMTP 證明資料。
當您傳送電子郵件時,
UTL_SMTP會使用證明資料與 Email Delivery 伺服器進行認證。請參閱針對使用者產生 SMTP 憑證以瞭解詳細資訊。 -
建立電子郵件傳遞的核准寄件者。
如果您使用 OCI Email Delivery Service,請完成此步驟以作為
UTL_SMTP.MAIL之「寄件者」的所有電子郵件地址。如需詳細資訊,請參閱管理核准的寄件者。 -
允許藉由附加存取控制項目 (ACE) 來對具有管理員角色的使用者存取 SMTP 主機。
若要使用安全 SMTP,除了 SMTP 主機存取之外,您還必須設定具備「存取控制項目 (ACE)」的資料庫使用者才能存取公事包。若要使用 OCI Email Delivery Service 進行安全 SMTP 存取,必須使用 PLAIN、CRAM-MD5、LOGIN 等簡單認證和安全層 (SASL) 協定認證 Oracle Cloud Infrastructure 帳戶。例如,請參閱 SMTP 傳送電子郵件範例代碼中的範例代碼。
-
撰寫 PL/SQL 程式碼以使用
UTL_MAIL傳送電子郵件。提示:如果您是自行開發傳送電子郵件程序,請確定您的代碼是根據 SMTP 傳送電子郵件範例代碼。
-
使用您在步驟 5 中建立的 PL/SQL 程序來傳送測試電子郵件。
舉例而言:
execute send_mail('taylor@example.com', 'Email from Oracle Autonomous Database', 'Sent using UTL_SMTP');
請參閱 Oracle Database 19c PL/SQL Packages and Types Reference 中的 UTL_SMTP 或 Oracle Database 26ai PL/SQL Packages and Types Reference ,瞭解進一步的參照。
請參閱使用資料庫 PL/SQL 套裝程式注意事項,瞭解將 UTL_SMTP 與自治式 AI 資料庫搭配使用的詳細資訊。
SMTP 傳送電子郵件範例代碼
顯示在自治式 AI 資料庫上以 UTL_SMTP 傳送電子郵件的範例程式碼。
範例程式碼
-- As ADMIN user, set up ACE to access SMTP host
connect admin/[password]@[ADBD-host]/[pdbname]_tp.atp.oraclecloud.com
begin
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE (
host => '[SMTP_Server_address]',
lower_port => 25,
upper_port => 25,
ace => xs$ace_type(
privilege_list => xs$name_list('smtp'),
principal_name => '[database_user]',
principal_type => xs_acl.ptype_db));
end;
/
-- If using secure SMTP, set up ACE to wallet for certificate-based secure (TLS) email
declare
m_wallet_path VARCHAR2(512);
begin
select property_value into m_wallet_path
from database_properties
where property_name like '%SSL%';
m_wallet_path := 'file:' || m_wallet_path;
DBMS_NETWORK_ACL_ADMIN.APPEND_WALLET_ACE (
wallet_path => m_wallet_path,
ace => xs$ace_type(
privilege_list => xs$name_list('use_client_certificates'),
principal_name => '[database_user]',
principal_type => xs_acl.ptype_db));
end;
/
-- As ADMIN or regular database user with privileges set up above, use UTL_SMTP to send email
connect [database_user]/[password]@[ADBD-host]/[pdbname]_tp.atp.oraclecloud.com
-- Example of normal (non-secure) email
DECLARE
c UTL_SMTP.CONNECTION;
reply UTL_SMTP.REPLY;
host varchar2(64) := '[SMTP_Server_address]',
port pls_integer := 25;
sender varchar2(64) := '[sender-address@domain.com]';
recipient varchar2(64) := '[recipient-address@domain.com]';
BEGIN
c := UTL_SMTP.OPEN_CONNECTION (host, port);
if (reply.CODE != 220) then
raise_application_error(-20000,'UTL_SMTP.CONNECTION: '
|| reply.CODE || ' - ' || reply.TEXT);
end if;
UTL_SMTP.HELO(c, host);
UTL_SMTP.MAIL(c, sender);
UTL_SMTP.RCPT(c, recipient);
UTL_SMTP.OPEN_DATA(c);
UTL_SMTP.WRITE_DATA(c,'From:[Sender] <' || sender || '>' || UTL_TCP.CRLF);
UTL_SMTP.WRITE_DATA(c,'To:[Recipient] <' || recipient || '>' || UTL_TCP.CRLF);
UTL_SMTP.WRITE_DATA(c,'Subject: Email from UTL_SMTP App' || UTL_TCP.CRLF);
UTL_SMTP.WRITE_DATA(c,'Mail Content');
UTL_SMTP.CLOSE_DATA(c);
dbms_output.put_line('Close Data: ' || reply.code);
UTL_SMTP.QUIT(c);
END;
/
-- Example of secure email using OCI Mail Server as the SMTP server
DECLARE
m_wallet_path VARCHAR2(256);
c UTL_SMTP.CONNECTION;
reply UTL_SMTP.REPLY;
host varchar2(64) := 'smtp.email.[region].oci.oraclecloud.com';
port pls_integer := 25;
sender varchar2(64) := '[sender-address@domain.com]';
recipient varchar2(64) := '[recipient-address@domain.com]';
BEGIN
select property_value into m_wallet_path
from database_properties
where property_name like '%SSL%';
m_wallet_path := 'file:' || m_wallet_path;
-- secure connection with SSL/TLS made *before* SMTP communication
-- use hostname matched against CN or SMTP server's certificate
reply := UTL_SMTP.OPEN_CONNECTION (
host => host,
port => port,
c => c,
wallet_path => m_wallet_path,
wallet_password => NULL,
secure_connection_before_smtp => FALSE,
secure_host => NULL);
if (reply.CODE != 220) then
raise_application_error(-20000,'UTL_SMTP.OPEN_CONNECTION: '
|| reply.CODE ||' - ' || reply.TEXT);
end if;
UTL_SMTP.STARTTLS(c);
-- username is the 'SMTP credential' for the user's email address
-- obtained from OCI Identity -> Users -> email address.
-- Scheme refers to SASL (Simple Authentication and Security Layer)
-- Authentication Schemes for SMTP protocol - PLAIN, CRAM-MD5, LOGIN
-- https://docs.oracle.com/en-us/iaas/Content/Email/Concepts/overview.htm
UTL_SMTP.AUTH(
c => c,
username => '[ocid1.user.verylongaddresscreatedinOCIforuseraddress.com]',
password => '[password-provided-from-create]',
schemes => 'PLAIN');
UTL_SMTP.HELO(c, host);
UTL_SMTP.MAIL(c, sender);
UTL_SMTP.RCPT(c, recipient);
UTL_SMTP.OPEN_DATA(c);
UTL_SMTP.WRITE_DATA(c, 'From: Sender <' || sender || '>' || UTL_TCP.CRLF);
UTL_SMTP.WRITE_DATA(c, 'To: Recipient <' || recipient || '>' || UTL_TCP.CRLF);
UTL_SMTP.WRITE_DATA(c, 'Subject: Email from UTL_SMTP App' || UTL_TCP.CRLF);
UTL_SMTP.WRITE_DATA(c, 'Mail Content');
UTL_SMTP.WRITE_DATA(c, 'Sender is a domain-owned approved sender in OCI Mail Service');
UTL_SMTP.CLOSE_DATA(c);
dbms_output.put_line('Close Data: ' || reply.code);
UTL_SMTP.QUIT(c);
END;
/
從自治式 AI 資料庫以電子郵件傳送訊息
套用至:
僅限 Oracle Public Cloud
您可以使用 DBMS_CLOUD_NOTIFICATION 以電子郵件方式傳送訊息。
-
識別電子郵件傳遞的 SMTP 連線端點。如果目前的區域不提供電子郵件傳遞,您可能需要訂閱其他 Oracle Cloud Infrastructure 區域。
例如,針對 SMTP 連線端點選取下列其中一項:
-
smtp.us-phoenix-1.oraclecloud.com
-
smtp.us-ashburn-1.oraclecloud.com
-
smtp.email - uk-london-1.oci.oraclecloud.com
-
微信:eu-frankfurt-1.oci.oraclecloud.com
請參閱設定 SMTP 連線瞭解詳細資訊。
-
-
產生電子郵件傳遞的 SMTP 證明資料。
UTL_SMTP會在您傳送電子郵件時,使用證明資料與 Email Delivery 伺服器進行認證。請參閱針對使用者產生 SMTP 憑證以瞭解詳細資訊。
-
建立電子郵件傳遞的核准寄件者。針對您在
UTL_SMTP.MAIL中作為 "From" 的所有電子郵件地址完成此步驟。如需詳細資訊,請參閱管理核准的寄件者。
-
附加存取控制項目 (ACE) 以允許 ADMIN 使用者存取 SMTP。
舉例而言:
BEGIN -- Allow SMTP access for user ADMIN DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE( host => 'www.us.example.com', lower_port => 587, upper_port => 587, ace => xs$ace_type(privilege_list => xs$name_list('SMTP'), principal_name => 'ADMIN', principal_type => xs_acl.ptype_db)); END; / -
建立證明資料物件,並使用
DBMS_CLOUD_NOTIFICATION.SEND_MESSAGE以電子郵件方式傳送訊息。BEGIN DBMS_CLOUD.CREATE_CREDENTIAL( credential_name => 'EMAIL_CRED', username => 'username', password => 'password' ); END; / BEGIN DBMS_CLOUD_NOTIFICATION.SEND_MESSAGE( provider => 'email', credential_name => 'EMAIL_CRED', message => 'Subject content', params => json_object('recipient' value 'mark@example.com, suresh@example.com', 'to_cc' value 'nicole@example.com, jordan@example.com', 'to_bcc' value 'manisha@example.com', 'subject' value 'Test subject', 'smtp_host' value 'smtp.email.example.com', 'sender' value 'approver_sender@example.com' ) ); END; /使用
params參數來指定string值中 CC 或密件副本的寄件者、smtp_host、主旨、收件者及收件者。-
寄件者:從步驟 3 指定已核准寄件者的電子郵件 ID。
-
smtp_host :指定步驟 2 的 SMTP 主機名稱。
-
subject :指定電子郵件的主旨。
-
收件者:指定收件者的電子郵件 ID。有多個收件者時,在電子郵件 ID 之間使用逗號。
-
to_cc :指定接收電子郵件副本的電子郵件 ID。有多個副本收件者時,在電子郵件 ID 之間使用逗號。
-
to_bcc :指定接收電子郵件密件副本的電子郵件 ID。有多個密件副本收件者時,在電子郵件 ID 之間使用逗號。
請參閱 SEND_MESSAGE 程序以瞭解詳細資訊。
-
從自治式 AI 資料庫以電子郵件傳送查詢結果
套用至:
僅限 Oracle Public Cloud
您可以使用 DBMS_CLOUD_NOTIFICATION 套裝程式以電子郵件方式傳送查詢結果。
若要使用 DBMS_CLOUD_NOTIFICATION 傳送郵件,請執行下列動作:
-
識別電子郵件傳遞的 SMTP 連線端點。如果目前的區域不提供電子郵件傳遞,您可能需要訂閱其他 Oracle Cloud Infrastructure 區域。
例如,針對 SMTP 連線端點選取下列其中一項:
-
smtp.us-phoenix-1.oraclecloud.com
-
smtp.us-ashburn-1.oraclecloud.com
-
smtp.email - uk-london-1.oci.oraclecloud.com
-
微信:eu-frankfurt-1.oci.oraclecloud.com
請參閱設定 SMTP 連線瞭解詳細資訊。
-
-
產生電子郵件傳遞的 SMTP 證明資料。當您傳送電子郵件時,
UTL_SMTP會使用證明資料與 Email Delivery 伺服器進行認證。請參閱針對使用者產生 SMTP 憑證以瞭解詳細資訊。
-
建立電子郵件傳遞的核准寄件者。針對您在
UTL_SMTP.MAIL中作為 "From" 的所有電子郵件地址完成此步驟。如需詳細資訊,請參閱管理核准的寄件者。
-
附加存取控制項目 (ACE) 以允許 ADMIN 使用者存取 SMTP。
舉例而言:
BEGIN -- Allow SMTP access for user ADMIN DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE( host => 'www.us.example.com', lower_port => 587, upper_port => 587, ace => xs$ace_type(privilege_list => xs$name_list('SMTP'), principal_name => 'ADMIN', principal_type => xs_acl.ptype_db)); END; / -
建立證明資料物件,並使用
DBMS_CLOUD_NOTIFICATION.SEND_DATA以電子郵件方式傳送查詢的輸出。BEGIN DBMS_CLOUD.CREATE_CREDENTIAL( credential_name => 'EMAIL_CRED', username => 'username', password => 'password' ); END; / BEGIN DBMS_CLOUD_NOTIFICATION.SEND_DATA( provider => 'email', credential_name => 'EMAIL_CRED', query => 'SELECT tablespace_name FROM dba_tablespaces', params => json_object('recipient' value 'mark@example.com, suresh@example.com', 'to_cc' value 'nicole@example.com1, jordan@example.com', 'to_bcc' value 'manisha@example.com', 'subject' value 'Test subject', 'type' value 'json', 'title' value 'mytitle', 'message' value 'This is the message', 'smtp_host' value 'smtp.email.example.com', 'sender' value 'approver_sender@example.com' ) ); END; /使用
params參數來指定寄件者、smtp_host、主旨、收件者、CC 或密件副本的收件者、訊息、資料類型,以及String值中的標題。-
寄件者:從步驟 3 指定已核准寄件者的電子郵件 ID。
-
smtp_host :指定步驟 2 的 SMTP 主機名稱。
-
subject :指定電子郵件的主旨。大小上限為 100 個字元。
-
收件者:這會指定收件者的電子郵件 ID。有多個收件者時,在電子郵件 ID 之間使用逗號。
-
to_cc :指定接收電子郵件副本的電子郵件 ID。有多個副本收件者時,在電子郵件 ID 之間使用逗號。
-
to_bcc :指定接收電子郵件密件副本的電子郵件 ID。有多個密件副本收件者時,在電子郵件 ID 之間使用逗號。
-
message :指定訊息文字。
-
type :將輸出格式指定為 CSV 或 JSON。
-
標題:指定 SQL 輸出的附件標題。標題值只能包含英文字母、數字、底線、連字號或點作為字元,因為它是用來產生檔案名稱。
與郵件通知
DBMS_CLOUD_NOTIFICATION.SEND_DATA搭配使用的訊息大小上限為 32k 位元組。請參閱 SEND_DATA 程序以瞭解詳細資訊。
-