在java中编写电子邮件应用程序时遇到此异常:
javax.mail.MessagingException: Could not connect to SMTP host: mail.simsystech.com, port: 8443;
nested exception is:
java.net.ConnectException: Connection timed out: connect
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1934)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:638)
at javax.mail.Service.connect(Service.java:317)
&安培;这是我的代码(按照本教程link):
Properties properties = System.getProperties();
properties.put("mail.smtp.starttls.enable", "true");
properties.put("mail.transport.protocol", "smtp");
properties.setProperty("mail.smtp.host", host);
// properties.put("mail.smtp.port", "8443");
properties.setProperty("mail.smtp.auth", "true");
properties.setProperty("mail.smtp.starttls.enable", "true");
final String user = "abc@xyz.com";
final String password = "*****";
Authenticator authenticator = new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(user,password);
}
};
Session session = Session.getDefaultInstance(properties,authenticator);
try{
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(sid));
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(rid));
message.setSubject(subject);
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText(text);
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);
messageBodyPart = new MimeBodyPart();
// String filename = "file.txt";
DataSource source = new FileDataSource(file);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(file);
multipart.addBodyPart(messageBodyPart);
// Send the complete message parts
message.setContent(multipart );
// Now set the actual message
// message.setText(text);
// Send message
Transport.send(message);
System.out.println("Sent message successfully....");
}catch (MessagingException ex) {
ex.printStackTrace();
}
虽然我已经浏览了stackoverflow的这些链接:1,2
知道我为什么会收到这个错误... :( :(
答案 0 :(得分:3)
我知道为什么会收到此错误...
两个最明显的潜在原因是:
SMTP主机的主机名和/或端口号错误。如果使用 端口在 主机上运行SMTP服务,则必须使用其他内容。
您的计算机无法连接到该端口上的主机,因为防火墙阻止了您的访问。
答案 1 :(得分:1)
假设您的连接没有出现网络问题(您可以使用telnet来确保它),那么......
问题必须是因为properties.setProperty("mail.smtp.starttls.enable", "true");
根据com.sun.mail.smtp的javadoc,
如果为true,则允许使用STARTTLS命令(如果服务器支持)在发出任何登录命令之前将连接切换到受TLS保护的连接。请注意,必须配置适当的信任存储,以便客户端信任服务器的证书。默认为false。
以下是mail.smtp.starttls.required
如果为true,则需要使用STARTTLS命令。如果服务器不支持STARTTLS命令,或者命令失败,则connect方法将失败。默认为false。
如果您的提供商不支持,请尝试删除上述属性。