[RESOLVIDO] Enviar/Receber Email Android - Api JavaMail

8 respostas
L

Fala rapaziada,

Problemas para receber/enviar email na minha app em android estou usando a api JavaMail.
São duas classes separadas uma para enviar e outra para receber que instancio em eventos em dois botões na minha main.

O erro é que não encontrou as classes da api JavaMai,l detalhe, os jars estão no projeto, alguém já passou por isso?

O que pode estar acontecendo?

ps: Em um projeto Java ambas funcionam perfeitamente.

Att.
Leandrooooo

8 Respostas

Ataxexe

Como você está tentando enviar? Você sabe que não é possível executar operações de rede pela Thread principal? (Você precisa usar uma AsyncTask pra isso.)

L

Até então ainda não utilizei thread ou AsyncTask. Apenas um metodo que chamo no onClick do botão.

Apenas testes para verificar se envio ou recebo email, depois ia estar melhorando o código e tratando as exceções.

Estou fazendo errado? tenho que utlizar uma AsyncTask?

Ataxexe

leandrooooo:
Até então ainda não utilizei thread ou AsyncTask. Apenas um metodo que chamo no onClick do botão.

Apenas testes para verificar se envio ou recebo email, depois ia estar melhorando o código e tratando as exceções.

Estou fazendo errado? tenho que utlizar uma AsyncTask?

Você precisa usar uma AsyncTask. O Android não permite operações de rede na Thread principal do app.

Sugiro que dê uma olhada na documentação:

https://developer.android.com/reference/android/os/AsyncTask.html

L

Ataxexe, entendi e tentei fazer mais não está dando certo.
Na Activity criar a classe enviarEmail que extends AsyncTask e no metodo doInBackground estou executando a classe que enviar o e-mail, mais esta acontecendo erros. Vou postar a classe que envia e-mail e o LogCat. Se puder, me ajudar! Obrigado.

public class EnviaEmails{ 
	
	public void enviarEmailPedidosAberto() {
		try{
			String user = "[email removido]";
			String pass = "teste";
			String dest = "[email removido]";

			Properties props = System.getProperties();
			props.put("mail.smtp.auth", "true");
			
			Authenticator auth = new Autenticador(user,pass);
			
			Session session = Session.getDefaultInstance(props, auth);
			MimeMessage msg = new MimeMessage(session);
			msg.setFrom(new InternetAddress(user));
			msg.setRecipient(javax.mail.Message.RecipientType.TO, new InternetAddress(dest));
			msg.setSentDate(new Date());
			msg.setSubject("EMAIL ANDROID");
			MimeBodyPart textPart = new MimeBodyPart();
			textPart.setContent("TESTE ENVIO EMAIL", "text/html");
			Multipart mp = new MimeMultipart();
			mp.addBodyPart(textPart);
			msg.setContent(mp);
			msg.saveChanges();
			Transport transport = session.getTransport("smtp");
			transport.connect("smtp.terra.com.br", 587, user, pass);
			transport.sendMessage(msg, msg.getAllRecipients());
			transport.close();

		}catch(Exception e){
			e.printStackTrace();
		}
	}

	public class Autenticador extends Authenticator{
		
		private String user;
		private String password;

		public Autenticador(String user, String password){
			this.user = user;
			this.password = password;
		}
		
		protected PasswordAuthentication getPasswordAuthentication(){
			return new PasswordAuthentication(user, password);
		}
		
	}
}

LogCat

09-09 17:12:33.636: E/AsyncTask(16361): onPreExecute
09-09 17:12:33.644: E/AsyncTask(16361): doInBackground
09-09 17:12:33.644: W/dalvikvm(16361): Unable to resolve superclass of Lbr/com/afv/auxiliares/EnviaEmails$Autenticador; (370)
09-09 17:12:33.644: W/dalvikvm(16361): Link of class 'Lbr/com/afv/auxiliares/EnviaEmails$Autenticador;' failed
09-09 17:12:33.644: E/dalvikvm(16361): Could not find class 'br.com.afv.jndistribuidora.auxiliares.EnviaEmails$Autenticador', referenced from method br.com.afv.jndistribuidora.auxiliares.EnviaEmails.enviarEmailPedidosAberto
09-09 17:12:33.644: W/dalvikvm(16361): VFY: unable to resolve new-instance 219 (Lbr/com/afv/auxiliares/EnviaEmails$Autenticador;) in Lbr/com/afv/auxiliares/EnviaEmails;
09-09 17:12:33.644: D/dalvikvm(16361): VFY: replacing opcode 0x22 at 0x0011
09-09 17:12:33.644: W/dalvikvm(16361): Unable to resolve superclass of Lbr/com/afv/auxiliares/EnviaEmails$Autenticador; (370)
09-09 17:12:33.644: W/dalvikvm(16361): Link of class 'Lbr/com/afv/auxiliares/EnviaEmails$Autenticador;' failed
09-09 17:12:33.651: D/dalvikvm(16361): DexOpt: unable to opt direct call 0x0330 at 0x13 in Lbr/com/afv/auxiliares/EnviaEmails;.enviarEmailPedidosAberto
09-09 17:12:33.651: D/dalvikvm(16361): DexOpt: unable to opt direct call 0x073d at 0x1c in Lbr/com/afv/auxiliares/EnviaEmails;.enviarEmailPedidosAberto
09-09 17:12:33.651: D/dalvikvm(16361): DexOpt: unable to opt direct call 0x0738 at 0x21 in Lbr/com/afv/auxiliares/EnviaEmails;.enviarEmailPedidosAberto
09-09 17:12:33.651: I/dalvikvm(16361): DexOpt: unable to optimize static field ref 0x057f at 0x27 in Lbr/com/afv/auxiliares/EnviaEmails;.enviarEmailPedidosAberto
09-09 17:12:33.651: D/dalvikvm(16361): DexOpt: unable to opt direct call 0x0738 at 0x2b in Lbr/com/afv/auxiliares/EnviaEmails;.enviarEmailPedidosAberto
09-09 17:12:33.651: D/dalvikvm(16361): DexOpt: unable to opt direct call 0x073b at 0x40 in Lbr/com/afv/auxiliares/EnviaEmails;.enviarEmailPedidosAberto
09-09 17:12:33.651: D/dalvikvm(16361): DexOpt: unable to opt direct call 0x0745 at 0x4c in Lbr/com/afv/auxiliares/EnviaEmails;.enviarEmailPedidosAberto
09-09 17:12:33.651: W/dalvikvm(16361): threadid=12: thread exiting with uncaught exception (group=0x40bcd1f8)
09-09 17:12:33.651: E/AndroidRuntime(16361): FATAL EXCEPTION: AsyncTask #1
09-09 17:12:33.651: E/AndroidRuntime(16361): java.lang.RuntimeException: An error occured while executing doInBackground()
09-09 17:12:33.651: E/AndroidRuntime(16361): at android.os.AsyncTask$3.done(AsyncTask.java:278)
09-09 17:12:33.651: E/AndroidRuntime(16361): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
09-09 17:12:33.651: E/AndroidRuntime(16361): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
09-09 17:12:33.651: E/AndroidRuntime(16361): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
09-09 17:12:33.651: E/AndroidRuntime(16361): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
09-09 17:12:33.651: E/AndroidRuntime(16361): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
09-09 17:12:33.651: E/AndroidRuntime(16361): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
09-09 17:12:33.651: E/AndroidRuntime(16361): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
09-09 17:12:33.651: E/AndroidRuntime(16361): at java.lang.Thread.run(Thread.java:856)
09-09 17:12:33.651: E/AndroidRuntime(16361): Caused by: java.lang.NoClassDefFoundError: br.com.afv.jndistribuidora.auxiliares.EnviaEmails$Autenticador
09-09 17:12:33.651: E/AndroidRuntime(16361): at br.com.afv.jndistribuidora.auxiliares.EnviaEmails.enviarEmailPedidosAberto(EnviaEmails.java:30)
09-09 17:12:33.651: E/AndroidRuntime(16361): at br.com.afv.jndistribuidora.activity.EmailActivity$LongOperation.doInBackground(EmailActivity.java:104)
09-09 17:12:33.651: E/AndroidRuntime(16361): at br.com.afv.jndistribuidora.activity.EmailActivity$LongOperation.doInBackground(EmailActivity.java:1)
09-09 17:12:33.651: E/AndroidRuntime(16361): at android.os.AsyncTask$2.call(AsyncTask.java:264)
09-09 17:12:33.651: E/AndroidRuntime(16361): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
09-09 17:12:33.651: E/AndroidRuntime(16361): ... 5 more
09-09 17:12:40.136: D/OpenGLRenderer(16361): Flushing caches (mode 0)

Valew.
Leandrooooo

L

Ninguém???

Tô achando que o problemas está na libs (jars) na javamail, pois, não está encontrando a classes.
Ninguém passou por isso?

Leandrooooo

L

Galera, bom dia,

Consegui dar mais um passo, estava add todos os jar do java mail no projeto android. Ai dava o erro acima.

Agora estou com outro problema, esse erro acontece na hora de transport.send()/transport.sendMessage(), peço a ajuda de vocês.
Segue a msg de erro no logcat.

09-11 08:42:06.961: E/ERRO(25682):          IOException while sending message

09-11 08:42:06.961: W/System.err(25682):    javax.mail.MessagingException: IOException while sending message;

09-11 08:42:06.961: W/System.err(25682):    nested exception is:

09-11 08:42:06.961: W/System.err(25682): 	javax.activation.UnsupportedDataTypeException: no object DCH for MIME type multipart/mixed;

09-11 08:42:06.961: W/System.err(25682): 	boundary="----=_Part_0_1094117768.1378899722711"

09-11 08:42:06.969: W/System.err(25682): 	at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1167)

09-11 08:42:06.969: W/System.err(25682): 	at javax.mail.Transport.send0(Transport.java:195)

09-11 08:42:06.969: W/System.err(25682): 	at javax.mail.Transport.send(Transport.java:124)

Obrigado.

Ataxexe

Acredito que isso está acontecendo porque o JavaMail não encontrou o arquivo de configuração. Veja se os arquivos .default dentro do META-INF do activation.jar estão indo pra sua aplicação.

L

Ataxexe, valeu.

Criado 9 de setembro de 2013
Ultima resposta 12 de set. de 2013
Respostas 8
Participantes 2