#java #email #smtp
#java #Адрес электронной почты #smtp
Вопрос:
Я запускаю веб-приложение 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("SUPPORTEMAILACCOUNT@gmail.com", "PASSWORD");
}
});
try{
MimeMessage message = new MimeMessage(session);
message.setReplyTo(new Address[]{new InternetAddress("no-reply@gmail.com")});
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
Комментарии:
1. Возможно ли подключиться к smtp.gmail.com в порту 465, чтобы обойти это ограничение?
2. Нет. Наш клиент дал нам указание использовать только порт 25. Другие порты заблокированы.
Ответ №1:
Оказывается, smtp-сервер ретрансляции компании можно использовать без аутентификации, используя любой поддельный адрес электронной почты, который имеет их домен (например ANYUSERNAME@COMPANYNAME.COM ). Таким образом, необходимость аутентификации на 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);