Erro acessar e-mail - IMAP

Bom dia amigos,

Estou tentando acessar um determinado e-mail configurando-o com o padrão IMAP e está dando o seguinte erro.


java.net.UnknownHostException: pop.labsoft.com.br

Segue a minha Classe Constante


package br.com.mylims.auxiliares;

public class Constantes {

    
        public static final String PASTA_XML = "\\data\\data\\br.com.mylims\\files\\"; //pasta onde o XML será salvo em seu computador
        public static final String IMAP = "imap"; 
        public static final String HOST = "pop.labsoft.com.br";//Seu host; 
        public static final int PORTA = 587;//Sua porta; 
        public static final String ARQUIVO_MSG = "coleta1.xml";//Arquivo de mensagens do seu e-mail; 
        public static final String LOGIN = "teste@labsoft.com.br";//Seu login; 
        public static final String SENHA = "minhasenha";//Sua senha; 
        public static final String PASTA_PRINCIPAL = "Inbox"; 
        public static final String PASTA_BACKUP = "";//pasta caso você queira copiar os e-mails da principal como fiz; 
        
}

Estou seguindo este link http://wiki.locaweb.com.br/pt-br/Configurando_Smartphone_com_Android_via_IMAP para configurar.

Alguém já passou por isto ?

Carinha, não sei bem o que você está tentando fazer, porque a única coisa que você está mostrando aqui são as constantes utilizadas e como se configura um servidor num celular android.

Pontos suspeitos:
O protocolo que você está querendo utilizar está correto? O servidor que está utilizando , suspeitosamente chamado de “pop”.labsoft.com.br suporta IMAP?
Você está especificando corretamente, quando se utiliza de suas Constantes, a chamada a este servidor?

Em resumo: mostre o código da chamada ao servidor de e-mail, e não sua classe de constantes, porque ela não significa nada.

Fala irmão,

Valeu pela força

Seguem as classes.


package br.com.mylims.auxiliares;

import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Properties;


import javax.mail.AuthenticationFailedException;
import javax.mail.Flags;
import javax.mail.Folder;
import javax.mail.FolderClosedException;
import javax.mail.FolderNotFoundException;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.NoSuchProviderException;
import javax.mail.Part;
import javax.mail.ReadOnlyFolderException;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.StoreClosedException;
import javax.mail.URLName;
import javax.mail.internet.InternetAddress;

import android.app.Activity;
import android.util.Log;



public class ReadEmails extends Activity {
	private Store store = null;
	private Folder folder = null;
	private Message message = null;
	private Message[] messages = null;
	private Object msgObj = null;
	private String sender = null;
	@SuppressWarnings("unused")
	private String subject = null;
	private Multipart multipart = null;
	private Part part = null;
	private String contentType = null;

	
	private static final String CATEGORIA = "coleta";
	
	public ReadEmails() throws MessagingException {
		processMail();
	}

	/**
	 * Processa o e-mail
	 * @throws MessagingException 
	 * 
	 */
	public boolean processMail() throws MessagingException  {
		
			store = conexaoServidorEMail();
			folder = getPastaCaixaEntrada(store);
			messages = folder.getMessages();

			try {
				
			for (int messageNumber = 0; messageNumber < messages.length; messageNumber++) {
				message = messages[messageNumber];
				msgObj = message.getContent();

				// Determine o tipo de email
				if (msgObj instanceof Multipart) {

					subject = 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();
					}
					// Get the subject information
					subject = message.getSubject();
				}
			}
			// Fecha a pasta
			folder.close(true);
			// Histório de mensagens
			store.close();
			System.out.println("Terminado");
			
			return true;
			
		} catch (AuthenticationFailedException e) {
			store.close();
			//e.printStackTrace();
			Log.i(CATEGORIA, "AUT" + e);
			return false;
		} catch (FolderClosedException e) {
			store.close();
			e.printStackTrace();
			return false;
		} catch (FolderNotFoundException e) {
			store.close();
			e.printStackTrace();
			return false;
		} catch (NoSuchProviderException e) {
			store.close();
			e.printStackTrace();
			return false;
		} catch (ReadOnlyFolderException e) {
			store.close();
			e.printStackTrace();
			return false;
		} catch (StoreClosedException e) {
			store.close();
			e.printStackTrace();
			return false;
		} catch (Exception e) {
			Log.i(CATEGORIA, "MENSAGEM" + e);
			store.close();
			//e.printStackTrace();
			return false;
		}
		
	}

	/**
	 * @param i
	 * @param fileName
	 * @return
	 * @throws MessagingException
	 * @throws IOException
	 */
	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;
	}

	/**
	 * @param messages
	 * @param i
	 * @throws MessagingException
	 */
	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);
	}

	/**
	 * Envia os arquivos da pasta principal para a pasta reserva
	 * 
	 * @param store
	 * @param folder
	 * @param messages
	 * @throws MessagingException
	 */
	private boolean enviaArquivoPastaAuxiliar(Store store, Folder folder, Message[] messages, int i) throws MessagingException {
		
		Folder folderAux;
		folderAux = getPastaAuxiliar(store);
		folder.copyMessages(messages, folderAux);
		folderAux.close(true);
		excluirMensagemInbox(messages, i);
		
		return false;
	}

	/**
	 * Recebe o anexo e valida se é um XML, se sim ele salva o arquivo em uma
	 * pasta
	 * 
	 * @param part
	 * @return
	 * @throws MessagingException
	 * @throws IOException
	 */
	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);
					enviaArquivoPastaAuxiliar(store, folder, messages, i);
				}
			}
		}
		return fileName;
	}

	/**
	 * Salva o arquivo em uma pasta
	 * 
	 * @param part
	 * @throws MessagingException
	 * @throws IOException
	 */
	private 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);
			}
		}
	}

	/**
	 * Acessa a Caixa de Entrada (Inbox)
	 * 
	 * @param store
	 * @return
	 * @throws MessagingException
	 */
	private Folder getPastaCaixaEntrada(Store store) throws MessagingException {
		Folder folder;
		folder = store.getFolder(Constantes.PASTA_PRINCIPAL);
		folder.open(Folder.READ_WRITE);
		return folder;
	}

	/**
	 * Acessa a Pasta Auxiliar
	 * 
	 * @param store
	 * @return
	 * @throws MessagingException
	 */
	private Folder getPastaAuxiliar(Store store) throws MessagingException {
		Folder folder;
		folder = store.getFolder(Constantes.PASTA_BACKUP);
		folder.open(Folder.READ_WRITE);
		return folder;
	}

	/**
	 * Autenticação e conexão com o Servidor de e-mail
	 * 
	 * @return
	 * @throws NoSuchProviderException
	 * @throws MessagingException
	 */
	private Store conexaoServidorEMail() throws NoSuchProviderException, MessagingException {
		Session session;
		Store store;
		Properties prop = new Properties();
		session = Session.getInstance(prop);
		URLName url = new URLName(Constantes.IMAP, Constantes.HOST, Constantes.PORTA, Constantes.ARQUIVO_MSG, Constantes.LOGIN, Constantes.SENHA);
		store = session.getStore(url);
		store.connect();

		return store;
	}
}

Chamada do método na ação do botão.


public void onClick(View v) {
				// TODO Auto-generated method stub
				
				try {
					
					ReadEmails readMail = new ReadEmails();
					
					if (readMail.processMail()) {
						Log.i(CATEGORIA, "ok");
					} else {
						Log.i(CATEGORIA, "correto");
					}
				} catch (MessagingException e) {
					// TODO Auto-generated catch block
					Log.i(CATEGORIA, "errado: " + e);
				}

                        }
		});

Alterei as portas para 143 e 997 e dão o mesmo erro

No caso não são as portas o problema, o erro é que ele não está achando o host.

No exemplo que você leu no guj: http://www.guj.com.br/java/142839-acessar-o-anexo-de-um-e-mail-com-javamail-resolvido/2#771656 Eu estava acessando um Lotus Notes da IBM, tanto que algumas msgs abaixo deixaram como fazer isso para o gmail.

Tenta fazer esse exemplo e vê se lê: http://www.lucianosilva.com/2009/02/23/lendo-seus-e-mails-com-java/

Sobre esse projeto que fiz acabei colocando um tutorial no Blog, tem o código completo lá, vê se ele funciona, depois adapte para seu projeto: http://javawora.blogspot.com/2009/10/recebendo-e-mails-e-anexos-com-javamail.html

Boa Sorte 8)

Olá

Se usar IP ao invés do nome não funciona?

Fiz os exemplos mas está dando o mesmo erro.

Pode ser algum problema de permissão no AndroidManifest?

Olá furutani,

Testei pelo IP e não foi.

A parte de acesso aos e-mails eu consegui.

Tem que colocar a permissão de internet no maldito AndroidManifest.

Agora falta a parte de baixar os anexos.

Alguém já fez isto para android?

Att

Aqui está dando quase tudo certo, um problema que tenho encontrado e não consigo solucionar é que existem vários arquivos que são baixados com tamanho ZERO

Será que é do servidor de email?

Daniel Mafinski Biz

Cara, caso esteja usando o nome troque pelo IP.

Tentei trocar pelo IP e ainda continua vindo xml zerados, será que pode ser problema no servidor de email?