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

Java应用发邮件遇550 Relay access denied错误,附配置求排查

解决javax.mail.SendFailedException: Invalid Addresses / 550 Relay access denied错误

这个错误我之前帮不少开发者排查过,核心问题是SMTP服务器拒绝了你的中继请求——简单说就是服务器不认可你的身份,或者配置不对,不让你通过它发送邮件到外部地址。结合你给出的配置,咱们一步步拆解可能的原因和解决办法:

1. 先把SMTP端口改成正确的!

你当前配置的端口是516,但Pepipost的官方SMTP端口根本不是这个啊😅,标准的是587(用于STARTTLS加密)或者25。先把端口改过来:

props.put("mail.smtp.port", "587");

用错端口大概率会导致服务器无法正确处理你的认证请求,直接拒绝中继。

2. 确认SMTP认证信息是否正确配置

虽然你开了mail.smtp.auth = true,但光开这个没用,必须在创建Session的时候传入Pepipost给你的用户名和API密钥(或者密码)。比如:

Session session = Session.getInstance(props, new Authenticator() {
    @Override
    protected PasswordAuthentication getPasswordAuthentication() {
        // 替换成你的Pepipost账户用户名和API密钥
        return new PasswordAuthentication("your-pepipost-username", "your-pepipost-api-key");
    }
});

如果没正确传认证信息,服务器根本不知道你是谁,自然会拒绝你用它发邮件。

3. 检查发件人地址是否符合Pepipost的规则

Pepipost对发件人地址有严格要求:必须是你在账户里验证过的域名下的邮箱,比如你验证了yourdomain.com,那发件人得是support@yourdomain.com这种,不能随便用random@gmail.com这种未授权的地址。如果发件人不符合要求,服务器也会拒绝中继。

4. 排查收件人地址格式是否合法

错误里的Invalid Addresses也可能是因为收件人邮箱格式错了,比如少了@、域名拼写错误(比如example.con)。你可以用JavaMail的InternetAddress.validate()方法提前校验:

InternetAddress toAddress = new InternetAddress("recipient@example.com");
toAddress.validate(); // 如果格式不对会抛出异常

提前排查能避免这类低级错误。

5. 确认SSL/TLS配置没问题

你当前的mail.smtp.starttls.enable = true和mail.smtp.ssl.trust = smtp.pepipost.com配置是对的,改成587端口后,STARTTLS会正常触发加密连接,不用额外改其他SSL相关配置。

总结排查顺序

优先检查端口和认证信息,这两个是最常见的触发原因;如果没问题,再看发件人/收件人地址是否符合要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:24:47