Estoy tratando de crear una aplicación de envío de correo en Android.
Si yo uso:
Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
Esto lanzará la aplicación de Android incorporada; Estoy tratando de enviar el correo al hacer clic en el botón directamente sin usar esta aplicación.
Respuestas:
Envíe correos electrónicos en Android usando la API JavaMail usando la autenticación de Gmail.
Pasos para crear un proyecto de muestra:
MailSenderActivity.java:
GMailSender.java:
JSSEProvider.java:
AGREGAR 3 frascos encontrados en el siguiente enlace a su proyecto de Android
Haga clic aquí - Cómo agregar frascos externos
Y no olvide agregar esta línea en su manifiesto:
Simplemente haga clic debajo del enlace para cambiar el acceso a la cuenta para aplicaciones menos seguras https://www.google.com/settings/security/lesssecureapps
Ejecute el proyecto y verifique el correo en su cuenta de correo destinatario. ¡Salud!
PD Y no olvides que no puedes hacer operaciones de red desde ninguna Actividad en Android. Por lo tanto, se recomienda usar
AsyncTask
oIntentService
evitar la red en la excepción del subproceso principal.Archivos jar: https://code.google.com/archive/p/javamail-android/
fuente
Gracias por tu valiosa información. El código funciona bien. Puedo agregar archivos adjuntos también agregando el siguiente código.
fuente
filename
variable aquí, debe especificar la ruta del archivo. Por ejemplo:String path = Environment.getExternalStorageDirectory().getPath() + "/temp_share.jpg";
Agregue esta línea en su manifiesto:
fuente
Puede usar la API JavaMail para manejar sus tareas de correo electrónico. JavaMail API está disponible en el paquete JavaEE y su jar está disponible para descargar. Lamentablemente, no se puede usar directamente en una aplicación de Android, ya que utiliza componentes AWT que son completamente incompatibles en Android.
Puede encontrar el puerto de Android para JavaMail en la siguiente ubicación: http://code.google.com/p/javamail-android/
Agregue los frascos a su aplicación y use el método SMTP
fuente
eu.ocathain.com.sun.mail:javax.mail:1.5.2
Para ayudar a aquellos que obtienen una Red en la Excepción del subproceso principal con un SDK Target> 9. Esto está usando el código de droopie anterior pero funcionará de manera similar para cualquiera.
Puede usar AsyncTask como se muestra a continuación
fuente
Código 100% funcional con demo También puede enviar múltiples correos electrónicos con esta respuesta.
Descargar proyecto AQUÍ
Paso 1: descargue el correo, la activación, los archivos jar adicionales y agregue la carpeta libs de su proyecto en Android Studio. Agregué una captura de pantalla, ver abajo Enlace de descarga
Inicie sesión con gmail ( usando su correo electrónico ) y ENCIENDA el botón de alternar ENLACE
La mayoría de la gente se olvida de este paso, espero que no lo hagas.
Paso 2: después de completar este proceso. Copie y pegue estas clases en su proyecto.
GMail.java
SendMailTask.java
Paso 3: Ahora puede cambiar esta clase de acuerdo a sus necesidades y también puede enviar múltiples correos usando esta clase. Proporciono xml y java ambos.
activity_mail.xml
SendMailActivity.java
Nota No olvide agregar permiso de Internet en su archivo AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET"/>
Espero que funcione si no es así, solo comenta abajo.
fuente
SMTP
Usar SMTP es un camino a seguir, y los otros ya han señalado formas de hacerlo. Solo tenga en cuenta que al hacer esto, elude por completo la aplicación de correo incorporada, y tendrá que proporcionar la dirección del servidor SMTP, el nombre de usuario y la contraseña de ese servidor, ya sea estáticamente en su código o consultarlo al usuario .
HTTP
Otra forma implicaría un script simple del lado del servidor, como php, que toma algunos parámetros de URL y los usa para enviar un correo. De esta manera, solo necesita hacer una solicitud HTTP desde el dispositivo (fácilmente posible con las bibliotecas integradas) y no necesita almacenar los datos de inicio de sesión SMTP en el dispositivo. Esta es una indirección más en comparación con el uso directo de SMTP, pero debido a que es muy fácil hacer una solicitud HTTP y enviar correos desde PHP, incluso podría ser más simple que la forma directa.
Solicitud de correo
Si el correo se enviará desde la cuenta de correo predeterminada del usuario que él ya registró con el teléfono, deberá adoptar otro enfoque. Si tiene suficiente tiempo y experiencia, puede consultar el código fuente de la aplicación de correo electrónico de Android para ver si ofrece algún punto de entrada para enviar un correo sin interacción del usuario (no lo sé, pero tal vez haya uno).
Tal vez incluso encuentre una manera de consultar los detalles de la cuenta de los usuarios (para que pueda usarlos para SMTP), aunque dudo mucho que esto sea posible, ya que sería un gran riesgo de seguridad y Android está construido de manera bastante segura.
fuente
aquí hay una versión alternativa que también funciona para mí y tiene archivos adjuntos (publicados anteriormente pero versión completa a diferencia del enlace de origen, que las personas publicaron que no pueden hacer que funcione porque faltan datos)
y llamarlo en una actividad ...
fuente
Could not send email android.os.NetworkOnMainThreadException at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork
es necesario ver esta solución stackoverflow.com/questions/25093546/…Uso:
Configuración:
Permisos:
También para los archivos adjuntos, debe establecer el permiso READ_EXTERNAL_STORAGE:
Fuente
(Lo he probado yo mismo)
fuente
Palabra de advertencia si usa "smtp.gmail.com" como el servidor smtp predeterminado.
Google lo obligará a cambiar la contraseña de su cuenta de correo electrónico vinculada con frecuencia debido a sus excesivas políticas de "actividad sospechosa". En esencia, trata las solicitudes smtp repetidas de diferentes países en un corto período de tiempo como "actividad sospechosa". Como suponen que usted (el titular de la cuenta de correo electrónico) solo puede estar en un país a la vez.
Cuando los sistemas de Google detectan "actividad sospechosa", evitará más correos electrónicos hasta que cambie la contraseña. Como habrá codificado la contraseña en la aplicación, debe volver a lanzar la aplicación cada vez que esto suceda, lo que no es ideal. Esto me sucedió 3 veces en una semana, incluso almacené la contraseña en otro servidor y busqué dinámicamente la contraseña cada vez que Google me obligó a cambiarla.
Por lo tanto, recomiendo usar uno de los muchos proveedores de smtp gratuitos en lugar de "smtp.gmail.com" para evitar este problema de seguridad. Use el mismo código pero cambie "smtp.gmail.com" a su nuevo host de reenvío smtp.
fuente
suspicioud activity
problema?Editar: JavaMail 1.5.5 afirma que es compatible con Android , por lo que no debería necesitar nada más.
He portado el último JavaMail (1.5.4) a Android. Está disponible en Maven Central, solo agregue lo siguiente abuild.gradle
~~Luego puedes seguir el tutorial oficial .
El código fuente está disponible aquí: https://bitbucket.org/artbristol/javamail-forked-android
fuente
Encontré una alternativa más corta para otros que necesitan ayuda. El codigo es:
Fuente: Envío de correo electrónico a través de la API JavaMail
¡Espero que esto ayude! ¡Buena suerte!
fuente
Aquellos que
ClassDefNotFoundError
intentan mover esos tres archivos jar a la carpeta lib de su proyecto, ¡funcionó para mí!fuente
Para enviar un correo con archivo adjunto ...
fuente
No puedo ejecutar el código de Vinayak B. Finalmente resolví este problema siguiendo:
1.Utilizando esto
2.Aplicando AsyncTask.
3.Cambio del problema de seguridad de la cuenta de remitente de gmail. (Cambie a "ENCENDIDO") en este
fuente
¿Consideró usar Apache Commons Net? Desde 3.3, solo un frasco (y puede depender de él usando gradle o maven) y ya está: http://blog.dahanne.net/2013/06/17/sending-a-mail-in-java- and-android-with-apache-commons-net /
fuente
Sin intervención del usuario, puede enviar lo siguiente:
Enviar correo electrónico desde el apk del cliente. Aquí se requiere mail.jar, activación.jar para enviar correo electrónico java. Si se agregan estos frascos, podría aumentar el tamaño del APK.
Alternativamente, puede usar un servicio web en el código del lado del servidor, que usará el mismo mail.jar y activación.jar para enviar correos electrónicos. Puede llamar al servicio web a través de asynctask y enviar un correo electrónico. Consulte el mismo enlace.
(Pero, deberá conocer las credenciales de la cuenta de correo)
fuente
En caso de que deba mantener la biblioteca jar lo más pequeña posible, puede incluir la función SMTP / POP3 / IMAP por separado para evitar el problema de "demasiados métodos en la desviación".
Puede elegir las bibliotecas jar deseadas de la página web de Java , por ejemplo, mailapi.jar + imap.jar puede permitirle acceder a icloud, servidor de correo hotmail en el protocolo IMAP. (con la ayuda de Adicional.jar y Activación.jar)
fuente
Intenté usar el código que envió @Vinayak B. Sin embargo, recibo un error que dice: No hay proveedor para smtp
Creé una nueva pregunta para esto con más información AQUÍ
Pude arreglarlo yo mismo después de todo. Tuve que usar otro mail.jar y me aseguré de que mi " acceso para aplicaciones menos seguras " estuviera activado.
Espero que esto ayude a cualquiera que tenga el mismo problema. Una vez hecho esto, este código también funciona en Google Glass.
fuente
Todo el código proporcionado en las otras respuestas es correcto y funciona bien, pero un poco desordenado, así que decidí publicar una biblioteca (aunque aún en desarrollo) para usarla de una manera más fácil: AndroidMail .
Solo tiene que crear un MailSender, construir un correo y enviarlo (ya manejado en segundo plano con una AsyncTask).
Puede recibir una notificación por el correo electrónico enviado y también tiene soporte para diferentes tipos de Destinatarios (TO, CC y BCC), archivos adjuntos y html:
Puede obtenerlo a través de Gradle o Maven:
¡Avísame si tienes algún problema! :)
fuente
Aquí hay muchas soluciones. Sin embargo, creo que debemos cambiar la configuración de GMail para permitir el acceso desde dispositivos menos seguros. Vaya al siguiente enlace y habilítelo. Esto funciona para mi
https://myaccount.google.com/lesssecureapps?pli=1
fuente
fuente
Envío de correo electrónico mediante programación con Kotlin.
También encontré esta lista de servicios POP de correo electrónico realmente útil:
https://support.office.com/en-gb/article/pop-and-imap-email-settings-for-outlook-8361e398-8af4-4e97-b147-6c6c4ac95353
Cómo utilizar:
El código:
Gradle:
Manifiesto de Android:
fuente
Para agregar archivos adjuntos, no olvide agregar.
fuente