JavaMail SMTPSendFailedException - PullRequest
       21

JavaMail SMTPSendFailedException

2 голосов
/ 11 октября 2011

Я пишу программу для работы с электронной почтой, используя API JavaMail.У меня есть сервер Microsoft Exhange, на который я пытаюсь отправить электронные письма.Когда я запускаю свою программу, я получаю следующую ошибку:

**com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:2057)
at com.sun.mail.smtp.SMTPTransport.finishData(SMTPTransport.java:1862)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1100)
at javax.mail.Transport.send0(Transport.java:195)
at javax.mail.Transport.send(Transport.java:124)
at SendEmail.postMail(SendEmail.java:100)
at EmailGenerator.main(EmailGenerator.java:52)**

Часть кода, пытающаяся отправить сообщение, выглядит следующим образом:

Properties props = new Properties();
props.put("mail.smtp.host", email_server);
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.auth", true);

class EmailAuthenticator extends Authenticator {
String user;
String pw;
EmailAuthenticator (String FROM, String PASSWORD)
{
    super();
    this.user = FROM;
    this.pw = PASSWORD;
}
public PasswordAuthentication getPasswordAuthentication()
{
    return new PasswordAuthentication(user, pw);
}
}

Session session = Session.getInstance(props, new EmailAuthenticator(USER, PASSWORD));
session.setDebug(debug);
System.out.println("Session created");

.. CREATED MESSAGE HERE...

Transport transport = session.getTransport("smtp");
transport.connect(exchange_server,user,password);
transport.send(msg);
transport.close();

Интересно, мне не хватает какой-то конфигурациина стороне сервера Exchange, или это проблема с моим кодом?

1 Ответ

5 голосов
/ 18 октября 2011

ОК. Я выяснил, где я ошибался, и выкладываю ответ, если кто-то еще может извлечь из этого пользу. У меня была следующая строка кода:

props.put("mail.smtp.auth", true);

Это сообщало моему приложению, что оно должно пройти аутентификацию на SMTP-сервере, хотя на самом деле это не так. Это приводило к тому, что мое приложение входило в SMTP-сервер и отправляло электронное письмо, в результате чего появлялось сообщение об ошибке. Установка этого свойства в false или отсутствие этой строки кода устранила проблему для меня. Эта строка кода необходима только для SMTP-серверов, требующих входа в систему, чего не сделал мой сервер Exchange.

...