[Tips and Tricks] Enviar un email con adjuntos desde Windows Phone 8.1

Introducción

En nuestras aplicaciones necesitamos en determinadas ocasiones enviar
emails. Ya sea desde una sección de contacto o a enviar un email en una
determinada acción de nuestra aplicación. En Windows Phone 8.0 teníamos
ciertas limitaciones que ahora han sido paliadas, como enviar adjuntos.
En este Tips and Tricks vamos a ver como se envían correos en Windows
Phone 8.1 con adjuntos.

¿Te apuntas?

EmailComposeTask

En Windows Phone 8.0 utilizábamos el launcher EmailComposeTask
para enviar emails desde nuestras aplicaciones.  Era una manera muy
fácil y sencilla de enviar emails además, utilizando launchers,
conseguíamos una manera consistente con el resto de la experiencia
otorgada por el sistema.

Para poder utilizar el launcher, lo primero que debemos hacer es añadir la siguiente referencia:

using Microsoft.Phone.Tasks;

Una vez añadida, podemos enviar un email con facilidad:

var emailComposeTask = new EmailComposeTask();
 
emailComposeTask.Subject = "Asunto";
emailComposeTask.Body = "Mensaje";
emailComposeTask.To = "to@example.com";
emailComposeTask.Cc = "cc@example.com";
emailComposeTask.Bcc = "bcc@example.com";
 
emailComposeTask.Show();

Creamos un objeto de tipo EmailComposeTask, rellenamos la información
necesaria (destinatario, asunto, mensaje, etc) y llamamos al método
Show.

NOTA: Recordar que como otros launchers, en el emulador no funcionará, necesitaremos un dispositivo real para probar el envio.

Email con adjuntos

A pesar de la sencillez, el launcher EmailComposeTask cuenta con
ciertas limitaciones de peso. Una de las más sonadas es que no permite
enviar adjuntos.

En Windows Phone 8.1 podemos enviar emails con adjuntos utilizando las clases EmailMessage y EmailManager.

La clase EmailMessage nos permite definir el email a enviar, desde el destinatario y el asunto, hasta los ficheros adjuntos a enviar. Cuenta con las siguientes propiedades:

  • To: Destinatario del email.
  • Subject: Asunto del email.
  • Cc: Destinatarios CC del email
  • Bcc: Destinatarios BCC del email.
  • Body: Cuerpo del email.
  • Attachments: Adjuntos del email. Colección de tipo EmailAttachment.

EmailManager proporciona el método ShowComposeNewEmailAsync que
acepta como parámetro un objeto de tipo EmailMessage que abre la vista
de la App de email con todos los datos del mismo rellenos permitiendo al
usuario enviar el email.

El uso es sencillo. Crearemos un servicio de envio de emails para
inyectar en nuestra viewmodel y nos permita realizar las acciones
necesarias con el correo. Tendremos en la definición del mismo un método
como el siguiente:

Task Send(string recipient, string subject, EmailAttachment attachment);

Nos permite enviar un email indicando destinatario, asunto y mensaje.

NOTA: En este ejemplo, hemos realizado el caso
más simple al enviar correo, podemos tener varias sobrecargas del mismo
método aceptando más parámetros.

La definición del método es la siguiente:

public async Task Send(string recipient, string subject, EmailAttachment attachment)
{
     var email = new EmailMessage();
     email.To.Add(new EmailRecipient(recipient));
     email.Subject = subject;
     email.Attachments.Add(attachment);
 
     await EmailManager.ShowComposeNewEmailAsync(email);
}

Creamos un objeto EmailMessage con las propiedades básicas y llamamos
el método ShowComposeNewEmailAsync de la clase EmailManager.

El archivo adjunto sera un pequeño archivo de texto:

private static async Task<StorageFile> CreateFile()
{
     var localFolder = ApplicationData.Current.LocalFolder;
     var file = await localFolder.CreateFileAsync("file.txt", CreationCollisionOption.ReplaceExisting);
     await FileIO.WriteTextAsync(file, "Ejemplo Email Adjuntos");
 
     return file;
}

Al enviar el email, crearemos el fichero, y llamaremos al método Send de nuestro propio servicio:

var attachment = new EmailAttachment("file", await CreateFile());
await _emailService.Send("test@correo.es", "Ejemplo envio email con adjuntos", attachment);

Podéis descargar el ejemplo realizado a continuación:

Más información

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *