1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 阿里云封禁端口25 导致smtp.126.com邮件无法发送-解决方案+springboot配置

阿里云封禁端口25 导致smtp.126.com邮件无法发送-解决方案+springboot配置

时间:2022-07-11 22:54:27

相关推荐

阿里云封禁端口25 导致smtp.126.com邮件无法发送-解决方案+springboot配置

阿里云封禁端口25,导致邮件无法发送-解决方案

问题描述

java开发中用到了email邮件发送功能,在本地测试中一切正常,邮件可以正常发送,但是在部署到服务器上之后,发现邮件无法发送,于是找到了报错的信息,如下:

org.springframework.mail.MailSendException: Mail server connection failed; nested exception is javax.mail.MessagingException: Could not connect to SMTP host: , port: 25;nested exception is:.ConnectException: Connection timed out (Connection timed out). Failed messages: javax.mail.MessagingException: Could not connect to SMTP host: , port: 25;nested exception is:.ConnectException: Connection timed out (Connection timed out); message exception details (1) are:Failed message 1:javax.mail.MessagingException: Could not connect to SMTP host: , port: 25;nested exception is:.ConnectException: Connection timed out (Connection timed out)at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1282)at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:370)at javax.mail.Service.connect(Service.java:275)at org.springframework.mail.javamail.JavaMailSenderImpl.connectTransport(JavaMailSenderImpl.java:517)at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:436)at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:360)at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:355)at com.fjhlxh.busi.service.impl.SmsServiceImpl.sendResetPwdUrl(SmsServiceImpl.java:93)at com.fjhlxh.busi.service.impl.SmsServiceImpl$$FastClassBySpringCGLIB$$b545bd5.invoke(<generated>)at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:749)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:88)at com.fjhlxh.config.advisor.ControllerAspect.handleController(ControllerAspect.java:46)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644)at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633)at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:93)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)at com.fjhlxh.busi.service.impl.SmsServiceImpl$$EnhancerBySpringCGLIB$$d14c388.sendResetPwdUrl(<generated>)at com.fjhlxh.busi.service.impl.UserServiceImpl.forgetPwd(UserServiceImpl.java:264)at com.fjhlxh.busi.service.impl.UserServiceImpl$$FastClassBySpringCGLIB$$927d7051.invoke(<generated>)at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:749)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:88)at com.fjhlxh.config.advisor.ControllerAspect.handleController(ControllerAspect.java:46)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644)at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633)at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:93)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)at com.fjhlxh.busi.service.impl.UserServiceImpl$$EnhancerBySpringCGLIB$$8a32ae7c.forgetPwd(<generated>)at com.fjhlxh.busi.controller.UserResource.forgetPwd(UserResource.java:169)at com.fjhlxh.busi.controller.UserResource$$FastClassBySpringCGLIB$$560b4faf.invoke(<generated>)at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:749)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:88)at com.fjhlxh.config.advisor.ControllerAspect.handleController(ControllerAspect.java:46)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644)at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633)at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:93)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)at com.fjhlxh.busi.controller.UserResource$$EnhancerBySpringCGLIB$$a41bd756.forgetPwd(<generated>)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:892)at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797)at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1039)at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005)at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:908)at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882)at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:112)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)at com.fjhlxh.config.filter.XSSFilter.doFilter(XSSFilter.java:78)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:200)at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:836)at org.apache..NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1747)at org.apache..SocketProcessorBase.run(SocketProcessorBase.java:49)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)at java.lang.Thread.run(Thread.java:745)Caused by: .ConnectException: Connection timed out (Connection timed out)at .PlainSocketImpl.socketConnect(Native Method)at .AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)at .AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)at .AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)at .SocksSocketImpl.connect(SocksSocketImpl.java:392)at .Socket.connect(Socket.java:589)at .Socket.connect(Socket.java:538)at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:232)at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:189)at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1250)... 112 more

解决方案

经过一番查找资料后发现,问题出在阿里云服务器把“25”号端口封禁了。网上查找资料后发现主要有两种解决方案(当然不止两种,哈哈):

1、在阿里云中申请“25”端口解封,然而并没软用,阿里家大业大,没这兴趣帮你解封,申请几次都不通过,于是放弃。。。

2、采用ssl方式发送邮件,这时用到的端口为465,主动避开了默认的25端口,经过一番调试后,邮件正常发送。

我采用springboot进行开发,如果采用25端口发送邮件,配置如下:

spring:mail:host: password: testusername: test@properties:mail:smtp:auth: truestarttls:enable: truerequired: true

上面配置,在开发中是可以正常使用的,但是如果部署到阿里云环境,这种配置需要用到的25端口被毙了,尽然没有通知,上线就是妥妥的一个bug,默默的流下心酸的泪水。。。。

言归正传,采用ssl+465端口方式发送邮件,springboot配置如下:

spring:mail:host: port: 465password: testusername: test@properties:mail:smtp:auth: truessl:enable: truesocketFactory:port: 465class: .ssl.SSLSocketFactory

本地测试ok,阿里云测试ok。

后话

面对这种情况吐槽平台无益,有能力后直接推翻就行

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。