使用默认邮件客户端从Java发送电子邮件
我有Java代码,可以发送电子邮件。 默认邮件客户端将正确打开,收件人和主题也会顺利设置,但正文未设置。没有显示尸体。这是我的密码:使用默认邮件客户端从Java发送电子邮件,java,Java,我有Java代码,可以发送电子邮件。 默认邮件客户端将正确打开,收件人和主题也会顺利设置,但正文未设置。没有显示尸体。这是我的密码: public void emailOhneStandort() throws URISyntaxException { try { composeEmail("benjamin.koubik@daimler.com", "Thanks for the snippet!", "Hello Raffael,\
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;
}
通过在Windows上的尝试,我发现我需要用
^
退出&
因此,如果我这样做:
C:\>start mailto:test@example.com?subject=foo&body=bar
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
C:\>start mailto:test@example.com?subject=foo^&body=bar
然后它就如预期的那样工作了
我敢说,在其他环境中也会出现类似的情况,但目前还无法测试
记录在案,这似乎值得补充一点,这是一个有点奇怪的要求,如果这是您为生产代码所做的事情,将由您以外的任何人使用,那么这可能不是最好的方法 对。还可以添加在unix环境中的
\&
,\?
和\%
。(或者只是将整个字符串放在单引号中,但我不确定它是否是跨终端的)我知道OP使用的是不同的方法,但在使用该方法时,我不必转义任何内容(至少在Windows上)。如果没有忽略exec
调用中的错误消息,您就会得到错误的线索。