Есть ли способ повысить производительность получения сообщений с сервера Javamail IMAP?
Я нашел несколько советов, но не смог улучшить производительность.
Этот метод получит около 20 сообщений из папки и вернет отформатированные сообщения в DTO. Я пытался прокомментировать строки, чтобы получить вложения, и получить получателей, но это ничего не меняет в производительности. р>
/**
* Get all the emails that are inside the param folder
*
* @param folderId folder to return the emails from the informed folder.
* @param pageToken pageToken to be used as pagination
* @param maxResults maxResults to create a limit to the number of registers
* @return {@link EmailsDTO} with all the messages
*/
public EmailsDTO getMessages(final String folderId, final String pageToken, final Integer maxResults) {
final Properties properties = getServerInputProperties();
final Session session = Session.getDefaultInstance(properties);
try {
final EmailsDTO emailsDTO = new EmailsDTO();
final List emailDTOList = new ArrayList();
// connects to the message store
final Store store = session.getStore(IMAP);
store.connect(email, password);
// opens the folder to search the messages
final Folder folder = store.getFolder(folderId);
folder.open(Folder.READ_ONLY);
//set a pagination used to get the results in JavaMail
final int pageStart = nonNull(pageToken) ? Integer.valueOf(pageToken) : 1;
final int pageEnd = (pageStart + maxResults) > folder.getMessageCount() ? folder.getMessageCount() : pageStart + maxResults;
// fetches new messages from server, starts with 1
final Message[] messages = folder.getMessages(pageStart, pageEnd);
final FetchProfile fetchProfile = new FetchProfile();
fetchProfile.add(FetchProfile.Item.ENVELOPE);
folder.fetch(messages, fetchProfile); // Load the profile of the messages in 1 fetch.
for (final Message msg : messages) {
final EmailDTO emailDTO = new EmailDTO();
emailDTO.setId(msg.getHeader(MESSAGE_ID)[0]);
emailDTO.setCc(this.parseAddresses(msg.getRecipients(Message.RecipientType.CC)));
emailDTO.setTo(this.parseAddresses(msg.getRecipients(Message.RecipientType.TO)));
emailDTO.setBcc(this.parseAddresses(msg.getRecipients(Message.RecipientType.BCC)));
emailDTO.setFrom(this.getFrom(msg.getFrom()));
emailDTO.setRead(msg.getFlags().contains(Flags.Flag.SEEN));
emailDTO.setHasAttachments(this.hasAttachments(msg));
emailDTO.setSubject(msg.getSubject());
emailDTO.setMessage(this.getMessageContent(msg));
emailDTO.setAttachments(this.getAttachements(msg));
emailDTO.setDate(msg.getReceivedDate().toString());
emailDTO.setParentFolder(msg.getFolder().getName());
//TODO: see what need to put here emailDTO.setLabels();
emailDTOList.add(emailDTO);
}
// disconnect
folder.close(false);
store.close();
emailsDTO.setEstimatedNumberOfMessages(folder.getMessageCount());
emailsDTO.setNextPageToken(String.valueOf(emailDTOList.size()));
emailsDTO.setMessages(emailDTOList);
return emailsDTO;
} catch (final MessagingException | IOException e) {
throw new RuntimeException(String.format("couldn't get messages from the folder with id: %s", folderId), e);
}
}
Подробнее здесь: https://stackoverflow.com/questions/598 ... -to-get-20
Java Mail IMAP требует много времени для получения сообщений в почтовый ящик, 25 секунд для получения 20 сообщений ⇐ JAVA
Программисты JAVA общаются здесь
1730544774
Anonymous
Есть ли способ повысить производительность получения сообщений с сервера Javamail IMAP?
Я нашел несколько советов, но не смог улучшить производительность.
Этот метод получит около 20 сообщений из папки и вернет отформатированные сообщения в DTO. Я пытался прокомментировать строки, чтобы получить вложения, и получить получателей, но это ничего не меняет в производительности. р>
/**
* Get all the emails that are inside the param folder
*
* @param folderId folder to return the emails from the informed folder.
* @param pageToken pageToken to be used as pagination
* @param maxResults maxResults to create a limit to the number of registers
* @return {@link EmailsDTO} with all the messages
*/
public EmailsDTO getMessages(final String folderId, final String pageToken, final Integer maxResults) {
final Properties properties = getServerInputProperties();
final Session session = Session.getDefaultInstance(properties);
try {
final EmailsDTO emailsDTO = new EmailsDTO();
final List emailDTOList = new ArrayList();
// connects to the message store
final Store store = session.getStore(IMAP);
store.connect(email, password);
// opens the folder to search the messages
final Folder folder = store.getFolder(folderId);
folder.open(Folder.READ_ONLY);
//set a pagination used to get the results in JavaMail
final int pageStart = nonNull(pageToken) ? Integer.valueOf(pageToken) : 1;
final int pageEnd = (pageStart + maxResults) > folder.getMessageCount() ? folder.getMessageCount() : pageStart + maxResults;
// fetches new messages from server, starts with 1
final Message[] messages = folder.getMessages(pageStart, pageEnd);
final FetchProfile fetchProfile = new FetchProfile();
fetchProfile.add(FetchProfile.Item.ENVELOPE);
folder.fetch(messages, fetchProfile); // Load the profile of the messages in 1 fetch.
for (final Message msg : messages) {
final EmailDTO emailDTO = new EmailDTO();
emailDTO.setId(msg.getHeader(MESSAGE_ID)[0]);
emailDTO.setCc(this.parseAddresses(msg.getRecipients(Message.RecipientType.CC)));
emailDTO.setTo(this.parseAddresses(msg.getRecipients(Message.RecipientType.TO)));
emailDTO.setBcc(this.parseAddresses(msg.getRecipients(Message.RecipientType.BCC)));
emailDTO.setFrom(this.getFrom(msg.getFrom()));
emailDTO.setRead(msg.getFlags().contains(Flags.Flag.SEEN));
emailDTO.setHasAttachments(this.hasAttachments(msg));
emailDTO.setSubject(msg.getSubject());
emailDTO.setMessage(this.getMessageContent(msg));
emailDTO.setAttachments(this.getAttachements(msg));
emailDTO.setDate(msg.getReceivedDate().toString());
emailDTO.setParentFolder(msg.getFolder().getName());
//TODO: see what need to put here emailDTO.setLabels();
emailDTOList.add(emailDTO);
}
// disconnect
folder.close(false);
store.close();
emailsDTO.setEstimatedNumberOfMessages(folder.getMessageCount());
emailsDTO.setNextPageToken(String.valueOf(emailDTOList.size()));
emailsDTO.setMessages(emailDTOList);
return emailsDTO;
} catch (final MessagingException | IOException e) {
throw new RuntimeException(String.format("couldn't get messages from the folder with id: %s", folderId), e);
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/59897231/java-mail-imap-taking-lot-of-time-to-getting-messages-in-mail-box-25s-to-get-20[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия