1

在用 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)

&这是我的代码(按照本教程链接):

          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

知道为什么我会收到此错误... :( :(

4

2 回答 2

3

知道为什么我会收到此错误...

两个最明显的潜在原因是:

  • 您的 SMTP 主机的主机名和/或端口号错误。如果主机上没有使用端口运行的 SMTP 服务,那么您将不得不使用其他东西。

  • 您的计算机无法通过该端口连接到该主机,因为防火墙阻止了您的访问。

于 2012-10-04T13:28:30.127 回答
1

假设您的连接没有出现网络问题(您可以使用 telnet 来确保它)然后...

问题一定是因为properties.setProperty("mail.smtp.starttls.enable", "true");

根据com.sun.mail.smtp的 javadoc ,

如果为 true,则在发出任何登录命令之前启用使用 STARTTLS 命令(如果服务器支持)将连接切换到受 TLS 保护的连接。请注意,必须配置适当的信任库,以便客户端信任服务器的证书。默认为假。

下面说mail.smtp.starttls.required

如果为 true,则需要使用 STARTTLS 命令。如果服务器不支持 STARTTLS 命令,或者命令失败,则连接方法将失败。默认为假。

如果您的提供商不支持,请尝试删除上述属性。

于 2012-10-04T13:39:24.100 回答