【发布时间】: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