Java: отправка письма через SMTP на внешний сервер
Есть локальный почтовый сервер компании. Написана простенькая служба, которая отсылает через него письма. Вот как задаются настройки:
Properties properties = new Properties();
properties.setProperty("mail.transport.protocol", "smtp");
properties.put("mail.smtp.host", par.host);
if (par.port != null) {
properties.put("mail.smtp.port", par.port);
}
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.ehlo", "false");
properties.put("mail.smtp.user", par.user);
properties.put("mail.smtp.password", par.password);
if (par.isSsl) {
properties.put("mail.smtp.ssl.enable", "true");
properties.put("mail.smtp.socketFactory.port", par.sslPort);
properties.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
} else {
properties.put("mail.smtp.starttls.enable", "true");
}
Вот что передаю в метод:
{
"host":"company-exch.company.ru",
"user":"[email protected]",
"password":"password",
"from":"[email protected]",
"to":["[email protected]", "[email protected]"],
"subject":"subj",
"body":"body"
}
Когда шлю письмо с внутреннего почтового ящика на другой внутренний почтовый ящик, то всё доходит. Если шлю письмо на яндекс, гугл, мэйлру - возвращает ошибку "550 5.7.1 Unable to relay".
Админ говорит, что внешний трафик не фильтруется и всё должно доходить.
Что я делаю не так?
Если же я пытаюсь послать письмо с яндекса:
{
"host":"smtp.yandex.ru",
"user":"[email protected]",
"password":"password",
"is_ssl":true,
"ssl_port":"465",
"from":"[email protected]",
"to":["[email protected]"],
"subject":"Lorem Ipsum",
"body":"Lorem ipsum dolor sit amet, consectetur adipiscing elit."
}
То выходит другая ерунда: "503 5.5.4 Error: send AUTH command first."
(что интересно, три месяца назад, когда я писал службу, на этом яндексовском ящике всё работало, а теперь вдруг перестало)
Как я должен сделать авторизацию? Все джавовские гайды обходятся строкой properties.put("mail.smtp.auth", "true"), как будто этого достаточно.