首页 > 解决方案 > 使用默认邮件客户端从 Java 发送电子邮件

问题描述

我有 Java 代码,应该发送电子邮件。默认邮件客户端可以正确打开,并且收件人和主题都可以顺利设置,但没有设置正文。没有显示身体。这是我的代码:

public void emailOhneStandort() throws URISyntaxException {

    try {

        composeEmail("benjamin.koubik@daimler.com", "Thanks for the snippet!",
                "Hello Raffael,\r\nthis mail was initiated by Java.");
    } catch (Exception err) {
        err.printStackTrace();
    }
    System.out.println("Done!");
}

public static void composeEmail(String receiver, String subject, String body) throws Exception {

    String mailto = "mailTo:" + receiver;
    mailto += "?subject=" + uriEncode(subject);
    mailto += "&body=" + uriEncode(body);

    String cmd = "";
    String os = System.getProperty("os.name").toLowerCase();
    if (os.contains("win")) {
        cmd = "cmd.exe /c start " + mailto;
    } else if (os.contains("osx")) {
        cmd = "open " + mailto;
    } else if (os.contains("nix") || os.contains("aix") || os.contains("nux")) {
        cmd = "xdg-open " + mailto;
    }
    // Call default mail client with paramters
    Runtime.getRuntime().exec(cmd);

}

private static String uriEncode(String in) {
    String out = new String();
    for (char ch : in.toCharArray()) {
        out += Character.isLetterOrDigit(ch) ? ch : String.format("%%%02X", (int) ch);
    }
    return out;
}

标签: java

解决方案


通过在 Windows 上尝试,我发现我需要&使用^.

所以,如果我这样做:

C:\>start mailto:test@example.com?subject=foo&body=bar

我收到以下错误:

'body' is not recognized as an internal or external command, operable program or batch file.

我的电子邮件客户端打开时填充了主题而不是正文。

如果我这样做:

C:\>start mailto:test@example.com?subject=foo^&body=bar

然后它按预期工作。

我敢说在其他环境中也会发生类似的情况,但目前无法测试。

作为记录,似乎值得补充一点,这是一个有点奇怪的要求,如果你正在为生产代码做一些事情,除了你自己之外的任何人都将使用它,这可能不是最好的方法!


推荐阅读