Listar Anexos de email

0 respostas
side_bmx

Pessoal estou com o seguinte problema:
primeiramente preciso listar o nome de todos os anexos de uma conta de email,so que da unica maneira que eu
consegui fazer,demora muito,parace que esta jogando os anexos na memoria dai esta imprimindo o nome,gostaria da ajuda de vcs para resolver,segue o codigo…

package mail;


import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.text.ParseException;
import java.util.Properties;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Part;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.internet.ContentType;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import java.util.*;

public class Leremail{
	static int attanum = 0;
	static int ind=0;
	static int id;
	static int level=0 ;
	static String[]  a= new String[1000];
	public static Message[] recebe(String popServer, String popUser , String popPassword) throws IllegalStateException
	
	{
		
		Store store=null;
		Folder folder=null;
		
		try
		{
			// -- Get hold of the default session --
			Properties props = System.getProperties();
			Session session = Session.getDefaultInstance(props, null);
			
			// conecta com o servidor pop
			store = session.getStore("pop3");
			store.connect(popServer, popUser, popPassword);
			
			//verifica se foi identificada uma pasta padrao
			folder = store.getDefaultFolder();
			if (folder == null) throw new Exception("No default folder");
			
			// torna a caixa de entrada a pasta padrao
			folder = folder.getFolder("INBOX");
			if (folder == null) throw new Exception("No POP3 INBOX");
			
			// abre a caixa de entrada para leitura e escrita
			folder.open(Folder.READ_WRITE);
			
			
			//captura as mensagens da pasta
			Message[] msgs = folder.getMessages();
			
			
			int a= folder.getMessageCount();
			{
				
				
				
				System.out.println("Conectado...");
				for(int n=0;n<a;n++)
					salvaAnexo(msgs[n]);
				
				
				
				
			}
			return msgs;
		}
		catch (Exception ex)
		{
			ex.printStackTrace();
		}
		finally
		{
			// -- Close down nicely --
			try
			{
				if (folder!=null) folder.close(false);
				if (store!=null) store.close();
			}
			catch (Exception ex2) {ex2.printStackTrace();}
		}
		
		
		
		return null;
	}
	
	public static void salvaAnexo(Part p ) throws Exception {
		
		
		
		String ct = p.getContentType();
		
		
		String filename = p.getFileName();
		
		if (filename != null)
		{
			System.out.println("ANEXO: " +filename);
			
		}  if (p.isMimeType("multipart/*")) {
			Multipart mp = (Multipart)p.getContent();
			level =level++;
			
			int count = mp.getCount();
			for (int i = 0; i >< count; i++)
				salvaAnexo(mp.getBodyPart(i));
			
			
			
			level--;
		} else if (p.isMimeType("message/rfc822")) {
			level++;
			salvaAnexo((Part)p.getContent());
			level--;
		} else {
			
			/*
			 * If we actually want to see the data, and it's not a
			 * MIME type we know, fetch it and check its Java type.
			 */
			Object o = (Object[]) p.getContent();
			if (o instanceof String) {
				
			} else if (o instanceof InputStream) {
				
				InputStream is = (InputStream)o ;
			} else {
				System.out.println("This is an unknown type");
				System.out.println("---------------------------");
			}
			
		}
		
		String disp = p.getDisposition();
		// many mailers don't include a Content-Disposition
		if (disp == null || disp.equalsIgnoreCase(Part.ATTACHMENT)) {
			if (filename == null){
				
				attanum++;
				filename = "Anexo";
				return;
			}else{
				
				a[ind]= filename;
				ind++;
				
				
				/*try {
				 File f = new File("c:/a/"+filename);
				 ((MimeBodyPart)p).saveFile(f);
				 } catch (IOException ex) {
				 System.out.println("Falha ao salvar o anexo: " + ex);
				 }
				 //System.out.println("---------------------------");
				  */  }
		}
	}
	
	public static void main(String args[])
	{
		
		String popServer = " ";
		String popUser = " ";
		String popPassword = "";
		String from=" ";
		
		//Leremail email= new Leremail();
		//email.recebe(popServer, popUser, popPassword);
	}
	
	public String[] teste()
	{
		
		return a;
	}
}
e quando eu tento fazer o download,ou  listar os nomes ele faz de alguns,5 ou 6 dependendo do tamanho dai depois disso da o seguinte erro:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

at java.util.Arrays.copyOf(Arrays.java:2786)

at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:71)

at com.sun.mail.pop3.Protocol.multilineCommand(Protocol.java:407)

at com.sun.mail.pop3.Protocol.retr(Protocol.java:276)

at com.sun.mail.pop3.POP3Message.getContentStream(POP3Message.java:145)

at javax.mail.internet.MimePartDataSource.getInputStream(MimePartDataSource.java:109)

at javax.mail.internet.MimeMultipart.parsebm(MimeMultipart.java:726)

at javax.mail.internet.MimeMultipart.parse(MimeMultipart.java:466)

at javax.mail.internet.MimeMultipart.getCount(MimeMultipart.java:242)

at mail.Leremail.salvaAnexo(Leremail.java:116)

at mail.Leremail.recebe(Leremail.java:71)

at Mail.Main.main(Main.java:23)
Criado 24 de dezembro de 2008
Respostas 0
Participantes 1