Un espacio para los entusiastas del web

7 jun 2011
27.468 Lecturas

Curso Android: Envío de emails utilizando Android

En el capítulo 8 del Curso Android veremos cómo enviar emails utilizando Android la aplicación de ejemplo que realizaremos nos permitirá colocar la información para un correo electrónico (destinatario, asunto, contenido del correo, adjuntos) y luego enviarlo a través de la aplicación de correo electrónico.

Es importante notar que el ejemplo debe ejecutarse en un teléfono o bien instalar una aplicación para envío de emails en el emulador (por defecto no está instalada pero es relativamente simple). Queremos que al finalizar se vea así:

Email

Disposición inicial

En este caso, nuestra interfaz de usuario será muy sencilla por lo que no utilizaremos ningún código base tampoco realizaremos ninguna configuración adicional.

Diseño

El diseño presenta los campos necesarios para el envío del mail dentro de un contenedor global (en este caso utilizamos un LinearLayout) por cada fila tenemos otro contenedor que a su vez dentro tiene 2 elementos: una TextView y un EditText eso se repite para la dirección de correo del destinatario, el asunto y el cuerpo del correo.

Por último, se tiene una CheckBox para indicar si se desea enviar un adjunto (el ícono de la aplicación). El XML complete del diseño es el siguiente:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout android:id="@+id/LinearLayout01"
			  android:layout_width="fill_parent"
			  android:layout_height="fill_parent"
			  android:orientation="vertical"
  		      xmlns:android="http://schemas.android.com/apk/res/android">
	<LinearLayout android:id="@+id/LinearLayout02"
				  android:layout_width="wrap_content"
				  android:layout_height="wrap_content"
 				  android:orientation="horizontal">
		<TextView android:text="Destinatario"
				  android:layout_width="wrap_content"
				  android:layout_height="wrap_content"
				  android:id="@+id/txtForEmail"></TextView>
		<EditText android:layout_width="wrap_content"
				  android:layout_height="wrap_content"
				  android:width="170dip"
				  android:id="@+id/etEmail">
		</EditText>
	</LinearLayout>
	<LinearLayout android:id="@+id/LinearLayout03"
 				  android:layout_width="wrap_content"
 				  android:layout_height="wrap_content"
 				  android:orientation="horizontal">
		<TextView android:text="Asunto"
				  android:layout_width="wrap_content"
				  android:layout_height="wrap_content"
				  android:id="@+id/txtForSubject"></TextView>
		<EditText android:layout_width="wrap_content"
				  android:layout_height="wrap_content"
				  android:width="170dip"
				  android:id="@+id/etSubject">
		</EditText>
	</LinearLayout>
	<LinearLayout android:id="@+id/LinearLayout04"
 				  android:layout_width="wrap_content"
 				  android:layout_height="wrap_content"
 				  android:orientation="horizontal">
		<TextView android:text="Mensaje"
			      android:layout_width="wrap_content"
			      android:layout_height="wrap_content"
			       android:id="@+id/txtForBody"></TextView>
		<EditText android:layout_width="wrap_content"
 			  android:layout_height="wrap_content"
 			  android:lines="5"
 			  android:width="300dip"
			  android:id="@+id/etBody">
		</EditText>
	</LinearLayout>
	<CheckBox android:text="Enviar ícono adjunto"
			  android:id="@+id/chkAttachment"
			  android:layout_width="wrap_content"
			  android:layout_height="wrap_content"></CheckBox>
	<Button android:layout_width="wrap_content"
			android:layout_height="wrap_content"
			android:id="@+id/btnSend"
			android:text="Enviar"
			android:width="150dip">
	</Button>
</LinearLayout>

Agregando funcionalidad

Asociaremos todo el código del envío del email al evento de click sobre el botón “Enviar”:

Button btnSend = (Button) findViewById(R.id.btnSend);
btnSend.setOnClickListener(new OnClickListener() {
	@Override
	public void onClick(View v) {
	}
});

Obtenemos primero los elementos del form con los datos el email (destinatario, asunto, cuerpo del mail y adjunto):

// obtenemos los datos para el envío del correo 
EditText etEmail = (EditText) findViewById(R.id.etEmail);
EditText etSubject = (EditText) findViewById(R.id.etSubject);
EditText etBody = (EditText) findViewById(R.id.etBody);
CheckBox chkAttachment = (CheckBox) findViewById(R.id.chkAttachment);

Luego construimos un intent que luego utilizaremos para levantar la Activity para el envío del correo, este debe ser del tipo ACTION_SEND, posteriormente indicamos cuál será el tipo de dato a enviar.

// es necesario un intent que levante la actividad deseada 
Intent itSend = new Intent(android.content.Intent.ACTION_SEND);
// vamos a enviar texto plano a menos que el checkbox esté marcado 
itSend.setType("plain/text");

Colocamos todos los datos obtenidos del form, incluyendo el posible adjunto en caso de que el CheckBox esté marcado.

// colocamos los datos para el envío 
itSend.putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{ etEmail.getText().toString()});
itSend.putExtra(android.content.Intent.EXTRA_SUBJECT, etSubject.getText().toString());
itSend.putExtra(android.content.Intent.EXTRA_TEXT, etBody.getText());

// revisamos si el checkbox está marcado enviamos el ícono de la aplicación como adjunto 
if (chkAttachment.isChecked()) {
	// colocamos el adjunto en el stream 
	itSend.putExtra(Intent.EXTRA_STREAM, Uri.parse("android.resource://" + getPackageName() + "/" + R.drawable.icon));

	// indicamos el tipo de dato 
	itSend.setType("image/png");
}

Por último iniciamos la Activity para el envío.

startActivity(itSend);

El código completo es el siguiente:

Button btnSend = (Button) findViewById(R.id.btnSend);
btnSend.setOnClickListener(new OnClickListener() {
	@Override
	public void onClick(View v) {
	    //obtenemos los datos para el envío del correo 
        EditText etEmail = (EditText) findViewById(R.id.etEmail);
        EditText etSubject = (EditText) findViewById(R.id.etSubject);
        EditText etBody = (EditText) findViewById(R.id.etBody);
        CheckBox chkAttachment = (CheckBox) findViewById(R.id.chkAttachment);

        //es necesario un intent que levante la actividad deseada 
		Intent itSend = new Intent(android.content.Intent.ACTION_SEND);

        //vamos a enviar texto plano a menos que el checkbox esté marcado 
        itSend.setType("plain/text");

        //colocamos los datos para el envío
        itSend.putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{ etEmail.getText().toString()});
        itSend.putExtra(android.content.Intent.EXTRA_SUBJECT, etSubject.getText().toString());
        itSend.putExtra(android.content.Intent.EXTRA_TEXT, etBody.getText());

        //revisamos si el checkbox está marcado enviamos el ícono de la aplicación como adjunto
        if (chkAttachment.isChecked()) {
        	//colocamos el adjunto en el stream
        	itSend.putExtra(Intent.EXTRA_STREAM, Uri.parse("android.resource://" + getPackageName() + "/" + R.drawable.icon));

        	//indicamos el tipo de dato
        	itSend.setType("image/png");
        }

        //iniciamos la actividad
        startActivity(itSend);
	}
});

Descargar:

Puedes descargar el código de la aplicación completa y funcional en: Envío de emails utilizando Android .

Conclusión

En esta ocasión hemos visto la forma de enviar un correo electrónico (incluyendo un adjunto opcional) todo incluído en los extras a través de un intent utilizado para iniciar la Activity para el envío del mail.

Siguiente capítulo: Trabajando con APIs (Facebook y Twitter)

El logotipo de Android es compartido por Google bajo licencia Creative Commons por Atribución.

Adrian Catalán para Maestros del Web.
Agrega tu comentario | Enlace permanente al artículo

Síguenos en: @maestros | Fan page

Comentarios

  1. Danilo

    Hola que tal, primero que todo felicitarte por los tutoriales, están buenisimos!!!

    Ahora a lo que me convoca a escribir… Al querer instalar el .APK en mi celular me arroja un error que dice: “EROR DE ANALISIS – Se ha producido un problema al analizar el paquete”. Ojalá me puedan ayudar con esto.

    De ante mano gracias.

    1. Carlos

      Hola, me ha parecido muy interesante este tutorial. Quisiera saber algo:

      Cuando usted dice:

      “Es importante notar que el ejemplo debe ejecutarse en un teléfono o bien instalar una aplicación para envío de emails en el emulador”

      si lo voy a ejecutar en el emulador por tanto debería tener instalada una aplicación como gmail en él u otra similar? si es esto, sólo basta tenerla instalada y nada más, es sólo cuestion de dar click en el botón “Enviar” ?

      Muchas Gracias por la información

  2. Javier

    Sí el intent es para llamar a un cliente mail que se tenga instalado en el dispositivo. No hace la función de cliente mail.

    Saludos

Los comentarios de este post están cerrados. Si quieres seguir la discusión, debatir, criticar, sugerir o expandir el tema te invitamos a hacerlo en tu propio blog, en twitter o donde puedas publicar. No olvides enlazar a este post para que sigamos la conversación y se genere un trackback.



Acerca de
Maestros del Web nace cuando intentamos traducir Webmaster al Español. Nacimos orientados al diseño y desarrollo web. Hoy somos un espacio de apoyo para los entusiastas que participan en proyectos en la red.
Leer más de Maestros del Web