2014-10-24 15 views
8

tôi muốn gửi email bằng gmail làm máy chủ SMTP.gửi email bằng ssl bằng cách sử dụng javax.mail

đây là mã của tôi, và tôi không làm cho nó hoạt động ... sau khi chạy testSettings() tôi nhận được đầu ra gỡ lỗi và sau đó nó dừng lại. không có thời gian chờ, không có lỗi, không có gì ....

public void testSettings() { 
    final String username = Settings.get("benutzername"); 
    final String password = Settings.get("passwort"); 

    Properties props = new Properties(); 
    props.put("mail.transport.protocol", "smtps"); 

     props.put("mail.smtp.starttls.enable", "true"); 
     props.put("mail.smtp.socketFactory.port", Settings.get("port")); 
     props.put("mail.smtp.socketFactory.class", 
       "javax.net.ssl.SSLSocketFactory"); 

    props.put("mail.smtp.auth", "true"); 

    props.put("mail.smtp.host", Settings.get("server")); 
    props.put("mail.smtp.port", Settings.get("port")); 
    props.put("mail.smtp.timeout", "10000"); 

    props.put("mail.smtp.ssl.checkserveridentity", "false"); 
    props.put("mail.smtp.ssl.trust", "*"); 
    props.put("mail.smtp.connectiontimeout", "10000"); 

    props.put("mail.smtp.debug", "true"); 
    props.put("mail.smtp.socketFactory.fallback", "false"); 
    Session session = Session.getInstance(props, 
      new javax.mail.Authenticator() { 
       protected PasswordAuthentication getPasswordAuthentication() { 
        return new PasswordAuthentication(username, password); 
       } 
      }); 
    session.setDebug(true); 
    try { 

     Message message = new MimeMessage(session); 
     message.setFrom(new InternetAddress("[email protected]")); 
     message.setRecipients(Message.RecipientType.TO, 
       InternetAddress.parse("[email protected]")); 
     message.setSubject("Testing Subject"); 
     message.setText("test"); 
     Transport transport = session.getTransport("smtps"); 
     transport.send(message); 
     // Transport.send(message); 

     System.out.println("Done"); 

    } catch (MessagingException e) { 
     // throw new RuntimeException(e); 
    } 
} 


DEBUG: setDebug: JavaMail version 1.4.7 
DEBUG: getProvider() returning  javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Oracle] 
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle] 
DEBUG SMTP: useEhlo true, useAuth true 
DEBUG SMTP: useEhlo true, useAuth true 
DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 587, isSSL false 

Các lỗi sau đây xảy ra: http://pastie.org/private/rkoknss6ppiufjd9swqta

+1

Bạn đã thử giải pháp được cung cấp trong [câu trả lời này] (http://stackoverflow.com/questions/1990454/using-javamail-to-connect-to-gmail-smtp-server-ignores-specified-port-and -máy móc)? – BaCaRoZzo

+0

có, không có gì thay đổi ... vẫn không có lỗi .. nó chỉ bị treo – pila

+0

vui lòng xem thông báo lỗi của tôi để sửa. – pila

Trả lời

13

Thay vì

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

Transport transport = session.getTransport ("smtps");

Sử dụng

props.put ("mail.transport.protocol", "smtp");

Giao thông vận tải = session.getTransport ("smtp");

Sử dụng smtp, không smtps

tôi đã sử dụng JDK 8, Netbeans 8, JavaMail 1.5.2 và ví dụ này hoạt động tốt:

public static void main(String[] args) { 
    Properties props = new Properties(); 
    props.put("mail.smtp.host", "smtp.gmail.com"); 
    props.put("mail.smtp.socketFactory.port", "465"); 
    props.put("mail.smtp.socketFactory.class", 
      "javax.net.ssl.SSLSocketFactory"); 
    props.put("mail.smtp.auth", "true"); 
    props.put("mail.smtp.port", "465"); 
    Session session = Session.getDefaultInstance(props, 
     new javax.mail.Authenticator() { 
          @Override 
      protected PasswordAuthentication getPasswordAuthentication() { 
       return new PasswordAuthentication("[email protected]","password"); 
      } 
     }); 

    try { 

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

     Transport.send(message); 

     System.out.println("Done"); 

    } catch (MessagingException e) { 
     throw new RuntimeException(e); 
    } 
} 

Nếu bạn không thể kết nối với cổng 465, hãy thử cổng 587

+0

vâng tôi tin rằng công trình này. Tôi đã thử nghiệm một số ngày trước đây trên máy tính xách tay của tôi nhưng trên máy tính để bàn của tôi tôi không thể làm cho nó hoạt động ... và tôi không biết tại sao ... – pila

+0

tôi vừa sao chép mã của bạn, tạo một dự án java mới, điền vào dữ liệu của tôi và sau đó thử nghiệm nó. và nó vẫn không xảy ra bất cứ điều gì. – pila

+0

Tôi đã sử dụng java 8, netbeans 8 và JavaMail API 1.5.2 được thử nghiệm và hoạt động mà không gặp bất kỳ vấn đề nào và gửi thư cho chính mình, mọi thứ đều ổn. Kiểm tra kết nối của bạn với cổng smtp.gmail com 465, bạn có thể sử dụng telnet cho nó. API JavaMail mới nhất: https://java.net/projects/javamail/pages/Home#Download_JavaMail_1.5.2_Release –

1

Nếu bạn sử dụng Windows và có bất kỳ Antivirus hoặc tường lửa nào vô hiệu hóa và thử.

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