【问题标题】:Spring MVC mail connection timeout exceptionSpring MVC 邮件连接超时异常
【发布时间】:2015-05-07 11:57:46
【问题描述】:

我在 Eclipse IDE 中使用 Spring Mail 尝试发送电子邮件,但控制台总是打印出“连接超时”异常。我已经确认可以通过 telnet 连接到邮件服务器。我对 Spring MVC 框架很陌生。可能是因为我没有配置spring-mvc.xml吧?我没有在我的代码中使用依赖注入。下面附上代码和异常。感谢您提供任何有见地的 cmets。

package xxx.web.controller;
import java.io.File; 
import java.util.Properties;
import javax.servlet.http.HttpServletRequest;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import org.springframework.core.io.FileSystemResource; 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.mail.MailException;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl; 
import org.springframework.mail.javamail.MimeMessageHelper;

@Controller
public class SendMailController {

 private JavaMailSenderImpl mailSender;

 @RequestMapping(value ="/sendMail", method = RequestMethod.GET) 
 public void sendMail(HttpServletRequest request) throws MessagingException{
  mailSender = new JavaMailSenderImpl();
  mailSender.setHost("smtp.sina.com");  //configure mail server
  mailSender.setUsername("**********@sina.com");
  mailSender.setPassword("*******");

  MimeMessage msg = mailSender.createMimeMessage();
  MimeMessageHelper msgHelper = new MimeMessageHelper(msg, true, "utf-8");

  msgHelper.setTo("********@qq.com");
  msgHelper.setFrom("*********@sina.com");
  msgHelper.setSubject("Testing Subject");
  msgHelper.setText("This is a test mail!");

  FileSystemResource file = new FileSystemResource(new File("D:/test.png"));
  msgHelper.addAttachment("test.png", file); //add an attachment

  Properties prop = new Properties();
  prop.put("mail.smtp.auth", "true");
  prop.put("mail.smtp.timeout", "25000"); 
  mailSender.setJavaMailProperties(prop);
  mailSender.send(msg);

  System.out.println("Email sent successfully!");
 }
}

控制台打印出异常:

消息请求处理失败;嵌套异常是 org.springframework.mail.MailSendException:邮件服务器连接失败;嵌套异常是 com.sun.mail.util.MailConnectException: **

无法连接主机,端口:smtp.sina.com, 25;超时 -1;

**

描述服务器遇到了一个内部错误,导致它无法完成这个请求。

异常

org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常是 org.springframework.mail.MailSendException:邮件服务器连接失败;嵌套异常是com.sun.mail.util.MailConnectException:无法连接到主机,端口:smtp.sina.com,25;超时-1; 嵌套异常是: java.net.ConnectException:连接超时:连接。失败消息:com.sun.mail.util.MailConnectException:无法连接到主机,端口:smtp.sina.com,25;超时-1; 嵌套异常是: java.net.ConnectException:连接超时:连接;消息异常 (1) 是: 失败消息1:com.sun.mail.util.MailConnectException:无法连接到主机,端口:smtp.sina.com,25;超时-1; 嵌套异常是: java.net.ConnectException:连接超时:连接 org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:948) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:827) javax.servlet.http.HttpServlet.service(HttpServlet.java:620) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812) javax.servlet.http.HttpServlet.service(HttpServlet.java:727) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

【问题讨论】:

  • 不要在你的spring配置中创建JavaMailSenderImpl的实例并将其注入到你的控制器中。您确定需要端口 25 还是使用其他端口。确保您可以从正在运行项目的服务器访问它
  • 我很确定端口号是 25。我使用 telnet 尝试了其他端口号,但连接不成功。 Spring MVC框架下一定要使用IoC和DI吗?我看过一些帖子,其中在 Spring MVC 中使用了 JavaMailSenderImpl 的显式实例化。
  • 您当然可以使用新实例,但这并不是事情的真正意义所在。另外,为什么每次需要时都要创建一个实例,这是一个相当繁重的操作..
  • 但这应该不是连接超时异常的原因吧?我正在尝试修复此异常。
  • 正如我所说,确保您可以从实际机器连接到服务器,而不是任何其他实例。

标签: spring email model-view-controller connection timeout


【解决方案1】:

首先,您必须确保您的连接正常;为了检查它,打开命令行并执行以下命令:

telnet <yourservername> smtp

HELO <yourservername and then enter>

MAIL from: <mailaddr and then enter>

RCPT to: <mailaddr and then enter>
DATA
354 End data with <CR><LF>.<CR><LF>
From: <mailaddr and then enter>
To: <mailaddr and then enter>
Subject: test

This is test
.
250 2.0.0 Ok: queued as 4C67244003
QUIT  <and then enter>
221 2.0.0 Bye
Connection closed by foreign host.

如果一切正常,那就是 Spring 的问题,或者你需要在邮件服务器上进行身份验证(或者更简单地说,你的邮件服务器不允许连接到自己的网络之外)

安杰洛

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-28
    • 2012-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    • 2020-01-15
    • 2014-12-18
    相关资源
    最近更新 更多