Estou tentando criar um aplicativo de envio de email no Android.
Se eu usar:
Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
Isso iniciará o aplicativo Android embutido; Estou tentando enviar o email no botão, clique diretamente, sem usar este aplicativo.
Respostas:
Envie email no Android usando a API JavaMail usando autenticação do Gmail.
Etapas para criar um projeto de amostra:
MailSenderActivity.java:
GMailSender.java:
JSSEProvider.java:
ADD 3 frascos encontrados no link a seguir para seu projeto Android
Clique aqui - Como adicionar frascos externos
E não se esqueça de adicionar esta linha no seu manifesto:
Basta clicar no link abaixo para alterar o acesso à conta para aplicativos menos seguros https://www.google.com/settings/security/lesssecureapps
Execute o projeto e verifique a conta de email do destinatário. Felicidades!
PS E não esqueça que você não pode fazer operações de rede a partir de nenhuma atividade no android. Portanto, é recomendável usar
AsyncTask
ouIntentService
evitar a rede na exceção do encadeamento principal.Arquivos jar: https://code.google.com/archive/p/javamail-android/
fonte
Obrigado pela sua valiosa informação. Código está funcionando bem. Também consigo adicionar anexo adicionando o código a seguir.
fonte
filename
variável aqui, você deve especificar o caminho do arquivo. Por exemplo:String path = Environment.getExternalStorageDirectory().getPath() + "/temp_share.jpg";
Adicione esta linha no seu manifesto:
fonte
Você pode usar a API JavaMail para lidar com suas tarefas de email. A API JavaMail está disponível no pacote JavaEE e seu jar está disponível para download. Infelizmente, ele não pode ser usado diretamente em um aplicativo Android, pois usa componentes AWT que são completamente incompatíveis no Android.
Você pode encontrar a porta Android para JavaMail no seguinte local: http://code.google.com/p/javamail-android/
Adicione os jars ao seu aplicativo e use o método SMTP
fonte
eu.ocathain.com.sun.mail:javax.mail:1.5.2
Para ajudar aqueles que obtêm uma exceção de segmento de rede na principal com um destino SDK> 9. Isso está usando o código do droopie acima, mas funcionará de maneira semelhante para qualquer um.
Você pode usar o AsyncTask como abaixo
fonte
Código 100% funcional com demonstração Você também pode enviar vários emails usando esta resposta.
Faça o download do projeto AQUI
Passo 1: Baixe e-mail, ativação, arquivos jar adicionais e adicione na pasta libs do projeto no android studio. Adicionei uma captura de tela, veja abaixo Download link
Entre com o gmail ( usando o seu e-mail ) e ative o botão de alternância LINK
A maioria das pessoas esquece esse passo, espero que não.
Etapa 2: Depois de concluir este processo. Copie e cole essas classes no seu projeto.
GMail.java
SendMailTask.java
Etapa 3: Agora você pode alterar esta classe de acordo com suas necessidades e também pode enviar várias mensagens usando essa classe. eu forneço arquivos xml e java.
activity_mail.xml
SendMailActivity.java
Nota Não se esqueça de adicionar permissão à Internet no seu arquivo AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET"/>
Espero que funcione, se não, basta comentar abaixo.
fonte
SMTP
Usar o SMTP é um caminho a percorrer, e os outros já apontaram maneiras de fazê-lo. Observe que, ao fazer isso, você evita completamente o aplicativo de correio interno e precisará fornecer o endereço do servidor SMTP, o nome de usuário e a senha desse servidor, estaticamente no seu código, ou consultá-lo com o usuário. .
HTTP
Outra maneira envolveria um script simples do lado do servidor, como php, que pega alguns parâmetros de URL e os usa para enviar um email. Dessa forma, você só precisa fazer uma solicitação HTTP do dispositivo (facilmente possível com as bibliotecas integradas) e não precisa armazenar os dados de login SMTP no dispositivo. Esse é mais um indireto comparado ao uso direto de SMTP, mas como é muito fácil fazer solicitações HTTP e enviar e-mails do PHP, pode até ser mais simples do que o modo direto.
Aplicação de Correio
Se o e-mail for enviado a partir da conta de e-mail padrão do usuário que ele já registrou no telefone, será necessário adotar outra abordagem. Se você tiver tempo e experiência suficientes, verifique o código-fonte do aplicativo Android Email para ver se ele oferece algum ponto de entrada para enviar um email sem a interação do usuário (não sei, mas talvez exista).
Talvez você até encontre uma maneira de consultar os detalhes da conta dos usuários (para que você possa usá-los para SMTP), embora eu duvide que isso seja possível, porque seria um grande risco à segurança e o Android é construído com bastante segurança.
fonte
aqui está uma versão alt que também funciona para mim e tem anexos (postados acima, mas versão completa, ao contrário do link de origem, que as pessoas postaram, não podem fazê-lo funcionar devido à falta de dados)
e chamá-lo em uma atividade ...
fonte
Could not send email android.os.NetworkOnMainThreadException at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork
é necessário para ver esta solução stackoverflow.com/questions/25093546/...Uso:
Configuração:
Permissões:
Também para anexos, você precisa definir a permissão READ_EXTERNAL_STORAGE:
Fonte
(Eu mesmo testei)
fonte
Palavra de aviso se estiver usando "smtp.gmail.com" como o servidor smtp padrão.
O Google forçará você a alterar a senha da sua conta de e-mail vinculada com frequência devido às políticas zelosas de "atividade suspeita". Em essência, trata solicitações SMTP repetidas de diferentes países em um curto espaço de tempo como "atividade suspeita". Como eles assumem que você (o titular da conta de e-mail) pode estar apenas em um país por vez.
Quando os sistemas do Google detectam "atividades suspeitas", eles impedem mais emails até você alterar a senha. Como você terá codificado a senha no aplicativo, precisará liberá-lo novamente sempre que isso acontecer, o que não é o ideal. Isso aconteceu três vezes em uma semana comigo, eu até armazenei a senha em outro servidor e a busquei dinamicamente sempre que o Google me forçou a alterá-la.
Portanto, recomendo usar um dos muitos provedores de smtp gratuitos em vez de "smtp.gmail.com" para evitar esse problema de segurança. Use o mesmo código, mas altere "smtp.gmail.com" para seu novo host de encaminhamento de smtp.
fonte
suspicioud activity
problema?Edit: O JavaMail 1.5.5 alega suporte ao Android , então você não precisa de mais nada.
Portamos o JavaMail (1.5.4) mais recente para o Android. Está disponível no Maven Central, basta adicionar o seguinte abuild.gradle
~~Você pode seguir o tutorial oficial .
O código fonte está disponível aqui: https://bitbucket.org/artbristol/javamail-forked-android
fonte
Encontrei uma alternativa mais curta para outros que precisam de ajuda. O código é:
Fonte: Envio de email via API JavaMail
Espero que isto ajude! Boa sorte!
fonte
Aqueles que estão
ClassDefNotFoundError
tentando mover esses três arquivos jar para a pasta lib do seu projeto, funcionou para mim !!fonte
Para enviar um email com anexo ..
fonte
Não consigo executar o código de Vinayak B. Finalmente, resolvi esse problema da seguinte maneira:
1.Usando isso
2.Aplicando o AsyncTask.
3.Alterar o problema de segurança da conta do remetente do Gmail. (Altere para "LIGAR") neste
fonte
Você considerou usar o Apache Commons Net? Desde o 3.3, apenas um jar (e você pode depender dele usando gradle ou maven) e pronto: http://blog.dahanne.net/2013/06/17/sending-a-mail-in-java- and-android-with-apache-commons-net /
fonte
Sem intervenção do usuário, você pode enviar da seguinte maneira:
Enviar e-mail do cliente apk. Aqui mail.jar, activation.jar é necessário para enviar email em java. Se esses jarros forem adicionados, poderá aumentar o tamanho do APK.
Como alternativa, você pode usar um serviço da Web no código do servidor, que usará o mesmo mail.jar e activation.jar para enviar email. Você pode ligar para o serviço da Web via asynctask e enviar e-mail. Consulte o mesmo link.
(Mas você precisará conhecer as credenciais da conta de email)
fonte
Caso seja solicitado que você mantenha a biblioteca jar o menor possível, você pode incluir a função SMTP / POP3 / IMAP separadamente para evitar o problema "muitos métodos no dex".
Você pode escolher as bibliotecas jar desejadas na página da web do javanet , por exemplo, mailapi.jar + imap.jar pode permitir que você acesse o servidor de correio do icloud, hotmail no protocolo IMAP. (com a ajuda de additional.jar e activation.jar)
fonte
Tentei usar o código que o @Vinayak B enviou. No entanto, estou recebendo um erro dizendo: Nenhum provedor para smtp
Criei uma nova pergunta para isso com mais informações AQUI
Eu fui capaz de consertar isso sozinho depois de tudo. Eu tive que usar outro mail.jar e tive que garantir que meu " acesso a aplicativos menos seguros " estivesse ativado.
Espero que isso ajude quem tem o mesmo problema. Com isso feito, esse código também funciona no google glass.
fonte
Todo o código fornecido nas outras respostas está correto e está funcionando bem, mas um pouco confuso, então decidi publicar uma biblioteca (ainda em desenvolvimento) para usá-la de uma maneira mais fácil: AndroidMail .
Você precisa apenas criar um MailSender, criar um e-mail e enviá-lo (já tratado em segundo plano com um AsyncTask).
Você pode receber uma notificação pelo email enviado e também possui suporte para diferentes tipos de destinatários (TO, CC e BCC), anexos e html:
Você pode obtê-lo via Gradle ou Maven:
Entre em contato se tiver algum problema com ele! :)
fonte
Aqui estão muitas soluções. No entanto, acho que devemos alterar a configuração do GMail para permitir o acesso a partir de dispositivos menos seguros. Vá para o link abaixo e ative-o. Funciona para mim
https://myaccount.google.com/lesssecureapps?pli=1
fonte
fonte
Enviando email programaticamente com o Kotlin.
Eu também achei esta lista de serviços POP de email realmente útil:
https://support.office.com/en-gb/article/pop-and-imap-email-settings-for-outlook-8361e398-8af4-4e97-b147-6c6c4ac95353
Como usar:
O código:
Gradle:
AndroidManifest:
fonte
Para adicionar anexo, não se esqueça de adicionar.
fonte