元記事はOracle APEXが動いている環境を選んでいませんが、今回はAlways FreeのATP - Autonomous Transaction Processingのインスタンスを使ってアプリケーション開発を進めていきます。
Oracle Cloudの環境では、OCI Email Deliveryとして電子メールを送信するサービスが提供されています。このサービスではAlways Freeのリソースとして、1ヶ月あたり3,100通のメールを無料で送信できます。その他のサービスにかかる価格は、こちらのページに記載されています。
元の記事にはOracle CloudのOCI Email Deliveryの設定については記載がないので、最初にそちらから準備していきます。手順の説明は英語ではこちらのマニュアルの記載、日本語ではこちらの記載にしたがって作業を進めていきます。
SMTP接続エンドポイントを探す
使用しているリージョンにあるSMTP接続エンドポイントを見つけます。こちらのマニュアルにあるSMTP Connection Endpointsのリストから探します。東京リージョンであればSMTP接続エンドポイントはsmtp.email.ap-tokyo-1.oci.oraclecloud.comです。大阪であれば、smtp.email.ap-osaka-1.oci.oraclecloud.comです。
以下より説明する作業では、北米のAshburnリージョンのエンドポイントsmtp.email.us-ashburn-1.oci.oraclecloud.comを使用します。
マニュアルに記載されている推奨に従って新規にユーザーを作成します。そのユーザーにてSMTP資格証明を生成します。
Oracle Cloudのコンソールのハンバーガー・メニューから、アイデンティティとセキュリティに含まれるユーザーを開きます。
ユーザー機能の編集では、SMTP資格証明のみにチェックを入れます。
ユーザーを作成する
マニュアルに記載されている推奨に従って新規にユーザーを作成します。そのユーザーにてSMTP資格証明を生成します。
Oracle Cloudのコンソールのハンバーガー・メニューから、アイデンティティとセキュリティに含まれるユーザーを開きます。
ユーザーの名前と説明を入力し(電子メールはオプションなので入力不要)、作成をクリックします。これでユーザーが作成されます。
作成するユーザーの名前はmail_agentとしました。
ユーザーの機能をSMTP資格証明に限定します。
ユーザー機能の編集をクリックします。
変更の保存をクリックし、ダイアログを閉じます。
機能のSMTP資格証明だけが、はいと表示されます。
リソースから、SMTP資格証明をクリックします。クリックするとSMTP資格証明の領域が表示されるので、そこからSMTP資格証明の生成をクリックします。
ユーザー名とパスワードをコピーし、安全な場所に保管して後で参照できるようにします。ここでコピーを忘れて、ポップアップ・ウィンドウをクローズするとユーザー名とパスワードを後から参照する方法はないので、SMTP資格証明を再度生成しなければなりません。
グループを作成する
作成したユーザーの権限にて電子メールを送信するには、そのユーザーに対してOCI Email Deliveryへのアクセスが許可されている必要があります。そのため、グループの作成と、そのグループへのユーザーの追加、その後にグループへのポリシーの割り当てを行います。
最初にグループを作成します。
アイデンティティとセキュリティからグループを開きます。
作成するグループの名前はApprovedSendersとしました。
リソースのグループ・メンバーより、ユーザーをグループに追加をクリックします。
先ほど作成したユーザーmail_agentを選択し、追加をクリックします。
アイデンティティとセキュリティより、ポリシーを開きます。
作成するポリシーの名前はEmailFamilyPolicyとしました。
ポリシー・ステートメントを設定します。手動エディタの表示をONにします。
Allow group グループ名 to use email-family in tenancy
できれば"in tenancy"としてテナンシー全体で許可するより、コンパートメントに限定する方が推奨です。今回はAlways Freeのアカウントであり、コンパートメント単位の細かい管理は想定していないため、テナンシー全体で定義します。
グループはApprovedSendersとして作成しているため、今回の例で設定するポリシーは以下になります。
Allow group ApprovedSenders to use email-family in tenancy
以上を入力し、作成をクリックします。
このサービスまたはリソースを使用するには、有料アカウントにアップグレードする必要があります。と表示されますが、アップグレードはせずに作業を継続します。
電子メール配信の承認済送信者の一覧から承認済送信者の作成をクリックします。
電子メール・アドレスとして送信するメールのFromに与える値を入力し、承認済送信者の作成をクリックします。
Due to domain policy, approved sender cannnot be created in this email domain until DKIM is provisioned. と表示され、承認済送信者の作成ができない場合があります。
このような電子メール・アドレスを承認済送信者として設定するには、DKIMを事前に設定する必要があります。DKIMの設定については、こちらのOracle Cloud Infrastructureチュートリアルが参考になります。
作成された電子メールの承認済送信者が一覧に表示されます。
以上で、Oracle Cloudのコンソールを使って行うOCI Email Deliveryに関する設定は完了です。
Oracle APEXのインスタンス設定を行う
データベース・アクションに管理ユーザーADMINでサインインします。
SQLの画面から以下のスクリプトを実行し、APEXの電子メール送信を構成します。
set define offはパスワードに'&'が含まれていると、置換する文字列と認識されるので、それを抑制するために指定しています。
set define off;
begin
APEX_INSTANCE_ADMIN.SET_PARAMETER('SMTP_HOST_ADDRESS', 'メールサーバーのアドレス');
APEX_INSTANCE_ADMIN.SET_PARAMETER('SMTP_USERNAME', 'SMTP資格証明を作成したときにコピーしたユーザー名');
APEX_INSTANCE_ADMIN.SET_PARAMETER('SMTP_PASSWORD', 'SMTP資格証明を作成したときにコピーしたパスワード');
COMMIT;
end;
以上で、Oracle APEXから電子メールを送信する設定は完了です。
テスト・メールを送信する
Oracle APEXのSQLワークショップに含まれる、SQLコマンドの画面を開いて、以下のSQLを実行します。
BEGIN
APEX_MAIL.SEND(p_from => '承認済送信者として設定した電子メール・アドレス',
p_to => '送信先の電子メール・アドレス',
p_subj => 'Email from Oracle Autonomous Database',
p_body => 'Sent using APEX_MAIL');
APEX_MAIL.PUSH_QUEUE;
END;
/
サブジェクトが"Email from Oracle Autonomous Database"、本文が"Sent using APEX_MAIL"となっている電子メールの受信が確認できたら、OCI Email Deliveryにまつわる設定は完了です。
select * from apex_mail_log order by last_updated_on desc;
次の記事で本題の、APEXのアプリケーション作成に取り掛かります。
続く