Como Enviar un Correo en Android (Java)

Demo Github
Los Correos o Emails son una forma importante de comunicarse, sobre todo a nivel empresarial, si bien existen muchas aplicaciones de mensajería como WhatsApp o Telegram que permite la comunicación entre usuarios, los correos siguen siendo una herramienta que no deja de pasar desapercibida, si revisas tu bandeja de correo, a diario o cada cierta frecuencia puedes ver que recibes múltiples correos con promociones, noticias, etc. En este Post te voy a enseñar como enviar un correo desde Android.
Antes de continuar con este Post te recomiendo leer los artículos:
Si ya conoces sobre Java y Android, puedes continuar con este Post, no hay problema.
Empezaré creando la interface y luego el código Java para la Aplicación.
Lo primero que debes hacer es crear un Proyecto nuevo en Android Studio, puedes seguir el tutorial: Que es Android y tu Primera aplicación Hola Mundo en donde explico los pasos para hacerlo.
Interface UI
Abro el archivo activity_main.xml en donde agregaré con los elementos para la interface de la aplicación.
Para el formulario del envió de correos voy a agregar 4 elementos: Campo del Correo, Asunto y cuerpo del Mensaje. Todos los voy a colocar sobre un RelativeLayout.
1 2 3 4 5 6 7 8 9 10 11 12 |
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="16dp" android:paddingRight="16dp" > <!-- Acá los elementos de mi formulario --> </RelativeLayout> |
Para mantener una estructura más flexible, voy a separa todos los elementos con varios LinearLayout, primero agrego el titulo con el texto Enviar Correo el cual esta alojado en mi archivo strings.xml, este archivo lo crearé más abajo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/txt_home" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/texto_ec" android:textColor="#000000" android:textSize="24dp" android:layout_marginTop="30dp" /> </LinearLayout> |
Ahora voy a crear mi campo Correo con el texto Enviar a: en donde se debe escribir el correo del usuario al cual se le desea enviar el mensaje.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="100dp" android:orientation="vertical"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:id="@+id/txt_correo" android:textColor="#007bff" android:text="@string/texto_correo" android:textSize="17dp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <EditText android:id="@+id/caja_correo" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Ejemplo: correo@correo.com" /> </LinearLayout> </LinearLayout> |
Paso seguido voy a crear el campo en donde el usuario debe escribir el Asunto para el mensaje
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="190dp" android:orientation="vertical"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:id="@+id/txt_asunto" android:textColor="#007bff" android:text="@string/texto_asunto" android:textSize="17dp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <EditText android:id="@+id/caja_asunto" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Feliz Cumpleaños"/> </LinearLayout> </LinearLayout> |
Luego agrego el campo para el Mensaje.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="285dp" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/txt_mensaje" android:textColor="#007bff" android:text="@string/texto_mensaje" android:textSize="17dp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <EditText android:id="@+id/caja_mensaje" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Feliz Cumpleaños" android:inputType="textMultiLine" android:height="100dp"/> </LinearLayout> </LinearLayout> |
Por ultimo agrego un botón con el texto Enviar, este botón me servirá para enviar el correo una vez llenado los campos del formulario.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="430dp"> <Button android:id="@+id/btn_enviar" android:text="@string/texto_btn_enviar" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> |
El texto de los labels y del botón Enviar los he colocado en mi archivo strings.xml para mantener un orden
Strings
Abro el archivo strings.xml que se encuentra en app > res > values > strings.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
/app ├── /manifests ├── /java ├── /java (generated) ├── /res ├── /drawable ├── /layout ├── /mipmap ├── /values ├── colors.xml ├── dimen.xml ├── strings // Abro este archivo ├── styles.xml ├── /res (generated) /Gradle Scripts |
Y agrego lo siguiente en el archivo strings.xml el contenido con los textos de mi interface.
1 2 3 4 5 6 7 8 9 10 11 |
<resources> <string name="app_name">Mi Aplicación</string> <string name="texto_main">Nube Colectiva</string> <string name="texto_ec">Enviar Correo</string> <string name="texto_correo">Enviar a:</string> <string name="texto_asunto">Asunto:</string> <string name="texto_mensaje">Mensaje:</string> <string name="texto_btn_enviar">Enviar</string> </resources> |
Con esto ya tengo lista la interface de la aplicación:
A continuación, todo el código completo de mi archivo
Ahora voy a crear mi código Java para darle funcionalidad a la interface.
Main Activity (Java)
Abro el archivo MainActivity.java que se encuentra en app > java > com.example.app
1 2 3 4 5 6 7 8 9 10 11 |
/app ├── /manifests ├── /java ├── /com.example.app ├── MainActivity.java // Abro este archivo ├── /java (generated) ├── /res ├── /res (generated) /Gradle Scripts |
Todo lo voy a realizar el el método onCreate que se encuentra en el archivo MainActivity.java
1 2 3 4 5 6 7 |
@Override protected void onCreate(Bundle savedInstanceState) { // Acá el código Java } |
Lo primero que haré es definir los objetos de la interface de la aplicación, estos elementos los defino arriba, antes del método onCreate
1 2 3 4 5 6 7 8 9 10 11 |
// Defino los objetos de la interface Button button; EditText correo, asunto, mensaje; @Override protected void onCreate(Bundle savedInstanceState) { // Acá el código Java } |
Luego obtengo los elementos de la interface.
1 2 3 4 5 6 7 |
// Obtengo los elementos de la interface correo = findViewById(R.id.caja_correo); asunto = findViewById(R.id.caja_asunto); mensaje = findViewById(R.id.caja_mensaje); button = findViewById(R.id.btn_enviar); |
Por ultimo agrego un setOnClickListener para el botón Enviar. En el creo el Intent en donde hago uso del obejto ACTION_SEND de Android y le paso los Strings EXTRA_EMAIL, EXTRA_SUBJETC y EXTRA_TEXT.
Al final lanzo el selector de cliente de correo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
// El setOnClickListener del botón Enviar button.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { String enviarcorreo = correo.getText().toString(); String enviarasunto = asunto.getText().toString(); String enviarmensaje = mensaje.getText().toString(); // Defino mi Intent y hago uso del objeto ACTION_SEND Intent intent = new Intent(Intent.ACTION_SEND); // Defino los Strings Email, Asunto y Mensaje con la función putExtra intent.putExtra(Intent.EXTRA_EMAIL, new String[] { enviarcorreo }); intent.putExtra(Intent.EXTRA_SUBJECT, enviarasunto); intent.putExtra(Intent.EXTRA_TEXT, enviarmensaje); // Establezco el tipo de Intent intent.setType("message/rfc822"); // Lanzo el selector de cliente de Correo startActivity( Intent .createChooser(intent, "Elije un cliente de Correo:")); } }); |
Entonces cuando el usuario llena el formulario con los campos Enviar a, Asunto y Mensaje y presiona el botón Enviar, te abre el cliente de Correo que tienes instalado, por ejemplo Gmail, este utiliza los datos ingresados en el formulario y enviamos el correo.
Puedes ver en la imagen del lado derecho el correo que ha sido recibido correctamente.
Con esto tengo terminada mi aplicación y lista para usarse, para entender mejor y ver el resultado de la aplicación, puedes ver la Demo que esta arriba, al inicio de este Tutorial.
Conclusión
En este Tutorial hemos aprendido a conectar una aplicación con el o los clientes de Correo y ha pasarle la información del formulario al cliente de correo que tengamos instalado en nuestro dispositivo, el cliente se encarga de enviar el correo a otro usuario.
Sabiendo esto puedes implementar esta funcionalidad en tus aplicaciones, si así lo requiere.
Nota(s)
- No olvides que debemos usar la Tecnología para hacer cosas Buenas por el Mundo.
- Los pasos mencionados en este Post, pueden dejar de existir, continuar o ser modificados, esto no depende de mi, sino de los Desarrolladores que dan Soporte a Android SO, Android Studio y Java.
Síguenos en nuestras Redes Sociales para que no te pierdas nuestros próximos contenido.
Buenas, el blog esta genial y me ha sido muy útil, pero tengo una duda y no se si podrás ayudarme. Te lo agradezco de antemano. La duda es la siguiente, me gustaría que en lugar de abrir el selector, se abriese directamente gmail con ese mensaje escrito, es decir no tener que elegir, sino usar gmail de forma inmediata. La cosa es que he probado con sustituir las siguientes lineas: Default // Establezco el tipo de Intent intent.setType("message/rfc822"); // Lanzo el selector de cliente de Correo startActivity(Intent.createChooser(intent, "Elije GMAIL:")); 123456 // Establezco el tipo de Intentintent.setType("message/rfc822");// Lanzo el selector… Leer más »
Esta es la idea: Default public void sendGmail(Activity activity, String subject, String text) { Intent gmailIntent = new Intent(); gmailIntent.setClassName("com.google.android.gm", "com.google.android.gm.ComposeActivityGmail"); gmailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, subject); gmailIntent.putExtra(android.content.Intent.EXTRA_TEXT, text); try { activity.startActivity(gmailIntent); } catch(ActivityNotFoundException ex) { // handle error } } 12345678910111213 public void sendGmail(Activity activity, String subject, String text) { Intent gmailIntent = new Intent(); gmailIntent.setClassName("com.google.android.gm", "com.google.android.gm.ComposeActivityGmail"); gmailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, subject); gmailIntent.putExtra(android.content.Intent.EXTRA_TEXT, text); try { activity.startActivity(gmailIntent); } catch(ActivityNotFoundException ex) { // handle error }} Asegúrate de pasar el objeto de actividad actual, también puedes agregar este método dentro de tu clase de actividad y llamar a startActivity (gmailIntent); directamente. Avisame como te fue, recuerda que puedes ingresar a los grupos de whatsapp, discord y… Leer más »
hola esta muy bien tu aplicación, pero como se podría adjuntar un archivo pdf en el mismo correo, espero tu respuesta te lo agradecería mucho.
Hola Rigoberto y bienvenido a la comunidad. Te comparto este enlace para que tengas una idea de como se hace: https://www.tutorialspoint.com/how-to-send-an-email-with-a-file-attachment-in-android