2016-06-21 4 views
1

Я делаю веб-приложение, которое может отправить электронное письмо, в этом коде я использовал почту yahoo для отправки.Как javax.mail.AuthenticationFailedException: не удалось соединиться при отправке почты с помощью java?

Я попробовал несколько решений, но у них не было меня много:

  1. Getting the "javax.mail.AuthenticationFailedException: failed to connect" Error
  2. javax.mail.AuthenticationFailedException: failed to connect, no password specified?

Вот мой код:

try { 

     Properties props = new Properties(); 
     props.put("mail.smtp.host", "smtp.mail.yahoo.com"); // for gmail use smtp.gmail.com 
     props.put("mail.smtp.auth", "true"); 
     props.put("mail.debug", "true"); 
     props.put("mail.smtp.starttls.enable", "true"); 
     props.put("mail.smtp.port", "465"); 
     props.put("mail.smtp.socketFactory.port", "465"); 
     props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
     props.put("mail.smtp.socketFactory.fallback", "false"); 

     Session mailSession = Session.getInstance(props, new javax.mail.Authenticator() { 

      protected PasswordAuthentication getPasswordAuthentication() { 
       return new PasswordAuthentication("[email protected]", "my_pwd"); 
      } 
     }); 

     mailSession.setDebug(true); // Enable the debug mode 

     Message msg = new MimeMessage(mailSession); 

     //--[ Set the FROM, TO, DATE and SUBJECT fields 
     msg.setFrom(new InternetAddress("[email protected]")); 
     msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse("[email protected]")); 
     msg.setSentDate(new Date()); 
     msg.setSubject("Hello World!"); 

     //--[ Create the body of the mail 
     msg.setText("Hello from my first e-mail sent with JavaMail"); 

     //--[ Ask the Transport class to send our mail message 
     Transport.send(msg); 
     return true; 

    } catch (Exception E) { 
     System.out.println("Oops something has gone pearshaped!"); 
     System.out.println(E); 
     return false; 
    } 

А вот отладка код:

DEBUG: JavaMail version 1.4.2 
DEBUG: successfully loaded resource: /META-INF/javamail.default.providers 
DEBUG: Tables of loaded providers 
DEBUG: Providers Listed By Class Name: {com.sun.mail.smtp.SMTPSSLTransport=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc], com.sun.mail.imap.IMAPSSLStore=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3SSLStore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc], com.sun.mail.imap.IMAPStore=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3Store=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc]} 
DEBUG: Providers Listed By Protocol: {imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], imap=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], smtps=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], pop3=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc], pop3s=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc], smtp=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]} 
DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map 
DEBUG: setDebug: JavaMail version 1.4.2 
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc] 
DEBUG SMTP: useEhlo true, useAuth true 
DEBUG SMTP: useEhlo true, useAuth true 
DEBUG SMTP: trying to connect to host "smtp.mail.yahoo.com", port 465, isSSL false 
220 smtp.mail.yahoo.com ESMTP ready 
DEBUG SMTP: connected to host "smtp.mail.yahoo.com", port: 465 

EHLO DESKTOP-132ABCD 
250-smtp.mail.yahoo.com 
250-PIPELINING 
250-SIZE 41697280 
250-8 BITMIME 
250 AUTH PLAIN LOGIN XOAUTH2 XYMCOOKIE 
DEBUG SMTP: Found extension "PIPELINING", arg "" 
DEBUG SMTP: Found extension "SIZE", arg "41697280" 
DEBUG SMTP: Found extension "8", arg "BITMIME" 
DEBUG SMTP: Found extension "AUTH", arg "PLAIN LOGIN XOAUTH2 XYMCOOKIE" 
DEBUG SMTP: Attempt to authenticate 
DEBUG SMTP: check mechanisms: LOGIN PLAIN DIGEST-MD5 
AUTH LOGIN 
//some code 
535 5.7.0 (#MBR1240) Please verify your account by going to https://login.yahoo.com 
Oops something has gone pearshaped! 
javax.mail.AuthenticationFailedException: failed to connect 

Пожалуйста, помогите мне, большое вам спасибо!

+0

Учетная запись, которую вы используете .. проверяется? –

+0

Да, мой аккаунт действителен, и я использую его, как отправителя, так и получателя! – iamatsundere181

ответ

5

Я использовал ваш код Java для отправки электронной почты, вместо этого использовал свою учетную запись gmail. С первой попытки я также получил «javax.mail.AuthenticationFailedException: 534-5.7.14».

Это исключение происходит, потому что Google отключает доступ для менее безопасных приложений. После этого я пошел к этому link.

После выполнения инструкций и включения менее безопасных приложений я смог отправить почту.

Поскольку вы используете почту yahoo, вы можете попробовать это link, чтобы включить доступ для менее безопасного приложения, включив опцию «Разрешить приложениям, которые используют менее безопасный вход».

+0

большое вам спасибо – iamatsundere181

2

Я столкнулся с той же проблемой с GMail пару недель назад. Оказывается, GMail не позволит вам отправлять электронные письма с «менее безопасными» приложениями, если вы не активируете его в настройках безопасности вашего аккаунта GMail.
Yahoo! Упрощенный расчет! имеет те же стандарты безопасности, поэтому вы сможете получить доступ к https://login.yahoo.com/account/security и включить «Разрешить приложениям, которые используют менее безопасный вход»,, прежде чем использовать эту учетную запись в своем приложении Java.