2012-12-12 41 views
6

Tôi đang cố gắng gửi email từ chương trình của mình thông qua kết nối TLS. Đây là mã của tôiThư Java qua TLS

final String username = "XXXXXX"; 
    final String password = "XXXXX"; 
    Properties props = new Properties(); 
    props.put("mail.transport.protocol", "smtp"); 
    props.put("mail.smtp.starttls.enable","true"); 
    props.put("mail.smtp.auth", "true"); 
    props.put("mail.smtp.host", "mail.xxxx.com"); 
    props.put("mail.smtp.port", "587"); 

    Session session = Session.getInstance(props, 
      new javax.mail.Authenticator() { 
       protected PasswordAuthentication getPasswordAuthentication() { 
        return new PasswordAuthentication(username, password); 
       } 
      }); 

    Message message = new MimeMessage(session); 
    message.setFrom(new InternetAddress("[email protected]")); 
    message.setRecipients(Message.RecipientType.TO, 
     InternetAddress.parse(to_address)); 
    message.setSubject("Test Mail"); 
    message.setText("TestMail "); 
    Transport.send(message) 

cổng email của tôi có các cài đặt thư đến với SSL được kích hoạt và đi với TLS được kích hoạt trên cổng 587. Tôi có thể cấu hình cài đặt này trong quan điểm và nó làm việc tốt. Nhưng thông qua chương trình java của tôi nó nói "Kết nối bị từ chối". Trợ giúp Được đánh giá cao!

Làm việc Cuối cùng:

tôi đã sử dụng chương trình InstallCert nhập certicate để tạo jssecacerts tập tin và tôi đã thêm các tập tin vào tôi/jre/lib/security/path. đây là mã làm việc của tôi

properties.put("mail.transport.protocol", "smtp"); 
    properties.put("mail.smtp.host", "XXXXXX"); 
    properties.put("mail.smtp.port", "465"); 
    properties.put("mail.smtp.ssl.enable", true); 
    properties.put("mail.smtp.socketFactory.port", "465"); 
    properties.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory"); 
    properties.put("mail.smtp.socketFactory.fallback", "false"); 
    properties.put("mail.smtp.quitwait", "false"); 
    properties.put("mail.smtp.auth", "true"); 
+0

Trong trường hợp này, bạn chỉ cần nhập chứng chỉ từ một máy chủ cụ thể? Tôi có cùng một vấn đề, nhưng ứng dụng của tôi cần phải gửi thư từ bất kỳ tài khoản nào được người dùng định cấu hình, mã hoạt động với Outlook, Google và Yahoo, nhưng đối với tài khoản có smtp zimbra.xxxxxxx.net.br không hoạt động vì chứng chỉ này . –

Trả lời

4

Bạn cần phải sử dụng giao thức smtps thay vì smtp

props.put("mail.transport.protocol", "smtps"); 
props.put("mail.smtps.starttls.enable","true"); 
props.put("mail.smtps.auth", "true"); 
props.put("mail.smtps.host", "mail.xxxx.com"); 
props.put("mail.smtps.port", "587"); 

Bạn cũng có thể cố gắng thiết lập giao thức specificly cho RFC822, điều này sẽ giúp một số lần

props.put("mail.transport.protocol.rfc822", "smtps"); 
+0

Tôi đã thử sự cố tương tự này ... lần này nó đang cố gắng kết nối "localhost", cổng 25. Đây là nhật ký gỡ lỗi của tôi .... DEBUG SMTP: cố gắng kết nối với máy chủ "localhost", cổng 25, isSSL false – Surez

+0

Bạn đang sử dụng phiên bản javamail nào? –

+0

Thư Java 1.4.5 – Surez

Các vấn đề liên quan