自律型AIデータベースへの電子メールの送信
Autonomous AI Databaseで電子メールを送信するためのオプションが多数あります。テキスト・メッセージまたはSQL問合せの出力をSlackまたはMSTeamsチャネルに送信することもできます。
自律型AIデータベース上のEmail Delivery Serviceで電子メールを送信
Autonomous AI DatabaseでUTL_SMTPを使用して電子メールを送信するためのステップについて説明します。
Oracle Cloud Infrastructure Email Delivery Serviceで電子メールを送信するには:
-
電子メール配信用の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
-
smtp.email.eu-frankfurt-1.oci.oraclecloud.com
ノート
ノート: SMTP接続エンドポイントがAutonomous AI Databaseとは異なるリージョンにある場合は、Oracle Cloud Supportでリクエストを作成して、自律型AIデータベースに対してそのリージョンの電子メール配信サービスをクラウド操作で有効にする必要があります。詳細は、「SMTP接続の構成」を参照してください。
-
-
電子メール配信用のSMTP資格証明を生成します。
UTL_SMTPは、電子メールの送信時に資格証明を使用して電子メール配信サーバーで認証します。詳細は、ユーザーに対するSMTP資格証明の生成を参照してください。
-
電子メール配信の承認済送信者を作成します。
UTL_SMTP.MAILで「From」として使用するすべての電子メール・アドレスに対して、この手順を実行します。詳細は、承認済送信者の管理を参照してください。
-
アクセス制御エントリ(ACE)を追加して、ADMINユーザーのSMIPアクセスを許可します。
たとえば:
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; / -
電子メールを送信するPL/SQLプロシージャを作成します。
たとえば、SMTP Send Email Sample Codeに示すサンプル・コードを参照してください。
-
ステップ5で作成したPL/SQLプロシージャを使用して、テスト電子メールを送信します。
たとえば:
execute send_mail('taylor@example.com', 'Email from Oracle Autonomous AI Database', 'Sent using UTL_SMTP');
UTL_SMTPの詳細は、「UTL_SMTP」を参照してください。
Autonomous AI DatabaseでのUTL_SMTPの制限については、Autonomous AI DatabaseのPL/SQLパッケージ・ノートを参照してください。
SMTP電子メール送信サンプル・コード
Autonomous AI DatabaseでUTL_SMTPを使用して電子メールを送信するためのサンプル・コードを示しています。
CREATE OR REPLACE PROCEDURE SEND_MAIL (
msg_to varchar2,
msg_subject varchar2,
msg_text varchar2 )
IS
mail_conn utl_smtp.connection;
username varchar2(1000):= 'ocid1.user.oc1.username';
passwd varchar2(50):= 'password';
msg_from varchar2(50) := 'adam@example.com';
mailhost VARCHAR2(50) := 'smtp.us-ashburn-1.oraclecloud.com';
BEGIN
mail_conn := UTL_smtp.open_connection(mailhost, 587);
utl_smtp.starttls(mail_conn);
UTL_SMTP.AUTH(mail_conn, username, passwd, schemes => 'PLAIN');
utl_smtp.mail(mail_conn, msg_from);
utl_smtp.rcpt(mail_conn, msg_to);
UTL_smtp.open_data(mail_conn);
UTL_SMTP.write_data(mail_conn, 'Date: ' || TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS') || UTL_TCP.crlf);
UTL_SMTP.write_data(mail_conn, 'To: ' || msg_to || UTL_TCP.crlf);
UTL_SMTP.write_data(mail_conn, 'From: ' || msg_from || UTL_TCP.crlf);
UTL_SMTP.write_data(mail_conn, 'Subject: ' || msg_subject || UTL_TCP.crlf);
UTL_SMTP.write_data(mail_conn, 'Reply-To: ' || msg_to || UTL_TCP.crlf || UTL_TCP.crlf);
UTL_SMTP.write_data(mail_conn, msg_text || UTL_TCP.crlf || UTL_TCP.crlf);
UTL_smtp.close_data(mail_conn);
UTL_smtp.quit(mail_conn);
EXCEPTION
WHEN UTL_smtp.transient_error OR UTL_smtp.permanent_error THEN
UTL_smtp.quit(mail_conn);
dbms_output.put_line(sqlerrm);
WHEN OTHERS THEN
UTL_smtp.quit(mail_conn);
dbms_output.put_line(sqlerrm);
END;
/説明:
-
mailhost: Autonomous AI Databaseでの電子メール配信サービスによる電子メールの送信のステップ1のSMTP接続エンドポイントを指定します。
-
username: Autonomous AI Databaseでの電子メール配信サービスによる電子メールの送信のステップ2のSMTP資格証明ユーザー名を指定します。
-
passwd: Autonomous AI Databaseでの電子メール配信サービスによる電子メールの送信のステップ2のSMTP資格証明パスワードを指定します。
-
msg_from: Autonomous AI Databaseでの電子メール配信サービスを含む電子メールの送信のステップ3の承認済送信者のいずれかを指定します。
プライベート・エンドポイントにEメール・プロバイダを含むEメールの送信
プライベート・エンドポイントにある電子メール・プロバイダを使用して電子メールを送信するステップについて説明します。
プライベート・エンドポイント上の電子メール・プロバイダを使用してAutonomous AI Databaseから電子メールを送信するには、電子メール・プロバイダにOracle Cloud Infrastructure VCN (Autonomous AI Databaseインスタンスのプライベート・エンドポイント)からアクセスできる必要があります。たとえば、次の場合に電子メール・プロバイダにアクセスできます。
-
ソースAutonomous AI Databaseインスタンスと電子メール・プロバイダの両方が同じOracle Cloud Infrastructure VCNにあります。
-
ソースAutonomous AI Databaseインスタンスと電子メール・プロバイダは、ペアになっている別のOracle Cloud Infrastructure VCNsにあります。
-
Eメール・プロバイダは、FastConnectまたはVPNを使用してソースAutonomous AI DatabaseインスタンスのOracle Cloud Infrastructure VCNに接続されているオンプレミス・ネットワーク上にあります。
前提条件として、Eメール・プロバイダを使用してEメールを送信するには、次のイングレスおよびエグレス・ルールを定義します。
-
ソース・データベースのサブネット・セキュリティ・リストまたはネットワーク・セキュリティ・グループにエグレス・ルールを定義して、ターゲット・ホストへのトラフィックがポート587またはポート25で許可されるようにします(使用しているポートによって異なります)。
-
ソースAutonomous AI DatabaseインスタンスのIPアドレスからポート587またはポート25へのトラフィックが許可されるように、ターゲット・ホストのサブネット・セキュリティ・リストまたはネットワーク・セキュリティ・グループにイングレス・ルールを定義します(使用しているポートによって異なります)。
プライベート・エンドポイントの電子メール・プロバイダから電子メールを送信するには:
-
アクセス制御エントリ(ACE)を追加して、ADMINユーザーのSMIPアクセスを許可します。
たとえば:
-- Create an Access Control List for the host BEGIN DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE( host => 'www.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), private_target => TRUE); END; /ノート
ノート:DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACEでは、hostパラメータに対して1つのホスト名のみがサポートされます(プライベート・エンドポイントでは、IPアドレス、SCAN IPまたはSCANホスト名の使用はサポートされていません)。ROUTE_OUTBOUND_CONNECTIONSデータベース・プロパティを設定する場合、private_targetパラメータをTRUEに設定する必要はありません。詳細は、プライベート・エンドポイントを使用したアウトバウンド接続のセキュリティの強化を参照してください。 -
電子メールを送信するPL/SQLプロシージャを作成します。
-
ステップ2で作成したPL/SQLプロシージャを使用して、テスト電子メールを送信します。
たとえば:
execute send_mail('taylor@example.com', 'Email from Oracle Autonomous AI Database', 'Sent using private email provider');
資格証明オブジェクトを使用したSMTP認証の設定
資格証明オブジェクトをUTL_SMTP.SET_CREDENTIAL APIに渡す方法について説明します。
SET_CREDENTIALサブプログラムは、AUTHコマンドを送信して、SMTPサーバーに対する認証を行います。
UTL_SMTP.SET_CREDENTIALサブプログラムを使用すると、資格証明オブジェクトを渡してSMTP認証を設定できます。資格証明オブジェクトはスキーマ・オブジェクトであるため、権限のあるユーザーのみがアクセスでき、資格証明を制御するためのスキーマ・レベルの権限を構成できます。資格証明オブジェクトの渡しは、認証用のユーザー名/パスワード/キーを格納および管理するための適切で安全な方法です。
UTL_SMTP.SET_CREDENTIALサブプログラムは、UTL_SMTP.AUTHサブプログラムに代わる安全で便利なサブプログラムです。
例
...
UTL_SMTP.AUTH (l_mail_conn, 'ocid1.user.oc1.username', 'xxxxxxxxxxxx', schemes => 'PLAIN');
...前述の例に示すように、AUTHサブプログラムを起動する場合、ユーザー名/パスワードをPL/SQL仮パラメータの一部としてクリア・テキストで渡す必要があります。ユーザー名/パスワードを様々なPL/SQL自動化またはcronスクリプトに埋め込む必要がある場合があります。クリア・テキスト・パスワードを渡すことは、UTL_SMTP.SET_CREDENTIALサブプログラムで対処されるコンプライアンスの問題です。
詳細は、AUTHファンクションおよびプロシージャを参照してください。
UTL_SMTP.SET_CREDENTIAL構文
PROCEDURE UTL_SMTP.SET_CREDENTIAL (
c IN OUT NOCOPY connection,
credential IN VARCHAR2,
schemes IN VARCHAR2 DEFAULT NON_CLEARTEXT_PASSWORD_SCHEMES
);
FUNCTION UTL_SMTP.SET_CREDENTIAL (
c IN OUT NOCOPY connection,
credential IN VARCHAR2,
schemes IN VARCHAR2 DEFAULT NON_CLEARTEXT_PASSWORD_SCHEMES)
RETURN reply;例
- 資格証明オブジェクトを作成します。
BEGIN DBMS_CLOUD.CREATE_CREDENTIAL (
credential_name => 'HTTP_CRED',
username => 'web_app_user',
password => '<password>' );
END;これにより、格納されたユーザー名/パスワードのペアを作成する資格証明オブジェクトが作成されます。
詳細は、「CREATE_CREDENTIALプロシージャ」を参照してください。
詳細は、スケジューラ・ジョブの資格証明の指定を参照してください。
-
UTL_SMTP.SET_CREDENTIALプロシージャを実行します。DECLARE l_mail_conn UTL_SMTP.CONNECTION; BEGIN l_mail_conn := UTL_SMTP.OPEN_CONNECTION('smtp.example.com', 587); UTL_SMTP.SET_CREDENTIAL(l_mail_conn, 'SMTP_CRED', SCHEMES => 'PLAIN'); ... END;この例では、SMTPサーバーに対する認証を行うコマンドを送信します。Webサーバーが要求を認証するにはこの情報が必要です。値
l_mail_connはSMTP接続、SMTP_CREDは資格証明名、PLAINはSMTP認証スキームです。
詳細は、UTL_SMTPを参照してください。
Autonomous AI DatabaseでのUTL_SMTPの制限の詳細は、Autonomous AI DatabaseのPL/SQLパッケージ・ノートを参照してください。
DBMS_CLOUD_NOTIFICATIONを使用したAutonomous AI Databaseからの電子メールの送信
DBMS_CLOUD_NOTIFICATIONパッケージを使用して、メッセージおよび問合せ結果を電子メールとして送信します。
自律型AIデータベースからの電子メールとしてのメッセージの送信
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
-
smtp.email.eu-frankfurt-1.oci.oraclecloud.com
詳細は、「SMTP接続の構成」を参照してください。
-
-
電子メール配信用のSMTP資格証明を生成します。
UTL_SMTPは、電子メールの送信時に資格証明を使用して電子メール配信サーバーで認証します。詳細は、ユーザーに対するSMTP資格証明の生成を参照してください。
-
電子メール配信の承認済送信者を作成します。
UTL_SMTP.MAILでFromとして使用するすべての電子メール・アドレスに対して、このステップを実行してください。詳細は、承認済送信者の管理を参照してください。
-
アクセス制御エントリ(ACE)を追加して、ADMINユーザーのSMIPアクセスを許可します。
たとえば:
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パラメータを使用して、CCまたはBCCの送信者、smtp_host、件名、受信者および受信者をstring値で指定します。-
sender: ステップ3の承認済送信者の電子メールIDを指定します。
-
smtp_host: ステップ2のSMTPホスト名を指定します。
-
件名: 電子メールの件名を示します。
-
recipient: 受信者の電子メールIDを指定します。複数の受信者がいる場合は、電子メールIDの間にカンマを使用します。
-
to_cc: 電子メールのCCを受信する電子メールIDを指定します。複数のCC受信者がいる場合は、電子メールIDの間にカンマを使用します。
-
to_bcc: EメールのBCCを受信するEメールIDを指定します。複数のBCC受信者が存在する場合は、電子メールIDの間にカンマを使用します。
詳細は、SEND_MESSAGEプロシージャを参照してください。
-
Autonomous AI DatabaseからのEメールとして問合せ結果を送信
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
-
smtp.email.eu-frankfurt-1.oci.oraclecloud.com
詳細は、「SMTP接続の構成」を参照してください。
-
-
電子メール配信用のSMTP資格証明を生成します。
UTL_SMTPは、電子メールの送信時に資格証明を使用して電子メール配信サーバーで認証します。詳細は、ユーザーに対するSMTP資格証明の生成を参照してください。
-
電子メール配信の承認済送信者を作成します。
UTL_SMTP.MAILでFromとして使用するすべての電子メール・アドレスに対して、このステップを実行してください。詳細は、承認済送信者の管理を参照してください。
-
アクセス制御エントリ(ACE)を追加して、ADMINユーザーのSMIPアクセスを許可します。
たとえば:
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またはBCCの受信者、メッセージ、データ型およびタイトルをString値で指定します。-
sender: ステップ3の承認済送信者の電子メールIDを指定します。
-
smtp_host: ステップ2のSMTPホスト名を指定します。
-
件名: 電子メールの件名を示します。最大サイズは100文字です。
-
recipient: 受信者の電子メールIDを指定します。複数の受信者がいる場合は、電子メールIDの間にカンマを使用します。
-
to_cc: 電子メールのCCを受信する電子メールIDを指定します。複数のCC受信者がいる場合は、電子メールIDの間にカンマを使用します。
-
to_bcc: EメールのBCCを受信するEメールIDを指定します。複数のBCC受信者が存在する場合は、電子メールIDの間にカンマを使用します。
-
message: メッセージ・テキストを指定します。
-
type: 出力形式をCSVまたはJSONとして指定します。
-
title: SQL出力の添付のタイトルを指定します。タイトルは、ファイル名の生成に使用されているため、値に文字、数字、アンダースコア、ハイフンまたはドットのみを含める必要があります。
メール通知に
DBMS_CLOUD_NOTIFICATION.SEND_DATAとともに使用する最大メッセージ・サイズは32KBです。詳細は、SEND_DATAプロシージャを参照してください。
-