You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Oracle APEX_MAIL包实现收件人邮箱域名自动替换适配Office365

方案1:封装自定义邮件发送包(最稳妥,无侵入)

不要直接修改Oracle原生的APEX_MAIL系统包,后续版本升级、补丁更新都会直接覆盖你的修改,还可能导致APEX核心功能异常。你可以自己封装一层自定义的邮件调用包,所有业务代码后续统一调用这个自定义包即可:

  • 自定义包核心逻辑:在调用APEX_MAIL.SEND前,先对收件人地址做字符串替换
  • 示例代码片段:
CREATE OR REPLACE PACKAGE CUSTOM_APEX_MAIL AS
  FUNCTION replace_email_domain(p_email VARCHAR2) RETURN VARCHAR2;
  PROCEDURE SEND(
    p_to        IN VARCHAR2,
    p_from      IN VARCHAR2,
    p_subj      IN VARCHAR2,
    p_body      IN VARCHAR2,
    p_body_html IN VARCHAR2 DEFAULT NULL
    -- 其余参数和APEX_MAIL.SEND保持完全一致即可
  );
END CUSTOM_APEX_MAIL;
/

CREATE OR REPLACE PACKAGE BODY CUSTOM_APEX_MAIL AS
  FUNCTION replace_email_domain(p_email VARCHAR2) RETURN VARCHAR2 IS
  BEGIN
    -- 支持多个收件人用逗号分隔的批量替换场景
    RETURN REPLACE(p_email, '@domain.com', '@domain.onmicrosoft.com');
  END replace_email_domain;

  PROCEDURE SEND(
    p_to        IN VARCHAR2,
    p_from      IN VARCHAR2,
    p_subj      IN VARCHAR2,
    p_body      IN VARCHAR2,
    p_body_html IN VARCHAR2 DEFAULT NULL
  ) IS
  BEGIN
    APEX_MAIL.SEND(
      p_to        => replace_email_domain(p_to),
      p_from      => p_from,
      p_subj      => p_subj,
      p_body      => p_body,
      p_body_html => p_body_html
    );
  END SEND;
END CUSTOM_APEX_MAIL;
/
  • 如果你已经有大量业务代码直接调用了APEX_MAIL.SEND,可以用同义词做无缝切换:先把原生APEX_MAIL的同义词重命名,再创建同名同义词指向你写的CUSTOM_APEX_MAIL即可,业务代码不需要做任何修改。

方案2:修改APEX邮件队列表触发器(适配存量调用场景)

APEX的邮件发送逻辑是先把邮件写入APEX_XXXXX.APEX_MAIL_QUEUE表(XXXXX是你安装的APEX版本号,比如230100对应23.1版本),再由定时任务发送。你可以在这个表上创建一个前置触发器,在记录插入时自动替换TO字段的域名:

CREATE OR REPLACE TRIGGER TRG_APEX_MAIL_REPLACE_DOMAIN
BEFORE INSERT ON APEX_230100.APEX_MAIL_QUEUE
FOR EACH ROW
BEGIN
  :NEW.MAIL_TO := REPLACE(:NEW.MAIL_TO, '@domain.com', '@domain.onmicrosoft.com');
  -- 如果需要同时替换抄送、密送地址,取消下面两行注释即可
  -- :NEW.MAIL_CC := REPLACE(:NEW.MAIL_CC, '@domain.com', '@domain.onmicrosoft.com');
  -- :NEW.MAIL_BCC := REPLACE(:NEW.MAIL_BCC, '@domain.com', '@domain.onmicrosoft.com');
END;
/
  • 注意APEX版本升级后,表名的版本号前缀会变化,升级后需要重新创建触发器到新版本的队列表上。

内容的提问来源于stack exchange,提问作者Jordan Holmer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 08:18:00