2013-03-13 14 views
15

khi gửi thư tôi nhận được lỗi nàyKhông thể kết nối đến máy chủ SMTP: smtp.gmail.com, cổng: 465, phản ứng: -1

java.lang.RuntimeException: javax.mail.SendFailedException: Sending failed; nested exception is: class javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 465, response: -1

mã của tôi là:

Properties props = new Properties(); 
props.put("mail.smtp.host", "smtp.gmail.com"); 
props.put("mail.smtp.starttls.enable","true"); 
props.put("mail.smtp.socketFactory.port", "465"); 
props.put("mail.smtp.auth", "true"); 
props.put("mail.smtp.port", "465"); 

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

try { 

     Message message = new MimeMessage(session); 
     message.setFrom(new InternetAddress("email")); 
     message.setRecipients(Message.RecipientType.TO, 
         InternetAddress.parse(this.to)); 
     message.setSubject("Testing"); 
     message.setText("Hey, this is the testing email."); 



     Transport.send(message); 

Bất kỳ trợ giúp sẽ được đánh giá cao.

Cảm ơn trước.

+0

Kiểm tra http://www.mkyong.com/java/javamail-api-sending-email-via-gmail-smtp-example/ – Abi

+0

Tôi đã thử cùng một mã nhưng vẫn nhận được lỗi: javax.mail.MessagingException : 530 5.7.0 Phải phát hành một lệnh STARTTLS trước. 4sm28216799pbn.23 - gsmtp \t tại com.sun.mail.smtp.SMTPTransport.issueCommand (SMTPTransport.java:1020) tại com.sun.mail.smtp.SMTPTransport.mailFrom (SMTPTransport.java:716) \t tại com. sun.mail.smtp.SMTPTransport.sendMessage (SMTPTransport.java:388) \t tại rapid.mail.main (mail.java:60) Dòng này cho starttls là có thì tại sao m nhận được lỗi tương tự: properties.put ("mail .smtp.starttls.enable "," true "); – user1900376

+0

Hãy thử dùng phiên bản jar mới nhất JavaMail 1.4.7 – Abi

Trả lời

11

Bạn cần phải nói với nó rằng bạn đang sử dụng SSL:

String d_email = "[email protected]", 
      d_uname = "Name", 
      d_password = "urpassword", 
      d_host = "smtp.gmail.com", 
      d_port = "465", 
      m_to = "[email protected]", 
      m_subject = "Indoors Readable File: " + params[0].getName(), 
      m_text = "This message is from Indoor Positioning App. Required file(s) are attached."; 
    Properties props = new Properties(); 
    props.put("mail.smtp.user", d_email); 
    props.put("mail.smtp.host", d_host); 
    props.put("mail.smtp.port", d_port); 
    props.put("mail.smtp.starttls.enable","true"); 
    props.put("mail.smtp.debug", "true"); 
    props.put("mail.smtp.auth", "true"); 
    props.put("mail.smtp.socketFactory.port", d_port); 
    props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
    props.put("mail.smtp.socketFactory.fallback", "false"); 

    SMTPAuthenticator auth = new SMTPAuthenticator(); 
    Session session = Session.getInstance(props, auth); 
    session.setDebug(true); 

    MimeMessage msg = new MimeMessage(session); 
    try { 
     msg.setSubject(m_subject); 
     msg.setFrom(new InternetAddress(d_email)); 
     msg.addRecipient(Message.RecipientType.TO, new InternetAddress(m_to)); 

Transport transport = session.getTransport("smtps"); 
      transport.connect(d_host, Integer.valueOf(d_port), d_uname, d_password); 
      transport.sendMessage(msg, msg.getAllRecipients()); 
      transport.close(); 

     } catch (AddressException e) { 
      e.printStackTrace(); 
      return false; 
     } catch (MessagingException e) { 
      e.printStackTrace(); 
      return false; 
     } 
+0

Tôi đang nhận được ngoại lệ. bạn có thể cho tôi biết nó đang ở đâu không javax.mail.SendFailedException: Gửi không thành công; ngoại lệ lồng nhau là: \t lớp javax.mail.MessagingException: Không thể kết nối với máy chủ SMTP: smtp.gmail.com, cổng: 587; ngoại lệ lồng nhau là: \t java.net.ConnectException: Kết nối đã hết thời gian: kết nối \t tại javax.mail.Transport.send0 (Giao thông vận tải.java: 218) \t tại javax.mail.Transport.send (Transport.java:80) \t tại sendMail.SendMail4.execute (SendMail4.java:70) \t tại sendMail.sel.main (sel.java:10) –

+0

Cảm ơn. Tôi không biết tiện ích trường 'd_uname' là gì. Ở phía bên kia, trong hướng dẫn kết nối, chúng ta nên chuyển email thay vì tên người dùng: 'transport.connect (d_host, Integer.valueOf (d_port), d_email, d_password);'. Ngoài ra, bạn đã hiển thị tốt hơn gói từ nơi có lớp 'SMTPAuthenticator' trong mã, hoặc chỉ định API được yêu cầu thay thế trên câu trả lời. – Omar

5

tôi có:

props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 

Trong trường hợp bạn bỏ lỡ bất cứ điều gì, đây là mã làm việc gặp sự cố này khi gỡ lỗi bằng NetBeans, thậm chí thực thi tệp jar thực tế. Antivirus sẽ chặn gửi email. Bạn nên tạm thời vô hiệu hóa tính năng chống vi-rút của bạn trong quá trình gỡ lỗi hoặc loại trừ NetBeans và tệp jar thực tế không được quét. Trong trường hợp của tôi, tôi đang sử dụng Avast.

Xem liên kết này về cách Loại trừ: How to Add File/Website Exception into avast! Antivirus 2014

Nó phù hợp với tôi.

+0

Bạn có thể mô tả chi tiết hơn về kết nối giữa phản hồi SMTP và chống vi-rút không? – carlodurso

+0

Cảm ơn bạn - Avast đã gây ra 'sự cố' của tôi quá ... – DaniEll

+1

@carlodurso: Antivirus, (trong trường hợp của tôi AVAST) có các tính năng chặn chương trình sử dụng cổng vào và ra do nghi ngờ về mối đe dọa bảo mật. Vì vậy, tốt hơn loại trừ tệp jar của bạn khỏi bị chặn. – ronIT

1

Những gì tôi đã làm là tôi nhận xét ra các

props.put("mail.smtp.starttls.enable","true"); 

Bởi vì rõ ràng cho G-mail mà bạn không cần đến nó. Sau đó, nếu bạn chưa làm điều này, bạn cần phải tạo một mật khẩu ứng dụng trong G-mail cho chương trình của bạn. Tôi đã làm điều đó và nó hoạt động hoàn hảo. Ở đây, liên kết này sẽ cho bạn biết cách thực hiện: https://support.google.com/accounts/answer/185833.