機械翻訳について

Autonomous DatabaseにEメールを送信

Autonomous Databaseに電子メールを送信するための多くのオプションがあります。 テキスト・メッセージまたはSQL問合せの出力をSlackまたはMSTeamsチャネルに送信することもできます。

Autonomous DatabaseのEmail Deliveryサービスで電子メールを送信

Autonomous DatabaseUTL_SMTPを使用して電子メールを送信するステップを説明します。

Oracle Cloud Infrastructure Email Delivery Serviceで電子メールを送信するには:

  1. 電子メール配信用の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 Databaseとは異なるリージョンにある場合は、「Oracle Cloudサポート」でリクエストを作成して、クラウド操作でそのリージョンの電子メール配信サービスをAutonomous Databaseに対して有効にする必要があります。

    詳細については、「SMTP接続の構成」を参照してください。

  2. 電子メール配信用のSMTP資格証明の生成。 UTL_SMTPは、電子メールを送信するときに資格証明を使用して電子メール配信サーバーを認証します。

    詳細については、「ユーザーのSMTP資格証明の生成」を参照してください。

  3. eメール配信の承認済送信者を作成します。 UTL_SMTP.MAILFromとして使用するすべての電子メール・アドレスについて、このステップを完了します。

    詳細については、「承認済送信者の管理」を参照してください。

  4. アクセス制御エントリ(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;
    /
  5. 電子メールを送信するPL/SQLプロシージャを作成します。

    例は、「SMTP Eメール送信サンプル・コード」で示したサンプル・コードを参照してください。

  6. ステップ5で作成したPL/SQLプロシージャを使用して、テスト電子メールを送信します。

    たとえば:

    execute send_mail('taylor@example.com', 'Email from Oracle Autonomous Database', 'Sent using UTL_SMTP');

UTL_SMTPの詳細は、UTL_SMTPを参照してください。

Autonomous DatabaseによるUTL_SMTPの制限については、「Autonomous DatabaseのPL/SQLパッケージ・ノート」を参照してください。

SMTP Eメール送信サンプル・コード

Autonomous DatabaseUTL_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;
/

説明:

プライベート・エンドポイントでの電子メール・プロバイダによる電子メールの送信

プライベート・エンドポイントにある電子メール・プロバイダを使用して電子メールを送信するステップについて説明します。

プライベート・エンドポイントで電子メール・プロバイダを使用して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へのトラフィックが許可されるように、ターゲット・ホストのサブネット・セキュリティ・リストまたはネットワーク・セキュリティ・グループにイングレス・ルールを定義します(使用しているポートによって異なります)。

プライベート・エンドポイントで電子メール・プロバイダから電子メールを送信するには:

  1. アクセス制御エントリ(ACE)を追加することでADMINユーザーのSMTPアクセスを許可します。

    たとえば:

    -- 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パラメータ「(プライベート・エンドポイントでは、IPアドレス、SCAN IPまたはSCANホスト名の使用はサポートされていません)。」の1つのホスト名のみをサポート

    ROUTE_OUTBOUND_CONNECTIONSPRIVATE_ENDPOINTに設定すると、このAPIではprivate_targetパラメータをTRUEに設定する必要はありません。 詳細については、「プライベート・エンドポイントを使用したアウトバウンド接続のセキュリティの強化」を参照してください。

  2. 電子メールを送信するPL/SQLプロシージャを作成します。
  3. ステップ2で作成したPL/SQLプロシージャを使用して、テスト電子メールを送信します。

    たとえば:

    execute send_mail('taylor@example.com', 'Email from Oracle Autonomous Database', 'Sent using private email provider');

資格証明オブジェクトを使用した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 DatabaseUTL_SMTPの制限の詳細は、「Autonomous DatabaseのPL/SQLパッケージ・ノート」を参照してください。

DBMS_CLOUD_NOTIFICATIONを使用してAutonomous Databaseから電子メールを送信

DBMS_CLOUD_NOTIFICATIONパッケージを使用して、メッセージおよび問合せ結果を電子メールとして送信します。

Autonomous Databaseから電子メールとしてメッセージを送信

DBMS_CLOUD_NOTIFICATIONを使用して、電子メールとしてメッセージを送信できます。
  1. 電子メール配信用の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接続の構成」を参照してください。

  2. 電子メール配信用のSMTP資格証明の生成。 UTL_SMTPは、電子メールを送信するときに資格証明を使用して電子メール配信サーバーを認証します。

    詳細については、「ユーザーのSMTP資格証明の生成」を参照してください。

  3. eメール配信の承認済送信者を作成します。 UTL_SMTP.MAILFromとして使用するすべての電子メール・アドレスについて、このステップを完了します。

    詳細については、「承認済送信者の管理」を参照してください。

  4. アクセス制御エントリ(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;
    /
  5. 資格証明オブジェクトを作成し、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の承認済送信者のEメールIDを指定します。

    • smtp_host: ステップ2のSMTPホスト名を指定します。

    • subject: 電子メールの件名を指定します。

    • 受信者: 受信者の電子メールIDを指定します。 複数の受信者が存在する場合は、電子メールID間にカンマを使用します。

    • to_cc: EメールのCCを受信するEメールIDを指定します。 複数のCC受信者が存在する場合は、電子メールID間にカンマを使用します。

    • to_bcc: EメールのBCCを受信するEメールIDを指定します。 複数のBCC受信者が存在する場合は、電子メールID間にカンマを使用します。

    詳細については、「SEND_MESSAGEプロシージャ」を参照してください。

Autonomous Databaseから問合せ結果を電子メールとして送信

DBMS_CLOUD_NOTIFICATIONパッケージを使用して、問合せの結果を電子メールとして送信できます。

DBMS_CLOUD_NOTIFICATIONを使用してメールを送信するには:

  1. 電子メール配信用の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接続の構成」を参照してください。

  2. 電子メール配信用のSMTP資格証明の生成。 UTL_SMTPは、電子メールを送信するときに資格証明を使用して電子メール配信サーバーを認証します。

    詳細については、「ユーザーのSMTP資格証明の生成」を参照してください。

  3. eメール配信の承認済送信者を作成します。 UTL_SMTP.MAILFromとして使用するすべての電子メール・アドレスについて、このステップを完了します。

    詳細については、「承認済送信者の管理」を参照してください。

  4. アクセス制御エントリ(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;
    /
  5. 資格証明オブジェクトを作成し、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の承認済送信者のEメールIDを指定します。

    • smtp_host: ステップ2のSMTPホスト名を指定します。

    • subject: 電子メールの件名を指定します。 最大サイズは100文字です。

    • 受信者: 受信者のEメールIDを指定します。 複数の受信者が存在する場合は、電子メールID間にカンマを使用します。

    • to_cc: EメールのCCを受信するEメールIDを指定します。 複数のCC受信者が存在する場合は、電子メールID間にカンマを使用します。

    • to_bcc: EメールのBCCを受信するEメールIDを指定します。 複数のBCC受信者が存在する場合は、電子メールID間にカンマを使用します。

    • message: メッセージ・テキストを指定します。

    • type: 出力形式をCSVまたはJSONとして指定します。

    • title: SQL出力の添付ファイルのタイトルを指定します。 タイトルには、文字、数字、アンダースコア、ハイフンまたはドットのみを、ファイル名を生成するために使用されているためその値の文字として含める必要があります。

    メール通知のDBMS_CLOUD_NOTIFICATION.SEND_DATAで使用する最大メッセージ・サイズは、32kバイトです。

    詳細については、「SEND_DATAプロシージャ」を参照してください。