Spring Boot(STS4)中JavaMailSender发送Naver邮箱验证码无响应求助
排查发送验证码无响应问题的步骤
一、先查AJAX代码的核心问题
- 先看按钮是不是在
<form>标签里:要是在的话,点击按钮会触发表单默认提交,直接刷新页面,AJAX请求根本没机会执行。解决办法是在点击事件里加event.preventDefault(),或者用return false阻止默认行为。 - 核对请求URL和后端接口路径:比如后端接口是
/api/send-verification-code,AJAX里的url字段必须完全一致,别少写路径或者拼错单词。 - 匹配请求方法:后端接口如果是POST类型(比如Spring里的
@PostMapping),AJAX里的method(或type)必须设为POST,不能用GET,反之亦然。 - 检查参数名是否和后端对应:比如后端接收邮箱的参数是
email,AJAX的data就得写成{email: $('#emailInput').val()},参数名错了后端拿不到数据,请求等于白发。 - 强制加上错误回调:现在控制台没报错,大概率是AJAX没捕获错误。给AJAX加个
error函数,把请求的错误信息打出来,比如:
这样控制台就能显示具体问题,比如404(路径错了)、500(后端报错)。$.ajax({ url: '/send-verification-code', method: 'POST', data: {email: $('#email').val()}, success: function(res) { // 成功后的提示逻辑 }, error: function(xhr, status, err) { console.log('请求出错了:', status, err); console.log('后端返回的内容:', xhr.responseText); }, complete: function() { console.log('请求结束了'); } });
二、后端接口和邮件逻辑排查
- 检查
AccountController的接口映射:比如有没有加正确的@PostMapping(或对应注解),路径和AJAX的url完全匹配吗?有没有漏掉前缀? - 看邮件发送是不是阻塞了请求:如果
RegisterMail里的邮件发送是同步执行的,Naver邮箱的SMTP连接慢的话,会导致请求超时,浏览器一直等响应就显得无响应。可以把邮件发送改成异步,比如Spring里加@Async注解,让后台线程去发邮件,接口先返回响应。 - 核对
MailConfig的配置:Naver的SMTP服务器是smtp.naver.com,SSL端口465,TLS端口587,用户名是你的Naver邮箱账号,密码要注意是第三方应用授权码(不是登录密码),有没有开启邮箱的SMTP服务? - 看后端日志:打开后端服务器的日志,有没有收到AJAX的请求记录?有没有邮件发送的报错信息?比如认证失败、连接超时这些,都能在日志里找到。
三、跨域问题排查
如果前端页面和后端服务器不在同一个域名(比如前端是localhost:8080,后端是localhost:9090),浏览器会拦截跨域请求,导致AJAX发不出去。解决办法是在后端控制器上加@CrossOrigin注解(Spring),或者配置全局跨域规则。
四、前端验证后的逻辑检查
确认没输入邮箱时的提示逻辑执行后,是不是正确终止了后续AJAX请求?如果输入了邮箱,有没有真的触发AJAX代码?可以在AJAX代码前加console.log('准备发请求了'),看控制台有没有输出,判断是不是走到了AJAX这一步。
内容的提问来源于stack exchange,提问作者Anonymous
相关产品推荐
相关产品推荐

