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í:
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.
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.
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
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