Отправить письмо на Java через сервер ретрансляции

1

Я запускаю веб-приложение Java и пытаюсь отправлять ему уведомления по электронной почте. Когда мы размещали это приложение на одном из наших серверов, он работал отлично. Мы указали это на smtp.gmail.com на порт 25 и сообщения, которые мы можем отправить.

Но теперь мы размещаем это на одном из наших клиентских серверов в целях безопасности. Они блокируют все smtp-домены и разрешают только их собственные (SMTPRELAY.COMPANYNAME.COM). Я изменил хост в моем коде, но теперь аутентификация не работает.

Возможно ли еще аутентифицировать мою учетную запись gmail при использовании этого сервера ретрансляции компании для отправки электронных писем? Какое лучшее решение?

Ниже приведена соответствующая часть кода.

content = "message content";
List<String> recipients = LIST_OF_RECIPIENT_EMAIL_ADDRESSES;

    Properties props = new Properties();
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.starttls.enable", "true");
    props.put("mail.smtp.host", "SMTPRELAY.COMPANYNAME.COM");
    props.put("mail.smtp.port", "25");
    props.put("mail.smtp.ssl.trust", "SMTPRELAY.COMPANYNAME.COM");
    props.put("mail.debug", "true");

    Session session = Session.getInstance(props,
      new javax.mail.Authenticator() {
        protected PasswordAuthentication getPasswordAuthentication() {
            //This is where the email account name and password are set
            return new PasswordAuthentication("[email protected]", "PASSWORD");
        }
      });
    try{
         MimeMessage message = new MimeMessage(session);

         message.setReplyTo(new Address[]{new InternetAddress("[email protected]")});
         for(String recipient: recipients){
             message.addRecipient(Message.RecipientType.BCC,new InternetAddress(recipient));
         }
         message.setSubject(subject);
         message.setContent(content,"text/html");
         Transport.send(message);
         return true;
      }catch (MessagingException mex) {
         mex.printStackTrace();
         return false;
      }

Вот ошибка, которую я продолжаю получать:

javax.mail.AuthenticationFailedException: 535 5.7.3 Authentication unsuccessful
  • 0
    Можно ли подключиться к smtp.gmail.com через порт 465, чтобы обойти это ограничение?
  • 0
    Нет. Нам поручено использовать только порт 25 нашим клиентом. Другие порты заблокированы.
Теги:
email
smtp

1 ответ

4
Лучший ответ

Оказывается, сервер smtp-сервера компании может использоваться без аутентификации, используя любой поддельный адрес электронной почты, который имеет свой домен (например, [email protected]). Таким образом, необходимость аутентификации на smtp.gmail.com оказывается спорной.

Все еще любопытно, можно ли аутентифицироваться против заблокированного smtp при отправке фактического сообщения через другое. Но моя проблема решена.

Если вам интересно, как отправить электронное письмо без проверки подлинности, есть много мест для поиска, как это сделать, но в основном просто меняйте мой код в моем исходном вопросе:

props.put("mail.smtp.auth", "true");
.
.
.
Session session = Session.getInstance(props,
          new javax.mail.Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(email+"@"+domain, password);
            }
          });

Измените приведенные выше части на следующее:

props.put("mail.smtp.auth", "false");
.
.
.
Session session = Session.getInstance(props);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню