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ノードにアップします。
※中間証明書は無くても動くみたいです。コメントで教えてもらいました。
- Downloadサイト
https://www.digicert.com/kb/digicert-root-certificates.htm- Root Certificate - DigiCert Global Root G2
https://cacerts.digicert.com/DigiCertGlobalRootG2.crt - Intermediate Certificate - DigiCert Global G2 TLS RSA SHA256 2020 CA1
https://cacerts.digicert.com/DigiCertGlobalG2TLSRSASHA2562020CA1.crt
- Root Certificate - DigiCert Global Root G2
- アップロード
- ファイル
・DigiCertGlobalRootG2.crt
・DigiCertGlobalG2TLSRSASHA2562020CA1.crt - コマンド
(例)scp -i SSHキー DigiCertGlobal*.crt opc@DCBSノードのパブリックIP:/tmp
- ファイル
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管理ログイン
- URL: https://パブリックIP:8443/apex/apex_admin
- アカウント名: ADMIN
- パスワード: Passw0rd_#1
-
インスタンスの管理 > インスタンスの設定 > ウォレット
- ウォレット・パス: file:/home/oracle/APEX/wallet
- ウォレット・パスワード:WALLET_PASSWORD
- ウォレット・パスワードを変更するかどうかを確認する場合は選択
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
これで、設定は完了。
送信テスト(AEPX_MAILで送信)
1. APEXワークスペースの作成
-
ワークスペースの管理 > ワークスペースの作成
→ [次へ] ボタンを押下。
→ [次へ] ボタンを押下。
- 管理者のユーザ: test1
- 管理者のパスワード:test1(ログイン時に変更させる)
- 電子メール: test1@test.co.jp(なんでも良い)
→ [次へ] ボタン、[ワークスペースの作成] ボタン、[完了] ボタンを順に押下し、サインアウトする。
2. APEXワークスペースにサインイン
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;
/
少ししたら宛先@メアド.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があるのか調査しましょう。