Extrair anexos de e-mails do outlook e do servidor de e-mails MS Exchange

4 respostas
J

Boa tarde Pessoal,

Preciso ler todos os e-mails do outlook e extrair seus anexos para um diretório comum. Só não tenho idéia de como fazer isso. Alguém pode me ajudar?

4 Respostas

W

Boa Tarde,

existe uma API chamada JACOB, que permite vc executar funcoes em componentes activex (inclusive do outlook). Vc pode encontrá-la nesse link: http://sourceforge.net/projects/jacob-project/

Qndo vc fizer o download, é só importar o jar e por a sua DLL no raiz onde vc roda seu binário java. Aí o código pra acessar seus emails seria mais ou menos assim:

ActiveXComponent outlook = new ActiveXComponent(“Outlook.Application”);

Dispatch mainDispatcher = outlook.getObject();

Dispatch appDispatcher = Dispatch.call(mainDispatcher, “GetNamespace”, “MAPI”).toDispatch();

//retorna o primeiro nivel de pastas
Dispatch foldersDispatch = Dispacth.call(appDispatcher, “Folders”).toDispatch();

int total = Dispatch.call(foldersDispatch, “Count”).toInt();

for(int i=1; i<=total; i++){

Dispatch folderDispatcher = Dispatch.call(foldersDispatch, Item, new Integer(i)).toDispatch();

//Retorna o segundo nivel de pastas

Dispatch subfoldersDispatcher =  Dispacth.call(appDispatcher, Folders).toDispatch();
int subTotal = Dispatch.call(subfoldersDispatcher, "Count").toInt();

    for(int j=1; j<=subTotal; j++){
           Dispatch subFolderDispatcher = Dispatch.call(subfoldersDispatcher, "Item", new Integer(j)).toDispatch();
	//retorna todos os emails da pasta
       Dispatch mailsDispatcher = Dispatch.call(subFolderDispatcher, "Items").toDispatch());
           
       int mailsTotal = Dispatch.call(mailsDispatcher, "Count").toInt();

       for(int k=1; k<=mailsTotal; k++){
		Dispatch mailDispatcher = Dispatch.call(mailsDispatcher, "Item", new Integer(k)).toDispatch();
		
		Dispatch mailAttachments = Dispatch.call(mailDispatcher, "Attachments")toDispatch();
		//pega o primeiro attachment do email
		Dispatch mailAttachment = Dispatch.call(mailAttachments, "Item", new Integer(0)).toDispatch();

		//pega o nome do arquivo
		String nome = Dispatch.call(mailAttachment, "FileName").toString();

		//salva o arquivo em algum lugar no FS
		Dispatch.call(mailAttachment, "SaveAsFile", "C:\Temp");

       }
    }

}

[]'s

J

Muito obrigado wchevreuil,

Esta mesma estrutura pode ser usada para o MS Exchange (servidor de e-mails)? E quanto aos demais MTA’s como o PostFix e o SendMail, ambos para Linux?

B

juceliohv:
Muito obrigado wchevreuil,

Esta mesma estrutura pode ser usada para o MS Exchange (servidor de e-mails)? E quanto aos demais MTA’s como o PostFix e o SendMail, ambos para Linux?

O programa que lhe foi passado funciona apenas em Windows, devido ao uso da biblioteca Jacob. Estude sobre IMAP e POP3 para pegar os emails nesses outros ambientes.

W

Sim, o JACOB só serve pra vc conseguir interagir com componentes Activex disponíveis no Windows, na máquina onde o programa java estiver executando. Se vc quiser ler emails diretamente do servidor de email, vc deve usar a JavaMail API.

[]'s

Criado 24 de setembro de 2010
Ultima resposta 28 de set. de 2010
Respostas 4
Participantes 3