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

Oracle 11g使用UTL_MAIL发邮件报ORA-29278错误如何解决

问题根因

ORA-29278: SMTP transient error: 421 Service not available 报错的核心原因是UTL_MAIL无法连接到可用的SMTP服务:

  • 最初执行时SMTP_OUT_SERVER参数设为空,UTL_MAIL完全不知道要连哪个SMTP服务器,必然失败
  • 后续改设为localhost仍然失败,是因为客户端版Windows 10本身没有内置IIS SMTP Server组件——微软从Windows Vista开始就把SMTP服务从客户端版Windows里移除了,只有Windows Server系列的IIS才自带这个组件,你在Win10的IIS功能列表里找不到是正常情况,本地25端口根本没有SMTP服务在监听,连localhost自然会被拒绝。
解决步骤
  • 第一步:正确配置SMTP_OUT_SERVER参数
    ALTER SESSION设置的参数仅对当前SQL连接生效,全局生效需要用sys用户修改系统参数,参数值必须填写实际可连通的SMTP服务地址和端口,不能填空或者无服务的localhost:
    -- 全局持久化配置,执行后重启数据库生效
    ALTER SYSTEM SET SMTP_OUT_SERVER = 'smtp服务地址:服务端口' SCOPE=SPFILE;
    -- 当前会话临时测试可直接设置
    ALTER SESSION SET SMTP_OUT_SERVER = 'smtp服务地址:服务端口';
    
    注意如果SMTP服务使用非默认25端口(比如加密端口465、587),必须在地址后明确写端口号,UTL_MAIL默认只会连接25端口。
  • 第二步:准备可用的SMTP服务
    两个可选方案,优先选第一个:
    1. 直接使用企业内部SMTP或者公共邮箱的SMTP服务,不需要本地安装组件。使用前先做两个检查:
      • 在Win10命令行执行telnet smtp服务地址 端口,确认数据库所在机器能正常连通SMTP端口,不通就先排查防火墙、网络策略限制
      • 确认SMTP服务的认证要求:如果是公共邮箱SMTP,需要提前在邮箱设置里开启SMTP发信权限,获取专用发信授权码
        注意:原生UTL_MAIL不支持SSL/TLS加密连接,如果目标SMTP强制要求加密,直接调用UTL_MAIL会连接失败,这种情况要么换用支持明文连接的内部SMTP服务,要么在本地部署SMTP转发代理做加密转明文的适配
    2. 本地部署轻量第三方SMTP服务/转发工具(比如hMailServer),部署完成后将SMTP_OUT_SERVER设为本地服务的监听地址和端口,再在本地SMTP工具里配置上游发信规则即可。
  • 第三步:确认权限配置
    SYS用户默认拥有UTL_MAIL的执行权限,如果后续要给其他业务用户开放发信能力,需要单独授权:
    GRANT EXECUTE ON SYS.UTL_MAIL TO 目标用户名;
    GRANT EXECUTE ON SYS.UTL_SMTP TO 目标用户名;
    GRANT EXECUTE ON SYS.UTL_TCP TO 目标用户名;
    
  • 第四步:发信测试
    所有配置完成后重新执行发信块即可,注意sender参数填写的发信人地址必须和SMTP服务认证的发信账号一致,否则会被SMTP服务判定为伪造发件人拒收。

避坑提醒:不用在Win10的IIS启用关闭Windows功能列表里反复找SMTP组件,客户端版Windows从Vista开始就彻底移除了这个功能,不可能找到。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 01:27:27