2010-06-03 2 views
8

Я получаю эту ошибку при попытке отправить почту с использованием JavaMail API. Я уверен, что имя пользователя и пароль на 100% правильны. Учетная запись Gmail, с которой я подключаюсь, - это более старая учетная запись, потому что, по их словам, для работы с новыми учетными записями требуется время.JavaMail с Gmail: 535-5.7.1 Имя пользователя и пароль не принимаются

 
DEBUG SMTP RCVD: 535-5.7.1 Username and Password not accepted. Learn more at 

535 5.7.1 http://mail.google.com/support/bin/answer.py?answer=14257 x35sm3011668 
wfh.6 

javax.mail.SendFailedException: Sending failed; 
    nested exception is: 
     javax.mail.AuthenticationFailedException 
     at javax.mail.Transport.send0(Transport.java:218) 
     at javax.mail.Transport.send(Transport.java:80) 
     at Main.(Main.java:41) 
     at Main.main(Main.java:51) 

и это мой код:

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

public class Main 
{ 
    String d_email = "[email protected]", 
      d_password = "pass", 
      d_host = "smtp.gmail.com", 
      d_port = "465", 
      m_to = "[email protected]", 
      m_subject = "Testing", 
      m_text = "testing email."; 

    public Main() 
    { 
     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.auth", "true"); 
     props.put("mail.smtp.debug", "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"); 

     SecurityManager security = System.getSecurityManager(); 

     try 
     { 
      Authenticator auth = new SMTPAuthenticator(); 
      Session session = Session.getInstance(props, auth); 
      session.setDebug(true); 
      MimeMessage msg = new MimeMessage(session); 
      msg.setText(m_text); 
      msg.setSubject(m_subject); 
      msg.setFrom(new InternetAddress(d_email)); 
      msg.addRecipient(Message.RecipientType.TO, new InternetAddress(m_to)); 
      Transport.send(msg); 
     } 
     catch (Exception mex) 
     { 
      mex.printStackTrace(); 
     } 
    } 

    public static void main(String[] args) 
    { 
     Main blah = new Main(); 
    } 

    private class SMTPAuthenticator extends javax.mail.Authenticator 
    { 
     public PasswordAuthentication getPasswordAuthentication() 
     { 
      return new PasswordAuthentication(d_email, d_password); 
     } 
    } 
} 
+4

@bobby: в формате base64 значение пароля было видно в исходном посте. Я удалил его час назад, но он все еще отображается в истории изменений. Я настоятельно рекомендую вам поменять пароль Gmail до того, как злоумышленник может разорвать вашу учетную запись Gmail. – BalusC

ответ

5

Данный фрагмент кода отлично работает на моем аккаунте Gmail, так что эта проблема лежит где-то в другом месте. Вы писали: the link given in the error message? Он содержит следующие подсказки:

  • Убедитесь, что вы ввели полный адрес электронной почты (например, [email protected])
  • Повторно введите пароль, чтобы убедиться, что это правильно. Имейте в виду, что пароли чувствительны к регистру.
  • Убедитесь, что ваш почтовый клиент не настроен слишком часто проверять почту. Если ваш почтовый клиент проверяет новые сообщения более одного раза каждые 10 минут, ваш клиент может повторно запросить ваше имя пользователя и пароль.

Особенно важна последняя точка. Google очень строг в этом. Если вы пытаетесь подключить Gmail, например, более 10 раз в минуту программно, то вы можете уже заблокировать его. Имейте немного терпения, через некоторое время он будет разблокирован.

Если вам нужна дополнительная свобода при отправке писем, я рекомендую искать выделенный почтовый узел или настроить собственный почтовый сервер, например Apache James или Microsoft Exchange. Я уже answered this in detail в одном из ваших предыдущих вопросов.

+0

hhey спасибо ... это сработало .. !! может у сказать, как отправить почту с помощью jsp .. !!im пытается внедрить «забытый пароль» на веб-сайте, есть ли какие-либо идеи и предложения от u, чтобы реализовать это. !! – simplyblue

+0

Просто создайте класс сервлета, который выполняет задачу, и создайте форму HTML в JSP, которая отправляется на URL-адрес, где этот сервлет прослушивает. В методе сервлетов вы можете просто написать и вызвать реальный Java-код обычным способом. Узнайте больше о JSP/Servlet здесь: http://courses.coreservlets.com/Course-Materials/csajsp2.html – BalusC

2

Я столкнулся с той же проблемой, для меня причина в том, что я включил 2-step verification в свой аккаунт gmail.

После создания нового пароля для конкретного приложения и использования этого в моем приложении java эта проблема «535 5.7.1» исчезла.

Вы можете создать новый пароль для конкретного приложения, следующий за этим official google guide.

+0

Спасибо Jifeng !!! – Davidea

0

У меня такое же сообщение об ошибке, и это, как я решил эту проблему,

Создайте пароль приложения: вот как мы можем создать пароль приложения,

1. Visit your App passwords page. You may be asked to sign in to your Google Account. 

2. At the bottom, click Select app and choose the app you’re using. 
Click Select device and choose the device you’re using. 

3. Select Generate. 

4. Follow the instructions to enter the App password (the 16 character code in the yellow bar) on your device. 

5. Select Done. 

Я работал для Весеннее загрузочное приложение, и я получаю пароль приложения, скажем: sadsadaffferere для адреса электронной почты, [email protected]. Таким образом, мне нужно настроить свойства приложения, как в следующем,

# the email settings 
# ------------------ 
spring.mail.host=smtp.gmail.com 
[email protected] 
spring.mail.password=sadsadaffferere 
spring.mail.properties.mail.smtp.auth=true 
spring.mail.properties.mail.smtp.socketFactory.port=465 
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory 
spring.mail.properties.mail.smtp.socketFactory.fallback=false 
[email protected] 

Все работает отлично потом

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