0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Oracle APEX でメールを送信する方法まとめ

Posted at

Oracle APEX でメールを送信する方法まとめ(サンプルコード付き)

Oracle APEX を利用した Web アプリケーションでは、パスワード通知、申請承認、レポート送信など、メール機能を使う場面が多くあります。
本記事では APEX 標準機能を使ったメール送信の方法 を、できる限り分かりやすく紹介します。

対象バージョン:Oracle APEX 24.1
(※23.x / 24.x 系であれば大きく変わりません)


📌 1. メール送信の仕組みとは?

APEX がメールを送信するためには、データベース側に メール設定(SMTP サーバ) を登録する必要があります。

APEX → データベース(UTL_MAIL / UTL_SMTP) → SMTP サーバ → 相手のメールという流れで送信されます。

APEX では主に次の 2 通りの方法でメール送信ができます。

  • ① PL/SQL(APEX_MAIL パッケージ)
  • ② ノーコードの「メール送信プロセス」

2. SMTP(メールサーバ)の設定

2.1 管理者による設定

APEX 管理画面から設定します。

  1. APEX 管理画面へログイン
  2. Manage InstanceInstance Settings
  3. Email タブを開く
  4. SMTP ホスト名・ポート番号・送信元アドレスを設定
項目 値(例)
SMTP Host smtp.gmail.com
Port 587
Default Sender no-reply@example.com

2.2 動作確認

Test Email」ボタンで SMTP が正しく設定されているか確認できます。


3. ノーコードでメール送信(ページプロセス)

APEX アプリでは、コードを書かずにメール送信ができます。

3.1 フォーム送信時にメールを送る例

  1. ページ → 「ページ処理」
  2. 「プロセス」 → 「作成」
  3. 種類として メール送信 を選択
  4. 以下のように設定する
設定 入力例
送信先 &P10_EMAIL.
件名 "ご登録ありがとうございます"
本文 "以下の内容で登録を受け付けました..."

ページアイテム(例:&P10_USERNAME.)をテンプレートとして利用できます。


4. PL/SQL を使ってメール送信(APEX_MAIL)

柔軟な送信が必要な場合は apex_mail パッケージを使用します。


4.1 最も基本的なメール送信

begin
    apex_mail.send(
        p_to        => 'user@example.com',
        p_from      => 'no-reply@example.com',
        p_subj      => 'テストメール',
        p_body      => 'APEX_MAIL を使ったメール送信テストです。'
    );

    apex_mail.push_queue;
end;

ポイント
apex_mail.send は 送信キューに登録するだけ
実際の送信には apex_mail.push_queue が必要
Autonomous DB では自動送信される場合もあり

4.2 HTML メールを送る

begin
    apex_mail.send(
        p_to          => 'user@example.com',
        p_from        => 'no-reply@example.com',
        p_subj        => 'HTML メールのサンプル',
        p_body        => 'テキスト形式のメールです。',
        p_body_html   => '<h2>ご連絡ありがとうございます</h2><p>これは <b>HTML メール</b> のサンプルです。</p>'
    );

    apex_mail.push_queue;
end;

4.3 添付ファイル付きメール

declare
    l_file_blob blob;
begin
    select blob_content
      into l_file_blob
      from apex_application_temp_files
     where name = 'sample.pdf';

    apex_mail.add_attachment(
        p_mail_id       => apex_mail.send(
            p_to   => 'user@example.com',
            p_from => 'no-reply@example.com',
            p_subj => '添付ファイル付きメール',
            p_body => 'PDF ファイルを添付しています。'
        ),
        p_attachment    => l_file_blob,
        p_filename      => 'sample.pdf',
        p_mime_type     => 'application/pdf'
    );

    apex_mail.push_queue;
end;

5. メール送信ログの確認方法

APEX にはメールログが標準搭載されています。

🔍 確認場所

アプリケーション → 監視 → メールキュー

または SQL 経由:

select mail_id, to_address, from_address, subject, sent_date
from apex_mail_log
order by mail_id desc;

6. 送信できない場合のチェックリスト

症状 チェック内容
送れない SMTP 設定(ホスト・ポート)
日本語が文字化け UTF-8 で送信されているか
push_queue しても送れない DB ジョブ・ACL 設定
HTML メールが崩れる タグのエスケープ

🛡 SMTP ACL の設定例(必要な場合)

begin
    dbms_network_acl_admin.append_host_ace(
        host => 'smtp.gmail.com',
        ace  => xs$ace_type(
                    privilege_list => xs$name_list('smtp'),
                    principal_name => 'APEX_220200',
                    principal_type => xs_acl.pt_role )
    );
end;
/

※ユーザ名は環境により異なります。

✅ まとめ

本記事では Oracle APEX でのメール送信について以下を紹介しました:

  • 管理画面からの SMTP 設定
  • ノーコードでメール送信
  • PL/SQL を使った HTML・添付ファイル付きメール送信
  • メールキュー / ログの確認
  • トラブルシューティング

APEX のメール機能は業務アプリで非常に便利です。
承認ワークフロー、通知、レポート配信など、ぜひ活用してみてください。

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?