发送邮件触发com.sun.mail.smtp.SMTPSendFailedException权限异常求助
解决com.sun.mail.smtp.SMTPSendFailedException: 550 5.7.60权限错误
这个错误本质是邮件服务商(从代码里的Gmail线索来看,大概率是Google)拒绝了你的发送请求,核心原因是你的程序没有权限使用指定的发件人地址发送邮件。我给你梳理几个最常见的解决方向:
1. 确保发件人地址与认证账号完全匹配
你代码里的userName写的是some@.com(格式明显错误,应该是some@domain.com),首先得修正这个格式问题。另外,绝大多数邮件服务商(包括Gmail)都要求:你用来认证的账号(也就是这里的userName)必须和发件人地址完全一致。
检查你代码里设置发件人的部分(比如message.setFrom(new InternetAddress("xxx"))),确保这个地址和userName一模一样——别想着用A账号认证,却发件人填B邮箱,除非你在邮件服务商后台专门配置了“发送代表”权限。
2. 调整Gmail的安全配置(如果用的是Gmail)
Google的安全机制对第三方应用发送邮件限制很严,这是这个错误的高发区:
- 如果你的Gmail账号开了两步验证:必须生成「应用专用密码(App Password)」,用这个密码代替代码里的普通登录密码。生成路径是:Google账号设置 → 安全性 → 应用专用密码(需要先开启两步验证才会显示)。
- 如果没开两步验证:现在Google默认阻止非OAuth2授权的应用发送邮件,你要么开启两步验证用上面的应用专用密码,要么改用OAuth2认证方式(适合正式项目,配置稍复杂)。
3. 检查SMTP配置是否正确
针对Gmail,正确的SMTP配置应该是这样的,你可以对照自己的代码补全:
Properties props = new Properties(); props.put("mail.smtp.host", "smtp.gmail.com"); props.put("mail.smtp.port", "587"); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.starttls.enable", "true"); // 必须开启TLS // 认证部分要确保用的是正确的userName和密码/应用专用密码 Session session = Session.getInstance(props, new javax.mail.Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(userName, password); } });
4. 其他邮件服务商的权限配置(如果不是Gmail)
如果用的是企业邮箱(比如Exchange、Outlook 365),可能需要管理员在后台给你的账号配置「发送为」权限,允许你使用指定的发件人地址发送邮件。具体操作需要联系你的邮箱管理员。
先从第一点和第二点排查,这两个是最容易踩坑的地方,大概率能解决问题。
内容的提问来源于stack exchange,提问作者Gaurav Gorde
相关产品推荐
相关产品推荐

