[Windows 8] Lancer l’application Email depuis une application

Edit du 25/10/2012 et préambule :

Dans le cas où vous souhaitez partager des données internes à l’application (une news, un programme tv, etc), l’utilisation du contrat de partage est préférable. Vous partagez une information ou une donnée en provenance de votre application.

Mais il peut arriver que vous souhaitiez envoyer une information particulière à un utilisateur particulier. Exemple, une exception qui aurait été levée et gérée depuis le code. Ou créer un formulaire précis pour que les utilisateurs vous contactent. C’est ce que nous détaillerons ici.

Email Compose Task

Sous Windows Phone, il existait le launcher EmailComposeTask pour envoyer des emails.

Sous Windows 8, il semblerait que le seul moyen soit d’appeler une uri de type mailto (ex: mailto:toto@nomdedomaine.com?subject=bonjour…).

Je vous propose ici un helper pour envoyer un email de la même manière que sous Windows Phone. La syntaxe redevient un peu plus verbeuse et lisible. A la sortie, c’est tout de même un mailto qui est créé.

using System;
using System.Threading.Tasks;

namespace Helpers
{
/// <summary>
/// Allows an application to launch the email 
    application with a new message displayed. 
    Use this to allow users to send email 
    from your application.
/// </summary>
public class EmailComposeTask
{
    /// <summary>
    /// Gets or sets the subject of 
        the new email message.
    /// </summary>
    public string Subject { get; set; }

    /// <summary>
    /// Gets or sets the body of the new email message.
    /// </summary>
    public string Body { get; set; }

    /// <summary>
    /// Gets or sets the recipients (separated by a comma)
        on the To line of the new email message.
    /// </summary>
    public string To { get; set; }

    /// <summary>
    /// Gets or sets the recipients (separated by a comma)
        on the Cc line of the new email message.
    /// </summary>
    public string Cc { get; set; }

    /// <summary>
    /// Gets or sets the recipients (separated by a comma)
        on the Bcc line of the new email message.
    /// </summary>
    public string Bcc { get; set; }

    /// <summary>
    /// Shows the email application with a new message 
        displayed.
    /// </summary>
    /// <returns></returns>
    public async Task Show()
    {
        var mailto = 
new Uri(String.Format("mailto:?subject={0}&body={1}
&to={2}&cc={3}&bcc={4}", Subject, Body, To, Cc, Bcc));
        await Windows.System.Launcher.LaunchUriAsync(mailto);
    }
}
}

 

On retrouve donc les différents propriétés avec sans surprise :

  • Subject pour le sujet
  • Body pour le contenu
  • To pour le / les destinataires (séparés par une virgule ou un point virgule
  • Cc pour le / les destinataires en copie (idem pour la séparation)
  • Bcc pour le / les destinataires en copie invisible (Cci)

La méthode Show() génère l’url et y accède, lançant ainsi l’application email.

Vous pouvez télécharger la classe ici : https://skydrive.live.com/redir?resid=3929B7A47D0F06D!603&authkey=!AGDcvVDdlkOhLcU

Note : vous pouvez aussi directement utiliser la syntaxe mailto depuis un HyperLinkButton.

Par JC VASSELON

7 réponses à “[Windows 8] Lancer l’application Email depuis une application

  1. Pingback: [Windows 8] Portage de LittleWatson | Onefor4

  2. Pingback: [Windows 8] Portage de LittleWatson | Onefor4

    • Je connais les contrats de partage. Mais ils ne sont pas intéressant dans tous les cas. Si une exception se lève, on va pas demander à l’utilisateur d’appeler le contrat de partage pour la tweeter. Proposer un formulaire pour l’envoyer par email est plus intéressant.

      J’éclaircirais peut-être plus ce point dans l’article.

  3. Je suis d’accord avec Stéphane, le Share est fait pour promouvoir l’échange d’information entre application, ta bidouille est à mon avis inutile. Soit tu envoies ton mail via un serveur (via webservice), soit tu laisses l’utilisateur passer par le contrat Share. Je vois pas dans quel cas tu peux avoir une exception et la partager… Mauvaise conception ?

  4. Si il y a une exception non catché l appli va planter de toute maniere

  5. Cas de l’exception => Cf article sur LittleWatson. ça peut-être pratique pour débugguer.

    Cas général => Email au support de l’application ? Le contrat share est inadapté sur ce point là. (oui on peut mettre un hyperlink avec un mailto, mais vous pouvez aussi vouloir mettre un formulaire qui pré-remplisse le message).

    Je suis d’accord sur le fait que cet article mériterait de parler du contrat Share (ce point a d’ailleurs été corrigé). Mais cet helper peut être utile dans d’autres cas.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s