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.