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

Codeigniter使用SMTP发邮件到Gmail报554 5.7.1 relay access denied如何解决

故障原因分析

该报错本质是你所用的Zimbra SMTP服务器拒绝为你转发发往外部域名(Gmail)的邮件,同域名邮件能正常发送是因为Zimbra默认对同域内部邮件不需要额外中继权限,发往外部域名时触发了中继限制,结合你给出的配置,常见诱因如下:

  • 配置逻辑冲突:你同时配置了带ssl://前缀的smtp_host、587端口、starttls=true三个参数,587是STARTTLS协议专用端口,不需要在host前加ssl://前缀,错误配置会导致握手逻辑异常,服务器判定你未通过合法身份验证,拒绝外域中继权限。
  • 发件人地址不匹配:你配置的smtp_user登录账号和from()方法填写的发件地址Antifraud@bankneo.co.id不一致,绝大多数SMTP服务器要求发件人地址必须和登录的SMTP账号完全一致,否则会直接拒绝外域发信权限。
  • Zimbra账号权限限制:你的Zimbra账号本身没有开通外域邮件发送的中继权限,默认可能仅允许同域内发信。
  • 域名反垃圾配置缺失:你的发件域名bankneo.co.id没有配置对应Zimbra服务器IP的SPF/DKIM记录,Gmail端反垃圾策略拦截后会反向通知Zimbra服务器拒绝中继。
解决方案步骤
  1. 优先修正配置冲突,调整你的配置代码如下:
$config = [
        'mailtype'  => 'html',
        'charset'   => 'utf-8',
        'protocol'  => 'smtp',
        'smtp_crypto' => 'tls', // 替换原来的starttls参数,Codeigniter Email类标准TLS配置项为smtp_crypto
        'smtp_host' => 'zimbra.xmission.com', // 去掉ssl://前缀
        'smtp_user' => 'Antifraud@bankneo.co.id',  // 确保此处和from()方法的发件地址完全一致
        'smtp_pass'   => 'xxxx',  // 对应发件账号的正确密码
        'smtp_port'   => 587,
        'smtp_timeout' => 10, // 增加超时时间避免TLS握手失败
        'crlf'    => "\r\n",
        'newline' => "\r\n"
    ];
  1. 确认发件人配置和SMTP登录账号完全一致,不要填写别名或其他无关地址:
$this->email->from('Antifraud@bankneo.co.id', 'Anti Fraud');
  1. 以上修改完成后测试发信,若仍报错请联系Zimbra服务器管理员确认以下配置:
  • 该账号是否已开通SMTP外域中继权限
  • Zimbra服务器的公网IP是否已添加到发件域名bankneo.co.id的SPF记录中
  • Zimbra服务器是否配置了针对Gmail域名的发信限制

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 05:39:03