Установка большого числа для свойства mail.imaps.fetchsize с использованием JavaMail имеет какое-либо влияние?JAVA

Программисты JAVA общаются здесь
Гость
Установка большого числа для свойства mail.imaps.fetchsize с использованием JavaMail имеет какое-либо влияние?

Сообщение Гость »

У меня есть запланированное задание по извлечению последних электронных писем из папки и записи этих писем в файл (файл .eml). Но на прочтение письма размером 9 МБ ушло много времени (от 5 до 6 минут). Поскольку я использую JavaMail API, я установил в своем коде свойства, как показано ниже, чтобы повысить производительность, и таким образом это заняло очень мало времени (20 секунд).

props.setProperty("mail.imaps.partialfetch","false");
props.setProperty("mail.imaps.fetchsize", "1048576");

  • Создает ли это (установка большего значения fetchsize) какие-либо другие проблемы в моем приложении?
  • Установка fetchsize равным 1048576 означает, что мое запланированное задание всегда будет занимать
    этот объем памяти, а оставшаяся память будет выделяться
    остальной части моего приложения. Правильно ли я понимаю? Если нет,
    может ли кто-нибудь помочь мне лучше понять это на примере?
Весь код показан ниже,

package com.indiscover;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import java.util.Properties;

import javax.mail.Flags;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.search.FlagTerm;

public class ReadMail {

public static void main(String[] args) throws InterruptedException, IOException {
String protocol="imaps";
String emailAddress = "email_id";
String password = "password";

Properties props = new Properties();
props.setProperty("mail.store.protocol", protocol);
props.setProperty("mail.imaps.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.setProperty("mail.imaps.socketFactory.fallback", "false");
props.setProperty("mail.imaps.port", "993");
props.setProperty("mail.imaps.socketFactory.port", "993");
props.setProperty("mail.imaps.partialfetch","false");
props.setProperty("mail.imaps.fetchsize", "1048576");

Session session = Session.getInstance(props, null);

try {

Store store = session.getStore(protocol);
store.connect("imap-mail.outlook.com", emailAddress, password);
Folder inbox = store.getFolder("Archive/Test");
inbox.open(Folder.READ_WRITE);

//search for all "unseen" messages
Flags recent = new Flags(Flags.Flag.RECENT);
FlagTerm recentFlagTerm = new FlagTerm(recent, true);
Message messages[] = inbox.search(recentFlagTerm);

for (int i = 0; i < messages.length; i++) {
Message message = messages;
String subject = message.getSubject();

processSaveToFile(message,subject);
}

inbox.close(false);
store.close();

}catch (NoSuchProviderException ex) {
System.out.println("No provider.");
ex.printStackTrace();
} catch (MessagingException ex) {
System.out.println("Could not connect to the message store.");
ex.printStackTrace();
}

}

private static void processSaveToFile (Message msg, String subject) throws MessagingException, IOException
{
String whereToSave = "/Users/XXX/Documents/" + "some_random_name" + ".eml";

OutputStream out = new FileOutputStream(new File(whereToSave));
try {
msg.writeTo(out);
}
finally {
if (out != null) { out.flush(); out.close(); }
}
}

}

Вернуться в «JAVA»