2013-03-13 14 views
15

podczas wysyłania wiadomości otrzymuję ten błądnie można połączyć się z hostem SMTP: smtp.gmail.com, Port: 465, odpowiedzi: -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

mojego kodu jest:

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); 

Każda pomoc będzie doceniona.

Dzięki z góry.

+0

Sprawdź http://www.mkyong.com/java/javamail-api-sending-email-via-gmail-smtp-example/ – Abi

+0

Próbowałem tego samego kodu, ale nadal m uzyskanie błąd: javax.mail.MessagingException : 530 5.7.0 Musi najpierw wydać komendę STARTTLS. 4sm28216799pbn.23 - gsmtp \t na com.sun.mail.smtp.SMTPTransport.issueCommand (SMTPTransport.java:1020) w com.sun.mail.smtp.SMTPTransport.mailFrom (SMTPTransport.java:716) \t na com. sun.mail.smtp.SMTPTransport.sendMessage (SMTPTransport.java:388) \t at rapid.mail.main (mail.java:60) Ta linia dla starttls jest wtedy, dlaczego m otrzymuje ten sam błąd: properties.put ("mail .smtp.starttls.enable "," true "); – user1900376

+0

Wypróbuj najnowszą wersję JAR JavaMail 1.4.7 – Abi

Odpowiedz

11

Trzeba powiedzieć to, że używasz 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

Dostaję poniżej wyjątku. możesz mi powiedzieć, gdzie to się nie udaje javax.mail.SendFailedException: Wysyłanie nie powiodło się; Wyjątkiem zagnieżdżonym jest: \t klasa javax.mail.MessagingException: Nie można się połączyć z hostem SMTP: smtp.gmail.com, port: 587; wyjątek zagnieżdżony to: \t java.net.ConnectException: Przekroczono limit czasu połączenia: połącz \t w javax.mail.Transport.send0 (Transport.Java: 218) \t w javax.mail.Transport.send (Transport.java:80) \t w sendMail.SendMail4.execute (SendMail4.java:70) \t w sendMail.sel.main (sel.java:10) –

+0

Dzięki. Nie wiem, co to jest narzędzie terenowe 'd_uname'. Z drugiej strony, w instrukcji połączenia powinniśmy przekazać wiadomość e-mail zamiast nazwy użytkownika: 'transport.connect (d_host, Integer.valueOf (d_port), d_email, d_password);'. Ponadto, lepiej pokazać pakiet, skąd pochodzi klasa 'SMTPAuthenticator' w kodzie, lub określić API wymagane alternatywnie na odpowiedź. – Omar

5

mam:

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

W przypadku pominięcia czegokolwiek, tu jest kod działa Problem ten występował podczas debugowania przy użyciu NetBeans, nawet przy wykonywaniu rzeczywistego pliku jar. Program antywirusowy blokowałby wysyłanie wiadomości e-mail. Powinieneś tymczasowo wyłączyć swój program antywirusowy podczas debugowania lub wykluczyć możliwość skanowania NetBeans i faktycznego pliku jar. W moim przypadku używam Avast.

Zobacz ten link w jaki sposób pominąć: How to Add File/Website Exception into avast! Antivirus 2014

to działa na mnie.

+0

Czy mógłbyś bardziej szczegółowo opisać związek między odpowiedzią SMTP a programem antywirusowym? – carlodurso

+0

Dziękuję - Avast spowodował również mój "problem" ... – DaniEll

+1

@carlodurso: Antywirus (w moim przypadku AVAST) ma funkcje blokowania programów, które używają portu i wychodzą na podejrzenie zagrożenia bezpieczeństwa. Lepiej wykluczyć zablokowanie pliku JAR. – ronIT

1

co zrobiłem było i wypowiedziało się

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

Bo widocznie dla G-mail, że nie jest to potrzebne. Jeśli jeszcze tego nie zrobiłeś, musisz utworzyć hasło aplikacji w G-mail dla swojego programu. Zrobiłem to i zadziałało idealnie. Tutaj ten link pokaże Ci, jak: https://support.google.com/accounts/answer/185833.

Powiązane problemy