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 管理画面から設定します。
- APEX 管理画面へログイン
- Manage Instance → Instance Settings
- Email タブを開く
- SMTP ホスト名・ポート番号・送信元アドレスを設定
| 項目 | 値(例) |
|---|---|
| SMTP Host | smtp.gmail.com |
| Port | 587 |
| Default Sender | no-reply@example.com |
2.2 動作確認
「Test Email」ボタンで SMTP が正しく設定されているか確認できます。
3. ノーコードでメール送信(ページプロセス)
APEX アプリでは、コードを書かずにメール送信ができます。
3.1 フォーム送信時にメールを送る例
- ページ → 「ページ処理」
- 「プロセス」 → 「作成」
- 種類として メール送信 を選択
- 以下のように設定する
| 設定 | 入力例 |
|---|---|
| 送信先 | &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 のメール機能は業務アプリで非常に便利です。
承認ワークフロー、通知、レポート配信など、ぜひ活用してみてください。