専用Exadataインフラストラクチャ上のAutonomous AI Databaseでの電子メールの送信
電子メール配信サービスまたはDBMS_CLOUD_NOTIFICATIONプロシージャを使用して、専用Exadataインフラストラクチャ上のAutonomous AI Databaseで電子メールを送信できます。この記事では、これらの両方のオプションを使用して電子メールを送信する方法について説明します。
Autonomous AI DatabaseでEmail Delivery Serviceで電子メールを送信
専用ExadataインフラストラクチャでAutonomous AI DatabaseでUTL_SMTPを使用して電子メールを送信するためのステップについて説明します。
UTL_SMTPを使用して電子メールを送信するには:
-
電子メール配信用のSMTP接続エンドポイントを指定します。
-
Oracle Cloud Infrastructure (OCI) Email Deliveryサービスを使用する場合は、電子メール配信用の接続エンドポイントを指定します。たとえば、米国西部(フェニックス)が送信元リージョンの場合は、
smtp.email.US-phoenix-1.oci.oraclecloud.comを選択します。詳細は、「SMTP接続の構成」を参照してください。ノート:現在のリージョンで電子メール配信が使用できない場合は、追加のOracle Cloud Infrastructureリージョンをサブスクライブする必要があることがあります。
-
サードパーティのSMTPサーバーを使用する場合、ネットワーク管理者は、Autonomous AI DatabaseテナントとのSMTPサーバーおよびその接続を構成し、SMTP接続エンドポイント情報を指定する必要があります。
-
-
OCIユーザーの電子メール配信用のSMTP資格証明を生成します。
電子メールを送信すると、
UTL_SMTPにより、資格証明を使用して電子メール配信サーバーでの認証が行われます。詳細は、ユーザーに対するSMTP資格証明の生成を参照してください。 -
電子メール配信用の承認済送信者を作成します。
OCI Email Deliveryサービスを使用している場合は、
UTL_SMTP.MAILで「送信元」として使用するすべての電子メール・アドレスについてこのステップを実行します。詳細は、承認済送信者の管理を参照してください。 -
アクセス制御エントリ(ACE)を追加して、管理者ロールを持つユーザーのSMTPホスト・アクセスを許可します。
セキュアなSMTPを使用するには、SMTPホスト・アクセスに加えて、ウォレット・アクセス用のアクセス制御エントリ(ACE)を使用してデータベース・ユーザーを設定する必要があります。OCI Email Deliveryサービスを使用してセキュアなSMTPアクセスを行うには、PLAIN、CRAM-MD5、LOGINなどのSimple Authentication and Security Layer (SASL)プロトコルを使用してOracle Cloud Infrastructureアカウントを認証する必要があります。例については、SMTP電子メールのサンプル・コードの送信のサンプル・コードに関する項を参照してください。
-
UTL_MAILを使用して電子メールを送信するためのPL/SQLコードを記述します。ヒント:自分で電子メールの送信プロシージャを開発する場合は、コードがSMTP電子メールの送信のサンプル・コードに従っていることを確認してください。
-
ステップ5で作成したPL/SQLプロシージャを使用して、テスト電子メールを送信します。
たとえば:
execute send_mail('taylor@example.com', 'Email from Oracle Autonomous Database', 'Sent using UTL_SMTP');
詳細は、『Oracle Database 19c PL/SQLパッケージおよびタイプ・リファレンス』のUTL_SMTPに関する項または『Oracle Database 26ai PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
Autonomous AI DatabaseでのUTL_SMTPの使用の詳細は、データベースPL/SQLパッケージの使用に関するノートを参照してください。
SMTP Eメール送信サンプル・コード
Autonomous AI Databaseで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;
/
Autonomous AI Databaseからメッセージを電子メールとして送信
適用先:
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
-
smtp.email.eu-frankfurt-1.oci.oraclecloud.com
詳細は、「SMTP接続の構成」を参照してください。
-
-
電子メール配信用のSMTP資格証明を生成します。
UTL_SMTPは、電子メールの送信時に資格証明を使用して電子メール配信サーバーで認証します。詳細は、ユーザーに対するSMTP資格証明の生成を参照してください。
-
電子メール配信の承認済送信者を作成します。
UTL_SMTP.MAILで「From」として使用するすべての電子メール・アドレスに対して、この手順を実行します。詳細は、承認済送信者の管理を参照してください。
-
アクセス制御エントリ(ACE)を追加して、ADMINユーザーのSMtアクセスを許可します。
たとえば:
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ホスト名を指定します。
-
subject: 電子メールの件名を示します。
-
recipient: 受信者の電子メールIDを指定します。複数の受信者がいる場合は、電子メールIDの間にカンマを使用します。
-
to_cc: 電子メールのCCを受信する電子メールIDを指定します。複数のCC受信者がいる場合は、電子メールIDの間にカンマを使用します。
-
to_bcc: EメールのBCCを受信するEメールIDを指定します。複数のBCC受信者が存在する場合は、電子メールIDの間にカンマを使用します。
詳細は、SEND_MESSAGEプロシージャを参照してください。
-
Autonomous AI Databaseから問合せ結果を電子メールとして送信
適用先:
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
-
smtp.email.eu-frankfurt-1.oci.oraclecloud.com
詳細は、「SMTP接続の構成」を参照してください。
-
-
電子メール配信用のSMTP資格証明を生成します。
UTL_SMTPは、電子メールの送信時に資格証明を使用して電子メール配信サーバーで認証します。詳細は、ユーザーに対するSMTP資格証明の生成を参照してください。
-
電子メール配信の承認済送信者を作成します。
UTL_SMTP.MAILで「From」として使用するすべての電子メール・アドレスに対して、この手順を実行します。詳細は、承認済送信者の管理を参照してください。
-
アクセス制御エントリ(ACE)を追加して、ADMINユーザーのSMtアクセスを許可します。
たとえば:
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プロシージャを参照してください。
-