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
pix
Janeiro 26, 2012, 9:47am
#10
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.
pix
Fevereiro 16, 2012, 12:29pm
#12
Tentei trocar pelo IP e ainda continua vindo xml zerados, será que pode ser problema no servidor de email?