Buenas tardes, en esta entrada vamos a ver como podemos enviar un Correo Electrónico desde nustro dispositivo mediante el uso de la clase Intent.
Nos puede ocurrir que necesitemos implementar en nuestra aplicación la necesidad de abrir la aplicación que tengamos instalada que gestione todo lo relacionado con el envío de un correo electrónico. Para ello, a continuación veremos como podemos hacerlo de una forma bastante intuitiva, con el uso de la clase Intent, aunque como para todo, hay múltiples formas de hacerlo.
Dicho esto vamos a ponernos manos a la obra:
-
Creación del Proyecto
Para comenzar, nos vamos a ir a File -> New -> Android Application Project. Si por algún caso no encontramos en la lista esta opción, pulsamos sobre “Other”, donde una ventana nos aparecerá para encontrar entre una lista. Si queremos podemos filtrar los resultados escribiendo “Android” en la caja de texto, para que nos sea mas fácil.
Una vez lo encontremos, nos aparecerá el asistente, y en su primera ventana nos disponemos a darle un nombre a nuestro proyecto, en mi caso lo he llamado “EjemploEnviarEmail”, aunque podeis darle el nombre que deseeis. Las demás opciones podeis dejarlas como están.
Una vez tengamos nuestro nombre de proyecto, seguiremos hacia delante hasta encontrarnos con la ventana en la que se nos pide un nombre para la Activity principal, la cual llamaremos “EmailActivity”, aunque podeis darle el deseado, y su archivo layout lo llamaré “activity_email.xml”.
Cuando hayamos terminado con el asistente, podremos comenzar a construir nuestra aplicación.
-
EmailActivity
En cuanto tengamos nuestro Proyecto creado, tendremos nuestra Activity creada en la carpeta src/package_name/EmailActivity.java, y su archivo layout en res/layout/activity_email.xml. Dicho esto vamos a modificar el layout:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".EmailActivity" > <Button android:id="@+id/btnEnviarEmail" android:layout_width="fill_parent" android:layout_height="wrap_content" android:onClick="onClick" android:text="Enviar Email" /> </LinearLayout>
Como podemos observar, solo hemos añadido un botón, cuya función será la de lanzar el Intent con unos datos que estableceremos.
A continuación vamos a nuestra Activity EmailActivity.java, la cual comoa tnes hemos visto se encuentra en src/package_name/EmailActivity.java. Le añadiremos lo siguiente:
package sekth.droid.Email; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.View; public class EmailActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_email); } public void onClick(View v) { // Reemplazamos el email por algun otro real String[] to = { "email1@ejemplo.com", "otroEmail@ejemplo.com" }; String[] cc = { "otroEmail@ejemplo.com" }; enviar(to, cc, "Hola", "Esto es un email enviado desde una app de Android"); } private void enviar(String[] to, String[] cc, String asunto, String mensaje) { Intent emailIntent = new Intent(Intent.ACTION_SEND); emailIntent.setData(Uri.parse("mailto:")); //String[] to = direccionesEmail; //String[] cc = copias; emailIntent.putExtra(Intent.EXTRA_EMAIL, to); emailIntent.putExtra(Intent.EXTRA_CC, cc); emailIntent.putExtra(Intent.EXTRA_SUBJECT, asunto); emailIntent.putExtra(Intent.EXTRA_TEXT, mensaje); emailIntent.setType("message/rfc822"); startActivity(Intent.createChooser(emailIntent, "Email ")); } }
Vamos a analizar sus métodos:
-
protected void onCreate (Bundle savedInstanceState)
Su código:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_email); }
Como podemos ver, en el método onCreate no hemos hecho nada, lo único que hemos establecido su archivo layout, pero por lo demás, no se le aplica ninguna otra funcionalidad.
-
public void onClick(View v)
Vemos su código a continuación:
public void onClick(View v) { // Reemplazamos el email por algun otro real String[] to = { "email1@ejemplo.com", "otroEmail@ejemplo.com" }; String[] cc = { "otroEmail@ejemplo.com" }; enviar(to, cc, "Hola", "Esto es un email enviado desde una app de Android"); }
Este método será ejecutado cuando pulsemos el Button que tenemos en nuestro xml, estableciendolo mediante el atributo android:onClick=”onClick”. En este método tenemos 2 arrays de String. Uno de ellos, llamado to, contiene los email a los cuales serán enviados directamente los correos, y el otro array llamado cc enviará copias a las direcciones que vayan dentro de el. Una vez hayamos establecido los correos, llamamos al método enviar, el cual vemos a continuación.
-
private void enviar(String[] to, String[] cc, String asunto, String mensaje)
Vemos su código:
private void enviar(String[] to, String[] cc, String asunto, String mensaje) { Intent emailIntent = new Intent(Intent.ACTION_SEND); emailIntent.setData(Uri.parse("mailto:")); //String[] to = direccionesEmail; //String[] cc = copias; emailIntent.putExtra(Intent.EXTRA_EMAIL, to); emailIntent.putExtra(Intent.EXTRA_CC, cc); emailIntent.putExtra(Intent.EXTRA_SUBJECT, asunto); emailIntent.putExtra(Intent.EXTRA_TEXT, mensaje); emailIntent.setType("message/rfc822"); startActivity(Intent.createChooser(emailIntent, "Email ")); }
Como podemos ver, en este método recibimos la lista de emails a los cuales vamos a enviar un mensaje, además de la lista de emails que recibirán una copia del mensaje, y por otro lado recibimos el Asunto del email y el cuerpo del mensaje.
Lo primero que hacemos es crear un objeto de la clase Intent que es el que realizará al acción de enviar, mediante la constante Intent.ACTION_SEND:
Intent emailIntent = new Intent(Intent.ACTION_SEND);
A continuación, vamos a ir agregando información a este Intent para cargarlo con los parámetros que hemos recibido:
emailIntent.putExtra(Intent.EXTRA_EMAIL, to); emailIntent.putExtra(Intent.EXTRA_CC, cc); emailIntent.putExtra(Intent.EXTRA_SUBJECT, asunto); emailIntent.putExtra(Intent.EXTRA_TEXT, mensaje); emailIntent.setType("message/rfc822");
Como vemos, vamos añadiendo al Intent y mediante la ayuda de las constantes de Intent.EXTRA_XXXXX todos los argumentos que hemos recibido, y por último establecemos el tipo de mensaje que contiene, mediante el string “message/rfc822”.
Por último, invocamos al método startActivity:
startActivity(Intent.createChooser(emailIntent, "Email "));
Hemos añadido el Intent junto con la llamada al método createChooser, con el cual nos aparecerá una ventana adicional para elegir un cliente de e-mail con el cual podemos enviar el correo, en caso de que tengamos mas de 1 aplicación que pueda manejar emails.
-
Con esto, nuestra aplicación ya es funcional, y podemos ejecutarla para ver como funciona.
A continuación unas imágenes de la aplicación:
Por último, un vídeo en el que veremos la aplicación en ejecución:
Esta, como bien he especificado antes, es una de las maneras que tenemos para poder enviar un correo electrónico desde nuestra aplicación.
El código dl ejemplo podeis descargarlo de aquí
Sin más, cualquier aporte o corrección son bienvenidos.
Saludos!!!