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

Oracle 19c 使用UTL_SMTP发邮件报ORA-29279 554错误如何解决

Oracle 19c 下UTL_SMTP发送邮件报ORA-29279 554错误的原因及解决方案

核心报错说明

ORA-20000: 邮件发送失败,触发错误:ORA-29279: 永久性SMTP错误: 554

常见原因

  • Oracle 12c及以上版本默认启用*网络访问控制列表(ACL)*机制,11g中未配置ACL也能正常调用UTL_SMTP的代码,在19c中会被系统拦截,导致SMTP服务器返回554拒绝错误
  • 19c对SMTP传输的加密要求更严格,大多数现代SMTP服务器默认拒绝未加密的25端口明文传输请求,11g中的明文传输代码在19c环境下不再被SMTP服务器接受
  • 迁移后Oracle数据库所在服务器的公网IP未加入SMTP服务器的白名单,或者被SMTP服务商判定为可疑发件IP,触发554错误
  • 19c的UTL_SMTP对入参校验更严格,原有代码中如果存在发件人格式不规范、认证参数传值错误的情况,11g可能兼容通过,19c会触发服务器端554错误

解决方案

步骤1:配置网络访问控制列表(ACL)

给执行发邮件代码的数据库用户授予SMTP服务器的访问权限,示例代码如下:

BEGIN
  -- 创建ACL规则
  DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(
    acl => 'utl_smtp_access.xml',
    description => 'Allow UTL_SMTP access to specified SMTP server',
    principal => 'YOUR_DB_USER', -- 替换为实际的数据库用户名
    is_grant => TRUE,
    privilege => 'connect'
  );
  -- 绑定ACL到指定SMTP服务器和端口
  DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(
    acl => 'utl_smtp_access.xml',
    host => 'smtp.example.com', -- 替换为实际的SMTP服务器地址
    lower_port => 587, -- 替换为实际SMTP端口,加密端口一般为587/465
    upper_port => 587
  );
  COMMIT;
END;
/

步骤2:修改UTL_SMTP代码添加TLS加密支持

19c中需要显式调用UTL_SMTP.STARTTLS方法开启加密传输,调整后的代码示例如下:

DECLARE
  v_smtp_conn UTL_SMTP.CONNECTION;
BEGIN
  -- 建立SMTP连接
  v_smtp_conn := UTL_SMTP.OPEN_CONNECTION(host => 'smtp.example.com', port => 587);
  UTL_SMTP.EHLO(v_smtp_conn, 'your-client-domain.com');
  -- 开启TLS加密,11g版本的代码通常省略这一步
  UTL_SMTP.STARTTLS(v_smtp_conn);
  -- 加密后再次发送EHLO指令
  UTL_SMTP.EHLO(v_smtp_conn, 'your-client-domain.com');
  -- SMTP认证
  UTL_SMTP.AUTH(v_smtp_conn, 'your-smtp-username', 'your-smtp-password', 'LOGIN');
  -- 后续发件人、收件人、邮件内容发送逻辑与原有代码一致
  -- ...
  UTL_SMTP.QUIT(v_smtp_conn);
END;
/

步骤3:IP白名单与格式校验

  • 联系SMTP服务提供商,确认数据库所在服务器的公网IP已加入发件白名单,无IP拦截规则
  • 检查发件人、收件人地址格式,确保符合username@domain.com的标准格式,无多余特殊字符或格式错误

步骤4:验证测试

调整完成后直接调用原有发邮件程序包,确认邮件可正常发送即可。

内容的提问来源于stack exchange,提问作者mona shiri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 03:42:03