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)