4 votes

Mise en oeuvre d'une fonctionnalité "Envoyer des commentaires" dans une application de bureau Java

Je voudrais implémenter une option "Envoyer un commentaire" dans une application de bureau Java. Une option qui fera apparaître une boîte pour que l'utilisateur saisisse un commentaire, puis nous l'envoie avec une capture d'écran de la fenêtre de l'application.

Quel serait le meilleur moyen de nous communiquer les données ? Deux solutions évidentes me viennent à l'esprit:

  • Email - Je pense que l'application se connecterait à un serveur SMTP configuré par nous, avec le nom d'utilisateur/mot de passe d'une manière ou d'une autre caché dans le code. SMTP sur SSL pour la sécurité (pas des données envoyées, mais du nom d'utilisateur/mot de passe SMTP).
  • Service web - assez explicite.

Lequel de ces moyens serait le meilleur, ou y a-t-il une meilleure alternative ?

7voto

BigJoe714 Points 3189

Un webservice serait bien meilleur, car la connexion à un serveur SMTP pourrait être bloquée.

Une autre idée serait d'utiliser Google Docs. Ce serait similaire à l'idée du site web, mais vous n'auriez pas besoin de configurer quoi que ce soit du côté serveur. Vous pourriez créer une feuille de calcul Google Docs avec les champs que vous collecterez, puis faire en sorte que votre application Java soumette les données à la feuille de calcul en utilisant l'API Google Docs. Ensuite, ajoutez une notification à la feuille de calcul pour vous envoyer automatiquement un e-mail lorsqu'une nouvelle ligne est écrite.

1voto

Murali VP Points 2555

Un service web semble plus fiable et moins maladroit. Les clients peuvent généralement établir des connexions HTTP sans problèmes de pare-feu. Beaucoup plus facile à configurer, entretenir et traiter les serveurs HTTP et les requêtes.

1voto

sfussenegger Points 16204

Comme d'autres l'ont mentionné, les pare-feu posent problème avec SMTP. Cependant, il existe un moyen simple de livrer des e-mails sans héberger votre propre infrastructure ou des mots de passe "cachés". Vous pourriez simplement créer un compte de messagerie gratuit, par exemple gmail, et envoyer des e-mails directement à cette adresse. Comme vous n'utilisez pas le serveur SMTP de Gmail comme relais, aucun nom d'utilisateur ni mot de passe n'est nécessaire.

public static String[] lookupMailHosts(final String domainName) throws NamingException {
    final InitialDirContext iDirC = new InitialDirContext();
    final Attributes attributes = iDirC
            .getAttributes("dns:/" + domainName, new String[] { "MX" });
    final Attribute attributeMX = attributes.get("MX");
    if (attributeMX == null) {
        return new String[] { domainName };
    }
    final String[][] pvhn = new String[attributeMX.size()][2];
    for (int i = 0; i < attributeMX.size(); i++) {
        pvhn[i] = ("" + attributeMX.get(i)).split("\\s+");
    }

    // trier les enregistrements MX par valeur RR (le plus bas est préféré)
    Arrays.sort(pvhn, new Comparator() {
        public int compare(final String[] o1, final String[] o2) {
            return Integer.parseInt(o1[0]) - Integer.parseInt(o2[0]);
        }
    });

    // mettre les noms d'hôtes triés dans un tableau, se débarrasser de tout '.' final
    final String[] sortedHostNames = new String[pvhn.length];
    for (int i = 0; i < pvhn.length; i++) {
        sortedHostNames[i] = pvhn[i][1].endsWith(".") ? pvhn[i][1].substring(0, pvhn[i][1]
                .length() - 1) : pvhn[i][1];
    }
    return sortedHostNames;
}

par exemple:

public static void main(String[] args) throws Exception {
    // affiche [gmail-smtp-in.l.google.com, alt1.gmail-smtp-in.l.google.com, alt2.gmail-smtp-in.l.google.com, alt3.gmail-smtp-in.l.google.com, alt4.gmail-smtp-in.l.google.com]
    System.out.println(Arrays.asList(lookupMailHosts("gmail.com")));
}

ainsi vous utiliseriez "gmail-smtp-in.l.google.com" comme premier choix pour javax.mail:

Properties props = new Properties();
props.setProperty("mail.smtp.host", lookupMailHosts("gmail.com")[0]);
// ... autres propriétés
Session smtpSession = Session.getInstance(props, null)

Vous pourriez même combiner cette approche avec un service simple de type HTTP vers SMTP hébergé sur AppEngine. Tout ce qu'il aurait à faire serait de recevoir des requêtes HTTP POST et de les transmettre sous forme d'e-mail en utilisant la méthode décrite ci-dessus.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X