Autonomous Databaseでの電子メールの送信
Autonomous Databaseには、電子メールを送信するためのオプションが多数あります。テキスト・メッセージまたはSQL問合せの出力をSlackまたはMSTeamsチャネルに送信することもできます。
- Autonomous Databaseでの電子メール配信サービスによる電子メールの送信
Autonomous DatabaseでUTL_SMTP
を使用して電子メールを送信するステップについて説明します。 - プライベート・エンドポイントでの電子メール・プロバイダによる電子メールの送信
プライベート・エンドポイントにある電子メール・プロバイダを使用して電子メールを送信するステップについて説明します。 - 資格証明オブジェクトを使用したSMTP認証の設定
資格証明オブジェクトをUTL_SMTP.SET_CREDENTIAL
APIに渡す方法について説明します。 - DBMS_CLOUD_NOTIFICATIONを使用したAutonomous Databaseからの電子メールの送信
DBMS_CLOUD_NOTIFICATION
パッケージを使用して、メッセージおよび問合せ結果を電子メールとして送信します。
Autonomous Databaseでの電子メール配信サービスによる電子メールの送信
UTL_SMTP
を使用してAutonomous Databaseに送信するステップについて説明します。
Oracle Cloud Infrastructure Email Delivery Serviceは、パブリックSMTPエンドポイントでサポートされている唯一の電子メール・プロバイダです。
Oracle Cloud Infrastructure Email Delivery Serviceに電子メールを送信するには:
UTL_SMTP
の詳細は、UTL_SMTPを参照してください。
Autonomous DatabaseでのUTL_SMTP
の制限については、PL/SQLパッケージ・ノートAutonomous Databaseを参照してください。
- SMTP電子メール送信のサンプル・コード
Autonomous Database上でUTL_SMTP
を使用して電子メールを送信するためのサンプル・コードを示します。
SMTP電子メール送信のサンプル・コード
Autonomous 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 Databaseでの電子メール配信サービスによる電子メールの送信のステップ1のSMTP接続エンドポイントを指定します。
-
username: Autonomous Databaseでの電子メール配信サービスによる電子メール送信のステップ2のSMTP資格証明ユーザー名を指定します。
-
passwd: Autonomous Databaseでの電子メール配信サービスによる電子メール配信サービスの送信のステップ2のSMTP資格証明パスワードを指定します。
-
msg_from: Autonomous Databaseでの電子メール配信サービスによる電子メールの送信のステップ3で承認された送信者のいずれかを指定します。
プライベート・エンドポイントでのEメール・プロバイダによるEメールの送信
プライベート・エンドポイントにある電子メール・プロバイダを使用して電子メールを送信するステップについて説明します。
プライベート・エンドポイントでのEメール・プロバイダを使用してAutonomous DatabaseからEメールを送信するには、Oracle Cloud Infrastructure VCN (Autonomous Databaseインスタンスのプライベート・エンドポイント)からEメール・プロバイダにアクセスできる必要があります。たとえば:
-
ソースAutonomous Databaseインスタンスと電子メール・プロバイダの両方が同じOracle Cloud Infrastructure VCN内にあります。
-
ソースAutonomous Databaseインスタンスと電子メール・プロバイダは、ペアになっている別のOracle Cloud Infrastructure VCNにあります。
-
電子メール・プロバイダは、FastConnectまたはVPNを使用してソースAutonomous DatabaseインスタンスのOracle Cloud Infrastructure VCNに接続されているオンプレミス・ネットワーク上にあります。
前提条件として、電子メール・プロバイダを使用して電子メールを送信するには、次のイングレスおよびエグレス・ルールを定義します:
-
ターゲット・ホストへのトラフィックが(使用しているポートに応じて)ポート587またはポート25で許可されるように、ソース・データベースのサブネット・セキュリティ・リストまたはネットワーク・セキュリティ・グループにエグレス・ルールを定義します。
-
ソースAutonomous DatabaseインスタンスのIPアドレスからポート587またはポート25へのトラフィックが(使用しているポートに応じて)許可されるように、ターゲット・ホストのサブネット・セキュリティ・リストまたはネットワーク・セキュリティ・グループにイングレス・ルールを定義します。
プライベート・エンドポイントでの電子メール・プロバイダから電子メールを送信するには:
資格証明オブジェクトを使用した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 DatabaseでのUTL_SMTP
の制限の詳細は、PL/SQLパッケージ・ノートAutonomous Databaseを参照してください。
DBMS_CLOUD_NOTIFICATIONを使用したAutonomous Databaseからの電子メールの送信
DBMS_CLOUD_NOTIFICATION
パッケージを使用して、メッセージおよび問合せ結果を電子メールとして送信します。
DBMS_CLOUD_NOTIFICATION
では、パブリックSMTPエンドポイントにのみ電子メールを送信できます。Oracle Cloud Infrastructure Email Delivery Serviceは、サポートされている唯一の電子メール・プロバイダです。
- Autonomous Databaseからの電子メールとしてのメッセージの送信
DBMS_CLOUD_NOTIFICATION
を使用して、メッセージを電子メールとして送信できます。 - Autonomous Databaseからの問合せ結果を電子メールとして送信
DBMS_CLOUD_NOTIFICATION
パッケージを使用して、問合せの結果を電子メールとして送信できます。