2010-02-18 74 views
4

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

将数据传达给我们的最佳方式是什么?想到两个明显的解决方案:

  • 电子邮件 - 我想应用程序将连接到由我们设置的SMTP服务器,用户名/密码以某种方式隐藏在代码中。基于SSL的SMTP安全性(不是要发送的数据,而是SMTP用户名/密码)。
  • Web服务 - 相当自我解释。

其中哪个最好,还是有更好的选择?

回答

6

webserivce会好得多,因为连接到SMTP服务器可能会被阻止。

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

+0

谷歌文档是一个很棒的想法。我可能会为我自己的项目走这条路。 – 2010-02-18 17:05:03

+0

谢谢......我非常喜欢Google Docs的想法。我们现在要制作原型:) – William 2010-02-18 17:46:55

+0

这确实是一个很棒的想法。 – 2010-02-19 04:23:58

1

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

1

正如其他人所说,防火墙是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; 
} 

例如:

public static void main(String[] args) throws Exception { 
    // prints [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"))); 
} 

,因此会使用 “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请求并使用上面显示的方法将它们转发为电子邮件。