2020年4月20日月曜日

Emailキャンペーンを行うアプリケーションの作成(1) - OCI Email Deliveryの設定

Oracle APEXのプロダクト・マネージャーであるSalim Hlayelが、Creating Email Campaign App with Oracle APEXとして、Oracle APEXを使ってEmailキャンペーンを行うアプリケーションを作成する、という記事を書いています。記事に沿って自分でもアプリケーションを作ってみました。

元記事は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のコンソールのハンバーガー・メニューから、アイデンティティとセキュリティに含まれるユーザーを開きます。
 

登録済みユーザーの一覧画面から、ユーザーの作成をクリックします。
 

ユーザー・タイプの選択としてIAMユーザーを選びます。

ユーザーの名前説明を入力し(電子メールはオプションなので入力不要)、作成をクリックします。これでユーザーが作成されます。

作成するユーザーの名前mail_agentとしました。
 


SMTP資格証明を生成する



ユーザーが作成され、ユーザーの詳細画面が開きます。

ユーザーの機能をSMTP資格証明に限定します。

ユーザー機能の編集をクリックします。


ユーザー機能の編集では、SMTP資格証明のみにチェックを入れます。

変更の保存をクリックし、ダイアログを閉じます。


機能SMTP資格証明だけが、はいと表示されます。

リソースから、SMTP資格証明をクリックします。クリックするとSMTP資格証明の領域が表示されるので、そこからSMTP資格証明の生成をクリックします。


確認画面がポップアップするので説明を入力し、再度SMTP資格証明の生成をクリックします。


SMTP資格証明が生成されたことを通知するポップアップが開きます。

ユーザー名パスワードコピーし、安全な場所に保管して後で参照できるようにします。ここでコピーを忘れて、ポップアップ・ウィンドウをクローズするとユーザー名とパスワードを後から参照する方法はないので、SMTP資格証明を再度生成しなければなりません。
 


グループを作成する



作成したユーザーの権限にて電子メールを送信するには、そのユーザーに対してOCI Email Deliveryへのアクセスが許可されている必要があります。そのため、グループの作成と、そのグループへのユーザーの追加、その後にグループへのポリシーの割り当てを行います。

最初にグループを作成します。

アイデンティティとセキュリティからグループを開きます。
 

登録済みグループの一覧が表示されます。グループの作成をクリックします。
 

グループの名前説明を入力し、作成をクリックします。

作成するグループの名前ApprovedSendersとしました。
 


グループにユーザーを追加する



グループが作成され、グループの詳細画面が開きます。

リソースグループ・メンバーより、ユーザーをグループに追加をクリックします。


先ほど作成したユーザーmail_agentを選択し、追加をクリックします。
 

グループ・メンバーに先ほど作成したユーザーが追加されていることを確認します。
 


ポリシーを定義する



作成したグループにOCI Email Deliveryへのアクセス権限を与えるポリシーを定義します。

アイデンティティとセキュリティより、ポリシーを開きます。
 

ポリシーの一覧画面から、ポリシーの作成をクリックします。
 

作成するポリシーの名前説明を入力します。

作成するポリシーの名前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に現れるアドレス)に許可を与えます。

電子メール配信承認済送信者の一覧から承認済送信者の作成をクリックします。


電子メール・アドレスとして送信するメールの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にまつわる設定は完了です。
 

電子メールの送信履歴はビューAPEX_MAIL_LOGより確認できます。

select * from apex_mail_log order by last_updated_on desc;


次の記事で本題の、APEXのアプリケーション作成に取り掛かります。

続く