У меня есть приложение Grails, которое отправляет электронные письма. Почтовый сервер не имеет SMTP-аутентификации, поэтому он требует «POP перед SMTP», что означает, что мне нужно пройти аутентификацию на POP-аккаунте перед отправкой через SMTP. Чаще всего это работает, но иногда почтовый сервер не выбирается из свойств, и вместо этого он пытается подключиться к «localhost». Вот свойства:
Properties props = new Properties();
props.setProperty("mail.store.protocol", "pop3")
props.setProperty("mail.pop3.host", "mail.xxxxx.com")
props.setProperty("mail.pop3.port", "110")
props.setProperty("mail.smtp.host", "mail.xxxxx.com")
props.setProperty("mail.smtp.port", "25")
props.setProperty("mail.smtp.sendpartial", "true")
props.setProperty("mail.pop3.socketFactory.port", "110")
props.setProperty("mail.pop3.socketFactory.class","javax.net.SocketFactory")
props.setProperty("mail.pop3.socketFactory.fallback", "false")
Transport t = null
def store
try {
URLName url = new URLName("pop3", "mail.xxxxxxx.com", 110,
"INBOX", "username", "password");
Session session = Session.getDefaultInstance(props, null)
store = session.getStore(url)
store.connect("mail.xxxxxx.com", "username", "password")
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("xxxx@xxxxxx.com"));
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(toAddress, true));
message.setSubject(mailTitle);
message.setContent(messageBody, "text/html");
message.setSentDate(new Date());
t = session.getTransport("smtp")
t.connect()
t.send(message)
return true
}
catch (AddressException e) {
e.printStackTrace()
return false
}
catch (MessagingException e) {
e.printStackTrace()
return false
}
finally {
store?.close()
}
Чаще всего это работает. Но когда кварцевое задание выполняет отправку, запись почтового сервера из свойств не учитывается, и вместо этого она использует «localhost», а затем не отправляет электронные письма.
Я могу соединиться с Telnet и отправить с указанными атрибутами.
Может ли это быть проблема тайм-аута? Согласно тому, что я прочитал в документации, тайм-ауты по умолчанию «бесконечны», так что «не должно быть» проблемой.
Может ли это быть проблемой производительности? Я создал «фиктивное приложение», которое - более или менее - делает то же самое, но не выдает отправку из службы Grails, а напрямую из контроллера. Это работает все время, но это приложение всегда бездействует.
Я не использую почтовый плагин для Grails, так как не мог понять, что он может обрабатывать парадигму «pop before smtp».
Заранее спасибо.