Pessoal, boa tarde.
Estou com uma aplicação que lê os emails de um determinado servidor. (gmail, hotmail, etc). Blza, até a leitura está tranquilo. Entretanto, estou com problemas para salvar o anexo que está na mensagem de email. Tenho uma aplicação que estou estudando aqui, tentei procurar o erro, mas não encontrei.
Quando executo a aplicação de exemplo, roda normalmente, sem erros, porém, os arquivos não são salvos na pasta fixa no computador.
Vou postar o projetinho:
package model;
public class Constantes {
public static final String PASTA_XML = "c://xml//";
public static final String IMAP = "pop3";
//public static final String HOST = "pop3.uol.com.br";
public static final String HOST = "pop.dzyon.com";
public static final int PORTA = 110;
public static final String ARQUIVO_MSG = "";
public static final String LOGIN = "usuario";
//
public static final String SENHA = "senha";//
public static final String PASTA_PRINCIPAL = "Inbox";
public static final String PASTA_BACKUP = "Trash";
}
package model;
import java.io.*;
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
public class ReadEmails
{
private Store store = null;
private Folder folder = null;
private Message message = null;
private Message[] messages = null;
private Object msgObj = null;
private String sender = null;
private Multipart multipart = null;
private Part part = null;
private String contentType = null;
public ReadEmails() throws MessagingException {
processMail();
}
public void processMail() throws MessagingException {
try {
store = conexaoServidorEMail();
folder = getPastaCaixaEntrada(store);
messages = folder.getMessages();
for (int messageNumber = 0; messageNumber < messages.length; messageNumber++) {
message = messages[messageNumber];
msgObj = message.getContent();
// Determine o tipo de email
if (msgObj instanceof Multipart) {
message.getSubject();
multipart = (Multipart) message.getContent();
for (int i = 0; i < multipart.getCount(); i++) {
part = multipart.getBodyPart(i);
// pegando um tipo do conteúdo
contentType = part.getContentType();
String fileName2 = part.getFileName();
if (fileName2 != null) {
System.out.println(messageNumber + " " + fileName2
+ " | " + message.getSubject());
}
fileName2 = null;
// Tela do conteúdo
if (contentType.startsWith("text/plain"))
{
}
else {
String fileName = part.getFileName();
@SuppressWarnings("unused")
Message[] mensagensXML = separaMensagensXML(i,
fileName);
}
}
} else {
sender = ((InternetAddress) message.getFrom()[0])
.getPersonal();
if (sender == null) {
sender = ((InternetAddress) message.getFrom()[0])
.getAddress();
}
message.getSubject();
}
}
// Fecha a pasta
folder.close(true);
// Histório de mensagens
store.close();
System.out.println("Terminado");
} catch (Exception e) {
System.out.println(e.getMessage());
store.close();
e.printStackTrace();
}
}
private Message[] separaMensagensXML(int i, String fileName)
throws MessagingException, IOException {
Message[] mensagensXML = folder.getMessages();
if (fileName != null) {
int tamanhoString = fileName.length() - 3;
for (int a = 0; a < messages.length; a++) {
if (fileName.substring(tamanhoString).equals("xml")) {
mensagensXML[a] = message;
}
}
}
// Recebendo o nome do arquivo
@SuppressWarnings("unused")
String fileName2 = validarXML(part, store, folder, mensagensXML, i);
return mensagensXML;
}
private void excluirMensagemInbox(Message[] messages, int i)
throws MessagingException {
@SuppressWarnings("unused")
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
messages[i].setFlag(Flags.Flag.DELETED, true);
}
private boolean enviaArquivoPastaAuxiliar(Store store, Folder folder,
Message[] messages, int i) throws MessagingException {
Folder folderAux;
System.out.println(folder);
folderAux = getPastaAuxiliar(store);
folder.copyMessages(messages, folderAux);
folderAux.close(true);
excluirMensagemInbox(messages, i);
return true;
}
private String validarXML(Part part, Store store, Folder folder,
Message[] messages, int i) throws MessagingException, IOException
{
String fileName = part.getFileName();
if (fileName != null) {
int tamanhoString = fileName.length() - 3;
if (!fileName.substring(tamanhoString).equals("xml")) {
return fileName;
} else {
String disposition = part.getDisposition();
if ((disposition != null)
&& ((disposition.equals(Part.ATTACHMENT) || (disposition
.equals(Part.INLINE))))) {
salvarArquivo(part);
// pedro enviaArquivoPastaAuxiliar(store, folder, messages,
// i);
excluirMensagemInbox(messages, i);
}
}
}
return fileName;
}
public void salvarArquivo(Part part) throws IOException,
MessagingException
{
FileOutputStream fileOutputStream = new FileOutputStream(
Constantes.PASTA_XML + part.getFileName());
Object obj = part.getContent();
if (obj instanceof InputStream)
{
InputStream is = (InputStream) obj;
int ch = -1;
while ((ch = is.read()) != -1)
{
fileOutputStream.write(ch);
}
}
}
public Folder getPastaCaixaEntrada(Store store) throws MessagingException {
Folder folder;
folder = store.getFolder(Constantes.PASTA_PRINCIPAL);
System.out.println(folder);
folder.open(Folder.READ_WRITE);
System.out.println(folder);
return folder;
}
public Folder getPastaAuxiliar(Store store) throws MessagingException {
Folder folder;
folder = store.getFolder(Constantes.PASTA_BACKUP);
System.out.println(folder);
folder.open(Folder.READ_WRITE);
System.out.println(folder);
return folder;
}
public Store conexaoServidorEMail()
{
Session session;
Store store = null;
Properties prop = new Properties();
prop.put("mail.pop3.disabletop", true);
session = Session.getInstance(prop);
URLName url = new URLName(Constantes.IMAP, Constantes.HOST,
Constantes.PORTA, Constantes.ARQUIVO_MSG, Constantes.LOGIN,
Constantes.SENHA);
try {
store = session.getStore(url);
store.connect();
System.out.println("Conexão estabelecida!");
} catch (Exception e) {
System.out.println(e.getMessage());
}
return store;
}
}
package model;
import javax.mail.Folder;
import javax.mail.MessagingException;
import javax.mail.Store;
public class Main
{
public static void main(String[] args) throws MessagingException
{
new ReadEmails();
}
}
:?:
Já estudei esta aplicação por horas, e não encontrei o porque deste anexo não estar sendo salvo na pasta.
Desculpa se não perguntei direito pessoal, mas resumindo, meu sonho…hehe… é salvar o anexo do email para o computador.
[b]Qualquer dica, ajuda, agradeço muito[i]