При подключении к SMTP-серверу (также при использовании javax.mail
API) вы используете сокетное соединение (см. Src SMTPTransport и Transport классы ). Сокеты позволяют подключаться к удаленному серверу, и это соединение остается открытым до тех пор, пока оно не будет закрыто явно. Это означает, что теоретически вы можете создать соединение, и они снова его используют.
Тем не менее, многие SMTP-серверы являются довольно злыми и прерывают соединение , если вы используете его «слишком медленно» или , если вы пытаетесь часто повторять ваш SMTP-сеанс до . (Я посмотрел постфикс настройки для вас.)
Java Mail API позволяет создавать соединение и закрывать его в любое время. Что-л. как это:
Transport transport = session.getTransport("smtp");
transport.connect();
transport.sendMessage(msg, addressArray);
// you can do transport.close(); later
Однако из-за того, как работают SMTP-серверы, вы не можете просто выполнить connect()
один раз и забыть его. Самое большее, что вы можете сделать, - это правильно обрабатывать принудительное отключение путем повторного подключения. Для этого в Java Mail API есть механизм уведомления (взгляните на использование метода notifyConnectionListeners
)