Como baixar arquivo anexo de um servidor de email?

0 respostas
Thiago_de_Paula_Bese

Pessoal, bom dia.

Tenho uma demanda para desenvolver uma simples aplicação de email (no caso esta aplicação vai apenas ler os emails que estão na caixa de entrada). Pesquisei na internet e achei alguns exemplos do tipo, mas não consegui achar nada que fale em baixar o arquivo anexo do servidor. Tenho uma aplicação simples de exemplo que fiz aqui.

Segue:

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.mail.*;
import javax.mail.internet.InternetAddress;


public class ReadMultipartMail 
{
    public static void main(String[] args) throws NoSuchProviderException, MessagingException, IOException
    {
        String host = "pop.dzyon.com";
        String username = "[email removido]";
        String password = "senha";
        
        Properties properties = System.getProperties();
        
        Session session = Session.getDefaultInstance(properties);
        
        Store store = session.getStore("pop3");
        
        store.connect(host, username, password);
        
        Folder folder = store.getFolder("inbox");
        
        if(!folder.exists())
        {
            System.out.println("no INBOX");
            System.exit(0);
        }
        
        folder.open(Folder.READ_WRITE);
        
        Message[] msg = folder.getMessages();
        
        for (int i = 0; i < msg.length; i++)
        {
            System.out.println("--------------------MESSAGE " + (i+1) + "--------------------------");
            
            String from = InternetAddress.toString(msg[i].getFrom());
            
            if(from != null)
            {
                System.out.println("From: " + from);
            }
            
            String replyTo = InternetAddress.toString(msg[i].getReplyTo());
            
            if(replyTo != null)
            {
                System.out.println("Reply-to: " + replyTo);
            }
            
            String to = InternetAddress.toString(msg[i].getRecipients(Message.RecipientType.TO));
            
            if(to != null)
            {
                System.out.println("To: " + to);
            }
            
            String subject = msg[i].getSubject();
            
            if(subject != null)
            {
                System.out.println("Subject: " + subject);
            }
            
            Date sent = msg[i].getSentDate();
            SimpleDateFormat formataData = new SimpleDateFormat("dd/MM/yyyy");
            if(sent != null)
            {
                
                System.out.println("Sent: " + formataData.format(sent));
            }
            
            System.out.println();
            System.out.println("Message : ");
            
            Multipart multipart = (Multipart) msg[i].getContent();
            
            for (int x = 0; x < multipart.getCount(); x++)
            {
                BodyPart bodyPart = multipart.getBodyPart(x);
                
                String disposition = bodyPart.getDisposition();
                
                if (disposition != null && (disposition.equals(BodyPart.ATTACHMENT))) 
                {
                    
                    System.out.println("Mail have some attachment : ");
                    
                    DataHandler handler = bodyPart.getDataHandler();
                    
                    System.out.println("file name : " + handler.getName());
                }
                else
                {
                    System.out.println("Conteúdo: " + bodyPart.getContent());   
                }
            }
            
            System.out.println();
            
        }
         folder.close(true);
         store.close();
    }
}

Executando a aplicação, tenho este resultado:

--------------------MESSAGE 1--------------------------
From: Tatiane Freitas - Dzyon SP [email removido]
Reply-to: Tatiane Freitas - Dzyon SP [email removido]
To: [email removido]
Subject: Planilha VT
Sent: 30/05/2012

Message :
Conteúdo: javax.mail.internet.MimeMultipart@ea443f
Mail have some attachment :
file name : =?iso-8859-1?Q?Relat=F3rio_de_gastos=283=29.xls?=

--------------------MESSAGE 2--------------------------
From: Tatiane Freitas - Dzyon SP [email removido]
Reply-to: Tatiane Freitas - Dzyon SP [email removido]
To: [email removido]
Subject: Re: Relatório de Gastos Junho/12
Sent: 04/07/2012

Message :
Conteúdo: javax.mail.internet.MimeMultipart@b2fb1e
Conteúdo: com.sun.mail.util.BASE64DecoderStream@8497f6
Conteúdo: com.sun.mail.util.BASE64DecoderStream@114a306
Conteúdo: com.sun.mail.util.BASE64DecoderStream@1db0da1

--------------------MESSAGE 3--------------------------
From: Thiago de Paula Beserra [email removido]
Reply-to: Thiago de Paula Beserra [email removido]
To: [email removido]
Subject: Anexo arquivo xml
Sent: 23/11/2012

Message :
Conteúdo: javax.mail.internet.MimeMultipart@5bd978
Mail have some attachment :
file name : envio.xml

--------------------MESSAGE 4--------------------------
From: Thiago de Paula Beserra [email removido]
Reply-to: Thiago de Paula Beserra [email removido]
To: [email removido]
Subject: anexo 2 arquivo xml
Sent: 23/11/2012

Message :
Conteúdo: javax.mail.internet.MimeMultipart@b34b1
Mail have some attachment :
file name : param.xml

Olhando o resultado, consigo ver o nome do arquivo que tenho em anexo no email. Mas como baixar este arquivo? Outra dúvida que tenho é sobre o conteudo do texto.
Este aparece com um conteúdo estranho pra mim.

Exemplo: Conteúdo: javax.mail.internet.MimeMultipart@5bd978

Tenho que converter alguma coisa para visualizar o conteudo??? Lembrando que estou pegando emails em um servidor POP3.

Desculpa pela ignorancia pessoal, mas a unica coisa que eu tinha mesmo que fazer de imediato é conseguir baixar o arquivo que vem em anexo no email.

Agradeço qualquer dica ou ajuda desde já! :smiley:

Criado 26 de novembro de 2012
Respostas 0
Participantes 1