2015-02-16 7 views
4

Я пытаюсь отправить электронную почту SMTP в java, но у меня есть ошибка, подобная этой, и я не получаю почту. Я отключу все брандмауэр и антивирус.AuthenticationFailedException error при отправке SMTP-почты

Ошибка:

javax.mail.AuthenticationFailedException: 534-5.7.14<https://accounts.google.com/ContinueSignIn?sarp=1&scc=1&plt=AKgnsbuIW 

534-5.7.14 tAxHxbq4WR-vUuV1uOFAvx8NhInfxYTyNHi_8sJ80lX5lBdBla2ROiSKoysMNcFoQ6sGe 
534-5.7.14 DUh173tDMolJ64W-Rahx1fhVF_08AvWrphibgQXiyyz5U1FNMMb-eGGJlUIbjyvBgQuZY6 

534-5.7.14 tnykIXdVn__mg87aOmtxoss-EiFYeKdvuiBbt5eb9t_NOc97h-PkXOco-9FcYW69Iz9CTu 

534-5.7.14 rfyhlo24k9oqIiWtcJwv85oUCO2g> Please log in via your web browser and 

534-5.7.14 then try again. 

534-5.7.14 Learn more at 

534 5.7.14 https://support.google.com/mail/bin/answer.py?answer=78754 pd8sm1306363pdb.93 - gsmtp 

Вот мой код:

private void btn_mailActionPerformed(java.awt.event.ActionEvent evt) {           

    String to = "[email protected]"; 

    String from = "[email protected]"; 
    final String username = "send.address"; 
    final String password = "sendpassword"; 
    String host = "smtp.gmail.com"; 
    Properties pro = new Properties(); 
    pro.put("mail.smtp.host",host); 
    pro.put("mail.smtp.socketFactory.port","465"); 
    pro.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory"); 
    pro.put("mail.smtp.auth","true"); 
    pro.put("mail.smtp.port","465"); 
    Session session = Session.getInstance(pro, 
      new javax.mail.Authenticator() { 
       protected PasswordAuthentication getPasswordAuthentication() 
       { 
        return new PasswordAuthentication(username,password); 
       } 
      } 

      ); 
    try 
    { 
     Message message = new MimeMessage(session); 
     message.setFrom(new InternetAddress(from)); 
     message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to)); 
     message.setSubject("test mail"); 
     message.setText("Hello how are you?"); 
     Transport.send(message); 
     JOptionPane.showMessageDialog(null,"Send"); 

    } 
    catch (Exception e) { 
     JOptionPane.showMessageDialog(null,e.toString()); 
     System.out.println(e.toString()); 
    } 
+5

И вы просмотрели https://support.google.com/mail/bin/answer.py?answer=78754, чтобы узнать, почему его ошибка? – Tom

+0

Обратите внимание, что ваш код полон [наиболее распространенных ошибок JavaMail] (http://www.oracle.com/technetwork/java/javamail/faq/index.html#commonmistakes). Я не думаю, что это связано с вашей проблемой, но вы все равно должны ее очистить. –

ответ

13

Войти по электронной почте через браузер и перейти this page. Вы увидите это;

enter image description here

Не забудьте нажать кнопку «Включить» и попытать код.

+0

Спасибо. Мне пришлось отключить его, но он все еще замечает эту ошибку. – nistelrooy41001662

+1

Вы хотите включить его, а не выключить. Ваше приложение работает на том же компьютере, что и браузер, который вы используете? –

+0

Я пытаюсь как включить, так и выключить. Да, мое приложение работает на том же компьютере, что и браузер, который я использую. Я думаю, что код правильный, но gmal не позволяет отправлять электронную почту, как это. – nistelrooy41001662

1

У меня была та же проблема. После большого тестирования с Gmail я обнаружил, что проблема заключается в том, что Gmail требует входа в систему OAuth, а не только пароля. Решением для этого является использование Gmail API. Однако это очень сложное решение, о котором я не буду подробно останавливаться. Если вас это интересует, прочитайте первый ответ here.

Если вы хотите простое решение, однако, то, что я сделал, просто переключится на учетную запись Yahoo. Поскольку Yahoo не использует одно и то же шифрование, он отлично работает. Примечание. Не забудьте изменить SMTP-сервер на «smtp.mail.yahoo.com», а порт - «25».

Если вы хотите установить его с нуля, просто следуйте инструкциям this, чтобы загрузить JavaMail API и Java Activation Framework.

Тогда вы можете просто скопировать и вставить мой код, изменить верхние переменные, и все должно работать! Если я пропустил что-нибудь, пожалуйста, дайте мне знать! Благодаря!

import java.util.*; 
import javax.mail.*; 
import javax.mail.internet.*; 

public class Mailer { 

    public static void main(String[] args) { 
     final String username = "[email protected]"; 
     final String password = "your-password"; 
     final String recipient = "email-recipient"; 
     final String subject = "message-subject"; 
     final String emailmessage = "message"; 

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

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

     try { 

      Message message = new MimeMessage(session); 
      message.setFrom(new InternetAddress(username)); 
      message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipient)); 
      message.setSubject(subject); 
      message.setText(emailmessage); 

      Transport.send(message); 

      System.out.println("Done"); 

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

    } 

} 
+0

То, что вы говорите, может быть правильным для конкретной Java, но я не уверен, потому что на других платформах Google не требует OAuth для использования своего SMTP. –

+0

Ну, если вы хотите использовать Google, возможно, вы можете [включить доступ для менее безопасных приложений] (https://www.google.com/settings/security/lesssecureapps), но я не мог заставить его работать меня. Вот почему я использовал Yahoo вместо этого. Во всяком случае, я не слышал о том, что OAuth не требуется для определенных вещей. Может быть, это просто с Java – user4775991

+0

@ user4775991 Я сомневаюсь, что приведенный выше фрагмент кода теперь работает с двойным знаком Yahoo при аутентификации – dirai

Смежные вопросы