Como criar um aplicativo Android que envia emails

aplicacoes_email_android
Hoje vou ensinar como você pode enviar emails através de um app Android.

Diversos apps Android que desenvolvi para empresas como LG, Embelleze e Renault necessitavam que, após o usuário usar o app, que a interação fosse enviada por email para o próprio usuário e/ou para a empresa dona do app. Essa interação podia ser o preenchimento de um formulário, uma foto tirada com o app, as respostas de um quiz, etc.

Para exemplificar vamos criar uma tela que pede o nome e email de uma pessoa, e quando ela clicar em um botão no final do formulário, vamos enviar um email para ela. Se você nunca fez um app Android antes, recomendo a leitura deste ebook bem curtinho.

O layout XML da tela, chamada aqui de activity_main.xml, segue abaixo:

Isso deve gerar uma interface como abaixo:

Envio de Email
Envio de Email

Agora, na activity por trás dessa tela, chamada de MainActivity, temos de adicionar o código do evento de clique desse botão, que chama um método de envio de email.

O método enviarEmail chamado no clique do botão anterior deve ler os campos informados pelo usuário (nome e email), verificar se o smartphone está conectado na Internet (afinal, se não estiver vai dar erro no envio do email) e depois envia o dito cujo usando uma outra classe Java.

Note que me preocupei em realizar o envio do email em uma thread separada, como manda as guidelines do Android, evitando que a tela fique travada durante o envio, o que pode demorar alguns segundos dependendo da sua conexão com a Internet e do seu provedor de email.

Também incluí um comentário contendo o código para adicionar um anexo, que apenas precisa da URI de um arquivo armazenado no seu dispositivo.

A classe Mail utilizada no exemplo anterior foi encontrada na Internet há vários anos atrás e se mostrou bem confiável. Não lembro o quanto já customizei ela, mas de qualquer forma segue abaixo a versão mais atual que possuo, na íntegra (crie ela em outro arquivo de classe Java).

Aqui você deve prestar atenção no construtor vazio da classe Mail para colocar as configurações do seu servidor, como host SMTP, porta SMTP, se vai usar SSL, usuário e senha do seu email, etc.

Caso você nunca tenha enviado um email via software antes, é necessário que você se autentique em algum servidor de email com um usuário e senha válidos para poder enviar emails em seu nome. Ou seja, você vai ter de descobrir as configurações SMTP do seu provedor de email, além de saber o seu usuário (o próprio email) e senha (sua senha) para autenticação. São aquelas mesmas configurações usadas para o Outlook, sabe? Essas informações podem ser facilmente encontradas na Internet se seu email for Gmail, Hotmail, etc. Caso contrário consulte a empresa que lhe fornece emails (ex. Umbler) para obter as configurações de envio.

Para que essa classe funcione você vai precisar adicionar 3 bibliotecas Java ao seu projeto, que disponibilizo nesse zip. Basta descompactar e colocar os arquivos na pasta libs do seu projeto de app e pela IDE (normalmente o Android Studio) ir até a pasta libs e com o botão direito selecionar a opção ‘Add as library’ ou semelhante.

Add as Library
Add as Library

E para encerrar o que é necessário para que o código de envio de email funcione, falta criarmos o método isOnline() na MainActivity.java, responsável por testar a conexão com a Internet, pré-requisito para envio de email, conforme abaixo.

Como estamos mexendo com recursos de hardware como Internet, conexão, etc. precisamos pedir essas permissões em nosso AndroidManifest.xml como abaixo.

E se for usar anexos, não esqueça de adicionar também a permissão de leitura de arquivos.

Isso deve ser o suficiente para que você consiga enviar emails a partir desse app bem simples para o email informado no formulário a primeira tela. Esses códigos podem ser usados em apps maiores que fazem outras coisas e onde você apenas usará essa lógica para avisar alguém ou enviar uma mensagem. Daí a parte da criatividade eu deixo com você. 😉

Dica Avançada

Se seu app for utilizado por muitos usuários e/ou tiver um volume de envio de emails muito grande, procure usar soluções profissionais de SMTP Gateway como AWS SES, SendGrid e Mandrill. Jamais confie nos serviços de contas de email fornecido por provedores de hospedagem pois elas são configuradas para pequenos envios, jamais para envios em lote e rapidamente seu provedor irá bloquear a conta de email que seu app usa se enviar muitas mensagens por hora.

O SendGrid, líder neste segmento, inclusive tem um plano gratuito em que você pode enviar 100 mensagens por dia de graça.

* OBS: curtiu o post? Então dá uma olhada no meu livro de Android clicando no banner abaixo pra aprender a criar outros tantos apps incríveis!

Criando apps para empresas com Android

O que achou desse artigo?
[Total: 18 Média: 4.7]