我想在Java桌面应用程序中实现“发送反馈”选项。一个会弹出一个框供用户输入评论,然后将其与应用程序窗口的屏幕截图一起发送给我们。
如何将数据传达给我们的最佳方式?我想到了两个明显的解决方案:
哪一个最好,还是有更好的选择?
答案 0 :(得分:7)
由于与SMTP服务器的连接可能会被阻止,因此webserivce会好得多。
另一个想法是使用Google文档。这就像网站的想法,但你不需要自己设置任何服务器端的东西。您可以使用要收集的字段创建Google文档电子表格,然后让您的Java应用程序使用google docs API将提交内容写入spreadhseet。然后向电子表格添加通知,以便在写入新行时自动向您发送电子邮件。
答案 1 :(得分:1)
网络服务听起来更可靠,更不笨拙。 客户端通常可以在没有防火墙问题的情 更容易设置,维护和处理HTTP服务器和请求。
答案 2 :(得分: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请求并使用上面显示的方法将它们转发为电子邮件。