我想在Java桌面應用程序中實現「發送反饋」選項。一個會彈出一個框供用戶輸入評論,然後將其發送給我們以及應用程序窗口的屏幕截圖。在Java桌面應用程序中實現「發送反饋」功能
將數據傳達給我們的最佳方式是什麼?想到兩個明顯的解決方案:
- 電子郵件 - 我想應用程序將連接到由我們設置的SMTP服務器,用戶名/密碼以某種方式隱藏在代碼中。基於SSL的SMTP安全性(不是要發送的數據,而是SMTP用戶名/密碼)。
- Web服務 - 相當自我解釋。
其中哪個最好,還是有更好的選擇?
我想在Java桌面應用程序中實現「發送反饋」選項。一個會彈出一個框供用戶輸入評論,然後將其發送給我們以及應用程序窗口的屏幕截圖。在Java桌面應用程序中實現「發送反饋」功能
將數據傳達給我們的最佳方式是什麼?想到兩個明顯的解決方案:
其中哪個最好,還是有更好的選擇?
webserivce會好得多,因爲連接到SMTP服務器可能會被阻止。
另一個想法是使用Google文檔。這將像網站的想法,但你不需要自己設置任何服務器端的東西。您可以創建一個Google Docs電子表格,其中包含您將要收集的字段,然後讓您的Java應用程序使用Google文檔API將提交內容寫入到spreadhseet。然後向電子表格添加通知,以便在寫入新行時自動向您發送電子郵件。
Web服務聽起來更可靠,更笨拙。 客戶端通常可以在沒有防火牆問題的情況下進行HTTP連接。 更容易設置,維護和處理HTTP服務器和請求。
正如其他人所說,防火牆是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請求並使用上面顯示的方法將它們轉發爲電子郵件。
谷歌文檔是一個很棒的想法。我可能會爲我自己的項目走這條路。 – 2010-02-18 17:05:03
謝謝......我非常喜歡Google Docs的想法。我們現在要製作原型:) – William 2010-02-18 17:46:55
這確實是一個很棒的想法。 – 2010-02-19 04:23:58