2010-02-18 37 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請求並使用上面顯示的方法將它們轉發爲電子郵件。