Давайте начнем с упрощения вашего кода. Замените эти строки:
props.setProperty("mail.debug", "true")
props.setProperty("mail.imap.port", "143")
props.setProperty("mail.imap.ssl.enable", "true")
props.setProperty("mail.imap.socketFactory.port", "993")
val session = Session.getDefaultInstance(props, authenticator(mailBox.user, mailBox.pass))
на эти:
props.setProperty("mail.debug", "true")
props.setProperty("mail.imap.ssl.enable", "true")
val session = Session.getInstance(props)
Это:
val from = message.from[0].toString().split("<")[0]
, вероятно, хочет выглядеть примерно так:
val from = (InternetAddress)(message.from[0]).getAddress()
(Не уверен, нужен ли актерский состав.)
Я не знаю, почему вы используете полученные данные в качестве даты отправки, но это неправильно. Почему вы просто не используете дату отправки?
Использование message.content.toString будет работать только для простого простого текстового сообщения. Конечно, любое сообщение с вложением не даст желаемое. См. Раздел часто задаваемых вопросов для найти тело основного сообщения .
Это также объясняет, почему вы не хотите каждый раз удалять весь контент сообщения; это ужасно неэффективно. Вам также может понадобиться изменить программу, чтобы любые вложения загружались только тогда, когда пользователь нажимает на них. Для отладки попробуйте закомментировать доступ к message.content и замените его пустой строкой и посмотрите, приблизилась ли производительность к ожидаемому.
Если вы все еще не получаете желаемую производительность, Вы должны посмотреть на другие элементы FetchProfile, которые вы можете использовать. Вы также должны опубликовать выходные данные отладки JavaMail, в идеале с отметкой времени для каждой строки, или с выводом из вашей программы, показывающим System.currentTimeMillis () вокруг каждого из ключевых операторов в вашей программе.