Невозможно отправить письмо на удаленный сервер - PullRequest
0 голосов
/ 25 июня 2018

У меня есть java-код, который используется для отправки электронной почты по протоколу smtp через порт 587. Я использую javax mail api для этого.Я могу отправлять почту на машины localhost (windows и ubuntu).

Проблема возникает, когда я создал файл war и развернул его на удаленном сервере с ОС Ubuntu. Более того, в журналах нет ошибок.Пожалуйста, помогите, что может быть вероятной причиной и как ее решить.

Вот мой пример кода Spring-Java

public void sendMailForResetPassword(String emailId ) throws AddressException, MessagingException {
     EmailDataObject emailproperties=new EmailDataObject();

     try {
    Properties props = new Properties();
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.starttls.enable", "true");
    props.put("mail.smtp.host", emailproperties.host_name);
    props.put("mail.smtp.port", 587);
      props.put("mail.smtp.ssl.trust",  emailproperties.host_name);
      props.put("mail.smtp.UseDefaultCredentials",  false);

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




    String link = "www.example.com";
              System.out.println("This is best way for forgot password");
      StringBuilder bodyText = new StringBuilder(); 


    bodyText.append("<div>")
             .append("  Dear User<br/><br/>")
             .append("  We got your reset password request, Find below link to reset password <br/>")
             .append("  Please click <a href=\""+link+"\">here</a> or open below link in browser<br/>")
             .append("  <br/><br/>")

             .append("</div>");
        Message message = new MimeMessage(session);

        message.setFrom(new InternetAddress(emailproperties.from));
        message.setRecipients(Message.RecipientType.TO,
            InternetAddress.parse(emailId));
        message.setSubject("Reset Password");
        message.setContent(bodyText.toString(), "text/html; charset=utf-8");
        session.setDebug(true);

        System.out.println(message);
        Transport.send(message);



     }  catch (MessagingException e) {
         e.printStackTrace();
     }
}

Редактировать

Это вывод session.setDebug (true);

 DEBUG SMTP: Found extension "ETRN", arg ""
 DEBUG SMTP: Found extension "STARTTLS", arg ""
 DEBUG SMTP: Found extension "AUTH", arg "PLAIN LOGIN"
 DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
 DEBUG SMTP: Found extension "8BITMIME", arg ""
 DEBUG SMTP: Found extension "DSN", arg ""
 DEBUG SMTP: Found extension "SMTPUTF8", arg ""
 STARTTLS 220 2.0.0 Ready to start TLS
 EHLO ubuntu-minimal

Спасибо.

Ответы [ 3 ]

0 голосов
/ 25 июня 2018

Похоже, вы застряли в точке, где клиент объявляет свое имя на сервере. Возможно, серверу не нравится тот факт, что вы не использовали правильное имя DNS? Если служба имен на клиентском компьютере настроена правильно, JavaMail (через JDK) сможет определить DNS-имя клиентского компьютера. Поскольку это не работает, вы можете переопределить его, установив для свойства SMTP-сеанса JavaMail mail.smtp.localhost действительное полное имя хоста DNS для вашего клиентского компьютера.

Обратите внимание, что вы можете упростить свой код, избавившись от Authenticator .

0 голосов
/ 01 октября 2018

Я нашел ответ на этот вопрос, используя класс электронной почты в Java.

final Email email = new Email();

String host = hostname;
Integer port = portNumber;
String from = emailFrom;
String pass = emailFromPassword;
String[] to = emailTo;

String msgBody = "Hello";
email.setFromAddress("", from);
email.setSubject("Demo");
for( int i=0; i < to.length; i++ ) {
    email.addRecipient("", to[i], RecipientType.TO);
}
email.setTextHTML(msgBody);

new Mailer(host, port, from, pass).sendMail(email);
0 голосов
/ 25 июня 2018

Вы должны сообщить Transport о Session, а также подключить их и закрыть Transport после этого, попробуйте

    Transport smtpTransport = session.getTransport();
    smtpTransport.connect();
    smtpTransport.sendMessage(message, message.getAllRecipients());
    smtpTransport.close();

вместо

    Transport.send(message);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...