Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Android] Envoyer un e-mail

Sujet résolu
    21 juin 2013 à 16:10:56

    Salut à tous

    Je voudrais envoyer un mail en utilisant les intents implicites, comme énoncé mais non développé dans le tuto.

    Après avoir tourné en rond pendant un moment sur la toile je vois que beaucoup utilisent ACTION_SEND et beaucoup conseillent ACTION_SENDTO.

    Avec SENDTO j'ai le message "No application can perform this action", même sur un téléphone réel
    Avec SEND ça demande quelle application lancer sans les filtrer (donc on me propose dropbox, calendrier, anki etc), et ce seulement si je suis en type text/plain, sinon j'ai pareil qu'avec sento.
    De plus, je n'ai jamais le champs "to" renseigné.

    Voici le code que j'utilise (je développe en API 7, au cas où ce serait important) : 

    Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
    //emailIntent.setType("text/html");
    emailIntent.setType("message/rfc822");
    //emailIntent.setType("text/plain"); 
    emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[] { "big.developer@gmail.com", ""});
    //emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, "superserie.developer@gmail.com");
    emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Message application android");
    emailIntent.putExtra(Intent.EXTRA_TITLE, "huh ?");
    emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Je suis le texte du message !");
    //emailIntent.putExtra(Intent.EXTRA_HTML_TEXT, Html.fromHtml("<b>Je suis le html du message</b>"));
    startActivity(Intent.createChooser(emailIntent, "Avec quelle application envoyer cet e-mail ?"));

    2 petites questions donc : 

    • Qu'est-ce qui cloche dans mon pauvre code ?
    • Quelle est la différence entre SEND et SENDTO ? Pourquoi google a-t-il décidé de faire 2 trucs séparés ?

    Merci de votre aide !

    EDIT : SUJET (presque) RESOLU

    L'émulateur android 2.1 (Nexus One) ne fonctionne pas avec SendTo, aucune idée de pourquoi
    En essayant sur mon smartphone réel, Send marche parfaitement selon le code que j'utilise
    Le code dans le post ci-dessous de stackoverflow est deprecated, il faut rajouter un charset. il faut également gérer la transformation des espaces en + ce qui donne la ligne

    "&body=" + URLEncoder.encode("Je suis le texte du message éé@\"### !", "UTF-8").replace("+", "%20");

    Et là normalement tout va bien

    Bon sinon ma question théorique persiste (mais je met résolu quand même) : quel intent est le plus adapté et pourquoi ?

    -
    Edité par Anaroyondo 24 juin 2013 à 11:13:45

    • Partager sur Facebook
    • Partager sur Twitter
      23 juin 2013 à 16:02:34

      Re UP !

      Ça m'étonne, je pensais pas que ce serait une question si dure :s

      • Partager sur Facebook
      • Partager sur Twitter
        23 juin 2013 à 16:36:00

        Salut.

        Tu peux utiliser ceci (pris sur stackoverflow):

        String uriText =
            "mailto:youremail@gmail.com" + 
            "?subject=" + URLEncoder.encode("some subject text here") + 
            "&body=" + URLEncoder.encode("some text here");
        
        Uri uri = Uri.parse(uriText);
        
        Intent sendIntent = new Intent(Intent.ACTION_SENDTO);
        sendIntent.setData(uri);
        startActivity(Intent.createChooser(sendIntent, "Send email")); 

        SENDTO n'utilise que l'URI que tu lui donnes, donc les putExtra ne servent à rien quand tu l'utilises.

        EDIT : je viens de voir que le forum déforme complètement le code.. voici la source 

        -
        Edité par TIK-TAK 23 juin 2013 à 16:39:05

        • Partager sur Facebook
        • Partager sur Twitter
          24 juin 2013 à 8:35:24

          Merci d'avoir répondu mais ça ne marche pas non plus...

          J'ai copié-collé ce code, en modifiant juste le URLEncoder dont la méthode encode(String) est dépréciée au profit de encode(String, String) (on rajoute le charset), donc j'ai ajouté le paramètre "UTF-8" à chaque fois. Eclipse ne trouve aucune erreur, et même aucun warning.

          Message d'android à la place du chooser : "Unsupported action, that action is not currently supported"

          J'avoue que je ne comprend pas du tout...

          EDIT : je viens d'essayer en exportant sur mon Nexus 4, ça marche très bien avec quelques bricolages, je corrige mon premier post, Sujet résolu^^

          Une idée de pourquoi ça ne marche pas sur émulateur ?

          -
          Edité par Anaroyondo 24 juin 2013 à 10:30:15

          • Partager sur Facebook
          • Partager sur Twitter

          [Android] Envoyer un e-mail

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown