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服务器拒绝中继。
解决方案步骤
- 优先修正配置冲突,调整你的配置代码如下:
$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" ];
- 确认发件人配置和SMTP登录账号完全一致,不要填写别名或其他无关地址:
$this->email->from('Antifraud@bankneo.co.id', 'Anti Fraud');
- 以上修改完成后测试发信,若仍报错请联系Zimbra服务器管理员确认以下配置:
- 该账号是否已开通SMTP外域中继权限
- Zimbra服务器的公网IP是否已添加到发件域名
bankneo.co.id的SPF记录中 - Zimbra服务器是否配置了针对Gmail域名的发信限制
内容的提问来源于stack exchange,提问作者Yohanes Erwin
相关产品推荐
相关产品推荐

