LoginSignup
2
1

DBCSで APEX_MAILを使ってメール送信(各種設定~テスト受信)

Last updated at Posted at 2022-06-13

TL;DR

前回の投稿記事の続編です!
前の投稿では、APEXを Oracle Cloud の DBaaS(DBCS)にインストールして、
APEX機能のお試しができることろまで紹介しました。
正確には、APEXの管理者ユーザでログインできることまでですねw
DBCSで SEエディションを選択しておけば、コスト的にはお気軽に試せるはずです。

この記事では、その環境でAPEX_MAILパッケージを使ってメールを送信してみます。


環境設定

Database Cloud Service (DBCS / DBaaS) on OCI: How to Set Up APEX_MAIL
このドキュメント(ID 2428364.1)を参考に、必要な設定を施してきます。
※ドキュメントを見るにはオラクルのアカウトが必要です。

前提条件(補足情報)

前回記事の手順でDBCS等々を設定している前提で、
参照ドキュメントに記載のある項目の内、不要と判断したいくつの手順は 省略 しています...
気になる方は、ドキュメントの原文を参照にしてください。

1. APEXのメール設定

APEXのパラメータ「SMTP_REST_EMAIL_MODE」を無効(N)に設定
SMTPサーバーでメールを送信するためには、このパラメータを N にする必要があるもよう

  • パラメータ「SMTP_REST_EMAIL_MODE」の確認方法
$ sudo su - oracle
$ sqlplus / as sysdba
SQL> ALTER SESSION SET CONTAINER = pdb1;
SQL> ALTER SESSION SET CURRENT_SCHEMA = APEX_210100;
SQL> SELECT wwv_flow_platform.get_preference( p_preference_name => 'SMTP_REST_EMAIL_MODE' ) as SMTP_REST_EMAIL_MODE FROM dual;

ここで、以下のように N が帰ってくるなら何もしなくてもOK。

SMTP_REST_EMAIL_MODE
--------------------------------------------------------------------------------
N

そうでなければ、(何も帰ってこない...なら、)
以下を実行して、N を設定してあげましょう。

SQL> BEGIN
  2      wwv_flow_platform.set_preference( p_preference_name => 'SMTP_REST_EMAIL_MODE', p_preference_value => 'N' );
  3      COMMIT;
  4  END;
  5  /

PL/SQL procedure successfully completed.
こちらのメッセージが表示されたら、
さっきの SELECT文 を再度実行して N が帰ってくるようになったこと確認しましょう。

2. APEXのウォレット作成

APEXにウォレットを作成するのですが、まず、
既にウォレットが作成されていないかを確認してから、作成することにしましょう。
既にウォレットがある場合は、パラメータ「WALLET_PATH」にウォレットのパスが入るもよう。

  • パラメータ「WALLET_PATH」の確認方法
$ sudo su - oracle
$ sqlplus / as sysdba
SQL> ALTER SESSION SET CONTAINER = pdb1;
SQL> ALTER SESSION SET CURRENT_SCHEMA = APEX_210100;
SQL> SELECT apex_instance_admin.get_parameter( p_parameter => 'WALLET_PATH') as WALLET_PATH FROM dual;

ここで、以下のように何も帰ってこないことを確認します。

WALLET_PATH
--------------------------------------------------------------------------------

以下を実行して、ウォレットのパスを設定してあげましょう。
ここでは、/home/oracle/APEX/walletを指定することにします。

SQL> QUIT
$ orapki wallet create -wallet /home/oracle/APEX/wallet -pwd WALLET_PASSWORD -auto_login
Operation is successfully completed. <------------------------- このメッセージを確認
$ ls /home/oracle/APEX/wallet
cwallet.sso  cwallet.sso.lck  ewallet.p12  ewallet.p12.lck <--- このメッセージを確認 

3. SMTPサーバーの証明書を取得

ルート証明書と中間証明書(.crtファイル)を取得し、DBCSノードにアップします。
※中間証明書は無くても動くみたいです。コメントで教えてもらいました。

4. ウォレットに証明書を追加

まず、ウォレット用のディレクトリに格納する。

$ sudo su - oracle
$ cp /tmp/DigiCertGlobal{RootG2,G2TLSRSASHA2562020CA1}.crt $HOME/APEX/wallet/
$ chmod 600 $HOME/APEX/wallet/*.crt

ルート証明書を追加

$ orapki wallet add -wallet /home/oracle/APEX/wallet -trusted_cert -cert "$HOME/APEX/wallet/DigiCertGlobalRootG2.crt" -pwd WALLET_PASSWORD
Operation is successfully completed. <------------------------- このメッセージを確認

中間証明書も追加

$ orapki wallet add -wallet /home/oracle/APEX/wallet -trusted_cert -cert "$HOME/APEX/wallet/DigiCertGlobalG2TLSRSASHA2562020CA1.crt" -pwd WALLET_PASSWORD
Operation is successfully completed. <------------------------- このメッセージを確認

5. APEXインスタンスの設定

  • APEX管理ログイン

  • インスタンスの管理 > インスタンスの設定 > ウォレット

    • ウォレット・パス:   file:/home/oracle/APEX/wallet
    • ウォレット・パスワード:WALLET_PASSWORD
    •  ウォレット・パスワードを変更するかどうかを確認する場合は選択

    [変更の適用] ボタンを押下して登録
    image.png

6. APEXメールサーバの設定

事前に設定している(はず) SMTPサーバ(Email Delivery)の設定をAPEXに登録します。

  • インスタンスの管理 > インスタンスの設定 > 電子メール

    • SMTPホスト・アドレス: smtp.email.ap-tokyo-1.oci.oraclecloud.com
    • SMTPホスト・ポート: 587
    • SMTP認証ユーザー名: ocid1.user.oc1..aaaaaaaa(中略)@ocid1.tenancy.oc1..aaaaaaaa(中略).wm.com
    • SMTP認証パスワード: xxxxxxxxxxxxxxxxxxxx
    •  SMTP認証ユーザー名のパスワードを変更するかどうかを確認する場合は選択
    • SSL/TLSの使用: 接続の確立後
    • デフォルトの電子メール送信元アドレス: no-replay@sub.hogegegege.net

    [変更の適用] ボタンを押下して登録
    image.png

これで、設定は完了。


送信テスト(AEPX_MAILで送信)

1. APEXワークスペースの作成

  • ワークスペースの管理 > ワークスペースの作成

    • ワークスペース名: test1
      image.png

    [次へ] ボタンを押下。

    • スキーマ名: test1
    • スキーマのパスワード:u3#Sy2s_q5cX (適当にw)
    • 域割当て制限(MB): 100
      image.png

    [次へ] ボタンを押下。

    • 管理者のユーザ: test1
    • 管理者のパスワード:test1(ログイン時に変更させる)
    • 電子メール: test1@test.co.jp(なんでも良い)
      image.png

    [次へ] ボタン、[ワークスペースの作成] ボタン、[完了] ボタンを順に押下し、サインアウトする。

2. APEXワークスペースにサインイン

  • ワークスペースの管理 > ワークスペースの作成
    • ワークスペース名: test1
    • ユーザ名: test1
    • パスワード: test1(初回ログイン時にパスワード変更を要求される)
      image.png

3. APEX_MAILで、メール送信を実行!

  • SQLワークショップ > SQLコマンド > 以下のスクリプトを [実行] する。
BEGIN
    APEX_MAIL.SEND(
        p_to   => '宛先@メアド.com',
        p_from => 'no-reply@sub.hogegegege.net',
        p_subj => 'Test from APEX_MAIL',
        p_body => 'テスト成功!'
    );
    APEX_MAIL.PUSH_QUEUE;
END;
/

image.png

少ししたら宛先@メアド.com にメールが届くとおもいます。
お疲れ様でした。


参考

何がしかの理由でメール送信ができない場合、送信できなかったメールはキューに溜まります。

$ sudo su - oracle
$ sqlplus / as sysdba
SQL> ALTER SESSION SET CONTAINER = pdb1;
SQL> SELECT count(*) FROM APEX_MAIL_QUEUE;
  COUNT(*)
----------
         1

SMTPの認証で失敗した場合などもここにたまる。
SwaksなどのSMTPのプロトコル・ログを確認できるクライアントで、
どこにNGがあるのか調査しましょう。

2
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1