实施';发送反馈';Java桌面应用程序中的功能

实施';发送反馈';Java桌面应用程序中的功能,java,web-services,email,desktop,feedback,Java,Web Services,Email,Desktop,Feedback,我想在Java桌面应用程序中实现“发送反馈”选项。它会弹出一个框供用户输入评论,然后将其与应用程序窗口的屏幕截图一起发送给我们 向我们传达数据的最佳方式是什么?两个显而易见的解决方案浮现在脑海中: 电子邮件-我认为应用程序将连接到我们设置的SMTP服务器,用户名/密码不知何故隐藏在代码中。SMTP over SSL以确保安全(不是发送的数据,而是SMTP用户名/密码) Web服务-非常不言自明 以下哪一项最好,或者有更好的选择吗?web服务听起来更可靠,也不那么笨拙。 客户端通常可以在没有防

我想在Java桌面应用程序中实现“发送反馈”选项。它会弹出一个框供用户输入评论,然后将其与应用程序窗口的屏幕截图一起发送给我们

向我们传达数据的最佳方式是什么?两个显而易见的解决方案浮现在脑海中:

  • 电子邮件-我认为应用程序将连接到我们设置的SMTP服务器,用户名/密码不知何故隐藏在代码中。SMTP over SSL以确保安全(不是发送的数据,而是SMTP用户名/密码)
  • Web服务-非常不言自明

以下哪一项最好,或者有更好的选择吗?

web服务听起来更可靠,也不那么笨拙。 客户端通常可以在没有防火墙问题的情况下进行HTTP连接。
设置、维护和处理HTTP服务器和请求要容易得多。

由于与SMTP服务器的连接可能会被阻止,因此webserivce会好得多


另一个想法是使用谷歌文档。这就像是网站的想法,但你不需要自己设置任何服务器端的东西。您可以使用将要收集的字段创建一个Google Docs电子表格,然后让Java应用程序使用Google Docs API将提交内容写入spreadhseet。然后将通知添加到电子表格中,以便在写入新行时自动向您发送电子邮件。

正如其他人提到的,SMTP存在防火墙问题。尽管如此,还是有一种简单的方法可以在不托管自己的基础设施或“隐藏”密码的情况下发送邮件。您只需注册一个免费邮件帐户,例如gmail,然后直接将邮件发送到此地址。由于您不使用Gmail的SMTP服务器作为中继,因此不需要用户名和密码

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+");
    }

    // sort the MX RRs by RR value (lower is preferred)
    Arrays.sort(pvhn, new Comparator<String[]>() {
        public int compare(final String[] o1, final String[] o2) {
            return Integer.parseInt(o1[0]) - Integer.parseInt(o2[0]);
        }
    });

    // put sorted host names in an array, get rid of any trailing '.'
    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;
}
因此,您可以使用“gmail smtp in.l.google.com”作为javax.mail的首选:

Properties props = new Properties();
props.setProperty("mail.smtp.host", lookupMailHosts("gmail.com")[0]);
// ... other properies
Session smtpSession = Session.getInstance(props, null)

您甚至可以将此方法与托管在AppEngine上的简单HTTP到SMTP服务相结合。它所要做的就是接收HTTP POST请求,并使用上面所示的方法将它们作为电子邮件转发。

Google Docs是一个很棒的主意。我可能会为我自己的项目走这条路。谢谢。。。我真的很喜欢谷歌文档的想法。我们现在要做的是原型:)这确实是一个很棒的想法。我们已经做了谷歌文档解决方案的原型,它工作得很好,所以我们要做的是:)
Properties props = new Properties();
props.setProperty("mail.smtp.host", lookupMailHosts("gmail.com")[0]);
// ... other properies
Session smtpSession = Session.getInstance(props, null)