Javaデスクトップアプリケーションの自動エラー報告ツールを作成しようとしています。クライアントのアプリケーションがクラッシュするたびに、エラー報告をできるだけ簡単に送信することを目的としています。mailto URIがJava.DesktopとWindows/MS Outlookの間で切り捨てられました
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:[email protected]?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();
}
}
アイデアありがとう。私は最後の数日でオプション2を調査しています。 Attachmentオプションはmailto URI仕様の正式な部分ではなく、一部の古い電子メールクライアント(outlook 98/2003)がこの要素をサポートしていましたが、現代のもの(Outlook 2010)はそうではありません。もうオプションはありません。 – JohnnyO
興味深い。 2番目の考えでは、おそらく賢明です。自動的にファイルを添付すると、セキュリティを破ることが容易になります。 – collapsar