5

我想鼓励我们的 RCP 应用程序的用户将问题详细信息发送给我们的支持部门。为此,我在标准错误对话框中添加了“联系支持”小部件。

我已经设法使用 URI 标头通过 Java 6 的 JDIC 调用发送堆栈跟踪:Desktop.getDesktop().mail(java.net.URI). 这将启动用户的邮件客户端,准备好让他们添加评论,然后点击发送。

我喜欢启动电子邮件客户端,因为它是用户习惯的,它告诉支持人员很多关于用户的信息(签名、联系方式等),我真的不想使用 Java Mail

我想做的是将日志文件和堆栈跟踪作为文件附加,因此没有最大长度要求,用户会看到一封漂亮干净的电子邮件,并且支持部门有更多信息可供使用。

我可以用我正在采取的方法做到这一点吗?或者,还有更好的方法?

编辑:我在 OSGi 上下文中,所以捆绑 JDIC 是必要的。如果可能的话,我希望提供尽可能少的依赖项,并且为多个平台捆绑 JDIC 听起来并不有趣,尤其是对于这样一个小功能。

JavaMail 可能是合适的,但事实上这将在我们公司客户的桌面上。配置的设置/发现必须是透明的、自动的和可靠的。关于 JavaMail,配置似乎只是手动的。是这样吗?

我最喜欢的答案是使用Desktop.open()*.eml 文件。不幸的是Outlook Express(而不是 Outlook)打开 eml 文件。我不知道这是否是通常或默认配置 Windows 以打开这样的 EML 文件。这是平常的吗?或者是否有另一种基于文本的格式,a) 易于生成,b) 默认情况下在用户已经使用的同一电子邮件客户端中打开?

4

6 回答 6

3

您可以保存一个临时的 .eml 文件,然后 Desktop.getDesktop().open(emlFile)
编辑:正如您所指出的,不幸的是,这将打开 Outlook Express 而不是 Outlook。
但是,如果您安装了 Windows Live Mail,它将使用它。

于 2008-09-17T10:57:12.647 回答
1

如果您使用的是 JDK 6(您确实应该使用),那么 Desktop API 现在是 JRE 的一部分。有关详细信息,请参阅http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javase6/desktop_api/

于 2008-09-17T14:28:03.937 回答
1

作为处理相同问题的完全不同的方式,我们使用带有 XML-RPC 接口的错误跟踪器,并且我们的(RCP 也是,顺便说一句)应用程序使用自定义提交对话与该接口进行对话。这意味着我们可以发送日志文件来帮助诊断问题,而无需用户找到它们。

我确信大多数错误跟踪器都有类似的东西可用。我们使用 Jira,它运行良好(显然,他们刚刚发布了一个免费的个人版本,可以轻松尝试)。

于 2008-09-17T18:31:46.267 回答
0

使用该方法,您可以使用 URI 设置主题行和正文

mailto:me@here.com?SUBJECT=Support mail&BODY=This is a support mail

但是,主题和正文的长度会有一些限制

我无法想到使用此方法或类似方法附加文件(无需将 javamail 添加到您的应用程序)

于 2008-09-17T10:38:07.467 回答
0

JDIC 可能并不总是在您的用户平台上可用。一个很好的方法是使用 javamail API。您可以按照 SUN 在本教程中的说明发送多部分电子邮件:

发送附件

于 2008-09-17T12:02:12.960 回答
0
import java.awt.Desktop;
import java.io.File;
import java.net.URI;


public class TestMail {

    public static void main(String[] args) {
        try {       
         Runtime.getRuntime().exec(
                  new String[] {"rundll32", "url.dll,FileProtocolHandler",
                        "mailto:a@a.de?subject=someSubject&cc=a@a.de&bcc=a@a.de&body=someBodyText&Attach=c:\\test\\test.doc"}, null
                  );


        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
于 2010-10-25T12:31:24.697 回答