Olá pessoal, tudo bem?
Estou trabalhando em uma aplicação que monitora um endereço de email, cada novo email a aplicação pega as informações do mesmo e faz o download dos arquivos anexados, é ai que esta o problema, o download é muito lento (Muito mesmo, um .docx de 1mb demorou quase 10 minutos para baixar) já pesquisei em vários lugares porém não encontrei uma solução.
Espero que alguém possa me ajudar ou indicar uma alternativa.
Desde já agradeço a todos.
Este é o código que estou executando.
A biblioteca utilizada é a javamail 1.4.7 http://www.oracle.com/technetwork/java/javamail/index-138643.html
Também estou utilizando a biblioteca jsoup 1.8.1 http://jsoup.org/download
package readingemail;
import java.io.File;
import java.io.IOException;
import java.util.*;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.search.FlagTerm;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
public class ReadingEmail {
public static String Html2Text(String mensagem) {
Document doc = Jsoup.parse(mensagem);
mensagem = doc.body().text();
return mensagem;
}
public static void recebeEmail() {
Properties props = new Properties();
props.setProperty("mail.store.protocol", "imaps");
try {
Session session = Session.getDefaultInstance(props, null);
//session.setDebug(true);
Store store = session.getStore("imaps");
store.connect("imap-mail.outlook.com", "aqui vai o endereço do email", "aqui vai a senha");
Folder inbox = store.getFolder("Inbox");
inbox.open(Folder.READ_WRITE);
MimeMessage[] messages = (MimeMessage[]) inbox.search(new FlagTerm(new Flags(Flags.Flag.SEEN), false));
if (messages.length > 0) {
for (Message message : messages) {
imprimeMenssagem(message);
message.setFlag(Flags.Flag.SEEN, true);
}
}
inbox.close(true);
store.close();
} catch (NoSuchProviderException e) {
e.printStackTrace();
System.exit(1);
} catch (MessagingException e) {
e.printStackTrace();
System.exit(2);
}
}
public static void imprimeMenssagem(Message message) {
try {
// Get the header information
String from = ((InternetAddress) message.getFrom()[0]).getPersonal();
if (from == null) {
from = ((InternetAddress) message.getFrom()[0]).getAddress();
}
System.out.println(from);
Address[] froms = message.getFrom();
String email = froms == null ? null : ((InternetAddress) froms[0]).getAddress();
System.out.println("FROM: " + from);
String subject = message.getSubject();
System.out.println("SUBJECT: " + subject);
System.out.println("E-mail: " + email);
// -- Get the message part (i.e. the message itself) --
Part messagePart = message;
Object content = messagePart.getContent();
// -- or its first body part if it is a multipart message --
if (content instanceof Multipart) {
messagePart = ((Multipart) content).getBodyPart(0);
System.out.println("CONTEÚDO: " + Html2Text(messagePart.getContent().toString()));
}
// -- Get the content type --
String contentType = messagePart.getContentType();
// -- If the content is plain text, we can print it --
System.out.println("CONTENT:" + Html2Text(contentType));
String messageContent = "";
// store attachment file name, separated by comma
String attachFiles = "";
if (contentType.contains("multipart")) {
// content may contain attachments
Multipart multiPart = (Multipart) message.getContent();
int numberOfParts = multiPart.getCount();
for (int partCount = 0; partCount < numberOfParts; partCount++) {
MimeBodyPart part = (MimeBodyPart) multiPart.getBodyPart(partCount);
if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition())) {
// this part is attachment
String fileName = part.getFileName();
attachFiles += fileName + ", ";
//Aqui é onde demora
part.saveFile("C:\\Users\\Fernando\\Desktop" + File.separator + fileName);
} else {
// this part may be the message content
messageContent = part.getContent().toString();
}
}
if (attachFiles.length() > 1) {
attachFiles = attachFiles.substring(0, attachFiles.length() - 2);
}
} else if (contentType.contains("text/plain")
|| contentType.contains("text/html")) {
content = message.getContent();
if (content != null) {
messageContent = content.toString();
}
}
System.out.println("-----------------------------");
} catch (MessagingException | IOException ex) {
ex.printStackTrace();
}
}
public static void main(String[] args) {
recebeEmail();
}
}
Abraço