Cómo enviar un correo desde tu App en Windows Phone 8.1 { C# }


Hace algunos días un amigo me pregunto sobre como podía enviar un correo desde su aplicación en Windows Phone 8.1, ya que utilizaba el mismo código que en Windows Phone 8.0 pero este le generaba errores.

Les recuerdo previamente que antes utilizábamos el launcher EmailComposeTask para enviar mails desde nuestras aplicaciones, y sinceramente era una manera muy facil y sencilla.

La forma antigua…

Para poder utilizar el launcher antes mencionado, lo primero que debíamos era añadir la referencia:

using Microsoft.Phone.Tasks;

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

var emailComposeTask = new EmailComposeTask();
emailComposeTask.Subject = "Asunto";
emailComposeTask.Body = "Mensaje";
emailComposeTask.To= "para@demo.com";
emailComposeTask.Cc = "cc@demo.com";
emailComposeTask.Bcc = "bcc@demo.com";
emailComposeTask.Show();
Nota: esto funciona en una aplicación Silverlight WP8.1 pero no en una aplicacion WinRT
La NUEVA forma…
Indagando un poco me encontré con la clase EmailManager, que también es bastante fácil de usar.
Lo primero que debemos de hacer es declarar : EmailRecipient :
EmailRecipient sendTo = new EmailRecipient()
{
    Address = "mail@domain.com"
};
Ahora ya estamos en condiciones de establecer nuestro EmailMessage, que funciona de una manera similar como el viejo EmailComposeTask:
EmailMessage mail = new EmailMessage();
mail.Subject = "this is the Subject";
mail.Body = "this is the Body";
Después de haber configurado el asunto y el cuerpo del correo, tenemos que añadir nuestros destinatarios a EmailMessage, esta es la única manera de agregar – “To”, “Bcc” y “CC”.
mail.To.Add(sendTo);
//mail.Bcc.Add(sendTo);
//mail.CC.Add(sendTo);
Por ultimo pero no menos importante, necesitamos llamar el metodo ShowComposeNewEmailAsync () de la clase EmailManager, que abrira el contrato Share con solo el correo electronico:
await EmailManager.ShowComposeNewEmailAsync(mail);
Aquí el código completo:
//predefine Recipient
EmailRecipient sendTo = new EmailRecipient()
{
    Address = "mail@domain.com"
};

//generate mail object
EmailMessage mail = new EmailMessage();
mail.Subject = "this is the Subject";
mail.Body = "this is the Body";

//add recipients to the mail object
mail.To.Add(sendTo);
//mail.Bcc.Add(sendTo);
//mail.CC.Add(sendTo);

//open the share contract with Mail only:
await EmailManager.ShowComposeNewEmailAsync(mail);
Nota: esta nueva forma funciona tanto para Windows Phone 8.1 Runtime y para aplicaciones de Silverlight.

La forma sucia (oscura)…
He encontrado tambien otra forma que funciona con un Uri incluyendo los valores como parametros lanzados por LaunchUriAsync () que consigue ser reconocido por el sistema operativo:
var mail = new Uri("mailto:?to=tickets@msiccdev.uservoice.com&subject=this is the Subject&body=this is the Body");
await Launcher.LaunchUriAsync(mail);
Los parámetros consiguen automáticamente ser analizados por la aplicación de correo.

Y como siempre, espero esto les haya ayudado de algo.
Hasta la próxima!!

Mas información:
–  Centro de desarrollo de Windows: EmailComposeTask Class
– Windows Dev Center: EmailMessage class
Anuncios

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

w

Conectando a %s