Попытка отправки электронной почты на Java с помощью gmail всегда приводит к тому, что имя пользователя и пароль не принимаются - PullRequest
1 голос
/ 14 мая 2010

Когда я вызываю метод отправки (после установки studentAddress), я получаю это:

javax.mail.AuthenticationFailedException: 535-5.7.1 Username and Password not accepted. Learn more at<br> 535 5.7.1 http://mail.google.com/support/bin/answer.py?answer=14257 y15sm906936wfd.10

Я почти уверен, что код правильный, и на 100% уверен, что введенные мной имя пользователя и пароль верны. Так что-то не так с gmail или как?

Это мой код:

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

public class SendEmail {

    private String host = "smtp.gmail.com";
    private String emailLogin = "xxx@gmail.com";
    private String pass = "xxx";
    private String studentAddress;
    private String to;
    private Properties props = System.getProperties();

    public SendEmail() {
        props.put("mail.smtps.auth", "true");
        props.put("mail.smtps.starttls.enable", "true");
        props.put("mail.smtp.host", host);
        props.put("mail.smtp.user", emailLogin);
        props.put("mail.smtp.password", pass);
        props.put("mail.smtp.port", "587");
        to = "xxx@gmail.com";
    }

    public void setStudentAddress(String newAddress) {
        studentAddress = newAddress;
    }

    public void send() {
        Session session = Session.getDefaultInstance(props, null);
        MimeMessage message = new MimeMessage(session);
        try {
            message.setFrom(new InternetAddress(emailLogin));

            InternetAddress[] studentAddressList = {new InternetAddress(studentAddress)};
            message.setReplyTo(studentAddressList);
            message.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
            message.setSubject("Test Email");
            message.setText("This is a test email!");
            Transport transport = session.getTransport("smtps");
            transport.connect(host, emailLogin, pass);
            transport.sendMessage(message, message.getAllRecipients());
            transport.close();
        } catch (MessagingException me) {
            System.out.println("There has been an email error!");
            me.printStackTrace();           
        }
    }

}

Любые идеи ...

Ответы [ 4 ]

4 голосов
/ 11 июля 2012

Для этого есть два решения:

Вы можете сгенерировать специфичный для приложения пароль по ссылке i.e "https://accounts.google.com/IssuedAuthSubTokens" и используйте сгенерированный пароль для конкретного приложения вместо исходного пароля , Я сделал это и его работа

или

Причина возникновения исключения (javax.mail.AuthenticationFailedException: 535-5.7.1 требуется пароль для конкретного приложения) заключается в том, что вы, возможно, активировали двухэтапную проверку своей учетной записи gmail. Если вы используете учетную запись, в которой вы не активируете двухэтапную проверку, вы можете отправить электронное письмо со своим оригинальным паролем. Я также попробовал это, и он работает нормально.

2 голосов
/ 23 января 2011

У меня была точно такая же проблема (использование commons-email, которое на самом деле кажется проще, чем использование java.mail). Для меня это решило изменение имени пользователя, чтобы оно включало user@mydomain.com вместо «user». Вероятно, ошибка new-b, но, возможно, другие могут извлечь из нее выгоду.

0 голосов
/ 14 мая 2010

существуют определенные ограничения на использование учетной записи Gmail в программе как вашей. Одной из них является учетная запись, которой должно быть несколько дней, и я думаю, что ей 1 день.

0 голосов
/ 14 мая 2010

Была проблема с gmail, а не с кодом!

...