java - 使用默认邮件客户端从 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;
}
解决方案
通过在 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
然后它按预期工作。
我敢说在其他环境中也会发生类似的情况,但目前无法测试。
作为记录,似乎值得补充一点,这是一个有点奇怪的要求,如果你正在为生产代码做一些事情,除了你自己之外的任何人都将使用它,这可能不是最好的方法!
推荐阅读
- html - 如何防止html元素相互重叠?
- python - 美丽的汤:在 a内查找标签,但不在
- git - git bash 说我在一个已删除的分支上(在已删除的存储库中)
- python - 正则表达式来区分 a 和 a'
- function - 是否可以在 Isabelle 的函数域中添加假设?
- java - 如何进入.hasNext() 以检测何时将 Ctrl - D 输入到命令提示符中?
- java - 使用鼠标单击选择 jCombobox 项
- django - 用户 ID 在 DJANGO 的数据库中不存在
- python - 试图在 Tkinter 中调用我的模型,但它没有等到单击按钮
- python - 虽然循环根本没有执行,其他一切看起来都正确