[英]mailto URI truncated between Java.Desktop and Windows/MS outlook
我正在嘗試為我們的Java桌面應用程序創建一個自動錯誤報告工具。 這樣做的目的是讓客戶在我們的應用程序崩潰時盡可能輕松地向我們發送錯誤報告。
使用Desktop.mail API,我能夠編寫易於編輯並從用戶發送的消息,但是我遇到了多個平台(尤其是大多數客戶使用的Windows 7和MS Outlook)上的系統限制
當我運行下面的示例代碼時,您會注意到顯示的電子郵件會截斷所包含的堆棧跟蹤。 我相信這與底層系統中命令行或URI的最大長度有關。
有沒有更好的方法可以從不受此限制的錯誤報告中制作電子郵件?
import java.awt.Desktop;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.net.URI;
import java.net.URLEncoder;
public class Scratchpad {
public static void main(String[] args) throws Exception {
try {
generateLongStackTrace();
} catch (Error e) {
URI uri = createMailURI(e);
// this will correctly pop up the system email client, but it will truncate the message
// after about 2K of data (this seems system dependent)
Desktop.getDesktop().mail(uri);
}
}
// Will eventually generate a really long stack overflow error
public static void generateLongStackTrace() throws Exception {
generateLongStackTrace();
}
public static URI createMailURI(Error e) throws Exception {
StringBuilder builder = new StringBuilder();
builder.append("mailto:foo@example.com?body=");
// encodes the stack trace in a mailto URI friendly form
String encodedStackTrace = URLEncoder.encode(dumpToString(e), "utf-8").replace("+", "%20");
builder.append(encodedStackTrace);
return new URI(builder.toString());
}
// Dumps the offending stack trace into a string object.
public static String dumpToString(Error e) {
StringWriter sWriter = new StringWriter();
PrintWriter writer = new PrintWriter(sWriter);
e.printStackTrace(writer);
writer.flush();
return sWriter.toString();
}
}
在ie以及Windows命令行的長度(請參見此處 , 此處 , 此處和此處 )的長度中都有可允許的url的長度限制-我似乎遇到了其中一種(盡管我承認我沒有嚴格檢查過)。
但是,我認為這是一個合理的假設,即使您可以繞過上述限制而在台式機應用程序之間通用傳輸緩沖區的長度(除非您使用專用的api來遠程控制目標應用程序)的長度也會受到某種限制而不會出現漏洞。
因此,我建議采用以下策略之一:
通過Web服務器分發。
使用附件發送郵件(有關詳細信息, 請參見此處 ):
祝好運 !
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.