JavaMail smttpsendfailedexception

#smtp #exchange-server #jakarta-mail

#smtp #exchange-сервер #джакарта-почта

Вопрос:

Я пишу программу массовой рассылки электронной почты, используя JavaMail api. У меня есть сервер 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. Не самое полезное исключение в мире. Что произойдет, если вы включите отладку с props.put("mail.debug", "true"); помощью ?

2. Эдвард прав — нам нужен фактический SMTP-ответ от сервера. Еще одна вещь, которую вы можете проверить, — разрешено ли вашему серверу отправлять почту через сервер Exchange. По умолчанию разрешены только аутентифицированные пользователи.

3. я обнаружил, что мой серверный интернет не работает по той же проблеме.

Ответ №1:

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

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

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