Autonomous DatabaseにEメールを送信
Autonomous Databaseに電子メールを送信するための多くのオプションがあります。 テキスト・メッセージまたはSQL問合せの出力をSlackまたはMSTeamsチャネルに送信することもできます。
- Autonomous DatabaseのEmail Deliveryサービスで電子メールを送信
Autonomous DatabaseでUTL_SMTP
を使用して電子メールを送信するステップについて説明します。 - プライベート・エンドポイントでの電子メール・プロバイダによる電子メールの送信
プライベート・エンドポイントにある電子メール・プロバイダを使用して電子メールを送信するステップについて説明します。 - 資格証明オブジェクトを使用したSMTP認証の設定
資格証明オブジェクトをUTL_SMTP.SET_CREDENTIAL
APIに渡す方法について説明します。 - DBMS_CLOUD_NOTIFICATIONを使用してAutonomous Databaseから電子メールを送信
DBMS_CLOUD_NOTIFICATION
パッケージを使用して、メッセージおよび問合せ結果を電子メールとして送信します。
Autonomous DatabaseのEmail Deliveryサービスで電子メールを送信
Autonomous DatabaseでUTL_SMTP
を使用して電子メールを送信するステップを説明します。
Oracle Cloud Infrastructure Email Delivery Serviceで電子メールを送信するには:
UTL_SMTP
の詳細は、UTL_SMTPを参照してください。
Autonomous DatabaseによるUTL_SMTP
の制限については、「Autonomous DatabaseのPL/SQLパッケージ・ノート」を参照してください。
- SMTP Eメール送信サンプル・コード
Autonomous DatabaseにUTL_SMTP
を指定して電子メールを送信するためのサンプル・コードを示します。
親トピック: Autonomous DatabaseにEメールを送信
SMTP Eメール送信サンプル・コード
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のEmail Deliveryサービスで電子メールを送信のステップ1からSMTP接続エンドポイントを指定します。
-
username: Autonomous DatabaseのEmail Deliveryサービスで電子メールを送信のステップ2からSMTP資格証明のユーザー名を指定します。
-
passwd: Autonomous DatabaseのEmail Deliveryサービスで電子メールを送信のステップ2からSMTP資格証明のパスワードを指定します。
-
msg_from: Autonomous DatabaseのEmail Deliveryサービスで電子メールを送信でステップ3から承認済送信者の1つを指定します。
プライベート・エンドポイントでの電子メール・プロバイダによる電子メールの送信
プライベート・エンドポイントにある電子メール・プロバイダを使用して電子メールを送信するステップについて説明します。
プライベート・エンドポイントで電子メール・プロバイダを使用してAutonomous Databaseから電子メールを送信するには、電子メール・プロバイダにOracle Cloud Infrastructure VCN (Autonomous Databaseインスタンスのプライベート・エンドポイント)からアクセスできる必要があります。 たとえば、次の場合に電子メール・プロバイダにアクセスできます:
-
ソース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へのトラフィックが許可されるように、ターゲット・ホストのサブネット・セキュリティ・リストまたはネットワーク・セキュリティ・グループにイングレス・ルールを定義します(使用しているポートによって異なります)。
プライベート・エンドポイントで電子メール・プロバイダから電子メールを送信するには:
親トピック: Autonomous DatabaseにEメールを送信
資格証明オブジェクトを使用したSMTP認証の設定
資格証明オブジェクトをUTL_SMTP.SET_CREDENTIAL
APIに渡す方法について説明します。
SET_CREDENTIAL
サブプログラムは、認証のためにAUTHコマンドをSMTPサーバーに送信します。
UTL_SMTP.SET_CREDENTIAL
サブプログラムを使用すると、資格証明オブジェクトを渡してSMTP認証を設定できます。 資格証明オブジェクトはスキーマ・オブジェクトであるため、アクセスできるのは特権ユーザーのみで、資格証明を制御するためのスキーマ・レベルの権限を構成できます。 資格証明オブジェクトの受渡しは、認証のためにusername/password/keysを格納および管理するための適切で安全な方法です。
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
の制限の詳細は、「Autonomous DatabaseのPL/SQLパッケージ・ノート」を参照してください。
親トピック: Autonomous DatabaseにEメールを送信
DBMS_CLOUD_NOTIFICATIONを使用してAutonomous Databaseから電子メールを送信
DBMS_CLOUD_NOTIFICATION
パッケージを使用して、メッセージおよび問合せ結果を電子メールとして送信します。
- Autonomous Databaseから電子メールとしてメッセージを送信
DBMS_CLOUD_NOTIFICATION
を使用して、メッセージを電子メールとして送信できます。 - Autonomous Databaseから問合せ結果を電子メールとして送信
DBMS_CLOUD_NOTIFICATION
パッケージを使用して、問合せの結果を電子メールとして送信できます。
親トピック: Autonomous DatabaseにEメールを送信