[英]mailto URI truncated between Java.Desktop and Windows/MS outlook
[英]Using Java Desktop mailto for two recipients
我正在尝试向Java程序添加反馈按钮以进行工作。 我希望该按钮实际发送一封电子邮件给自己和另一个人。 所有员工都有相同的默认电子邮件应用程序,因此使用桌面邮件方法可以正常工作。
我设法与1个电子邮件收件人一起使用。 它将正确打开电子邮件客户端,启动新电子邮件,然后将收件人放置在地址行中。 问题是当我尝试添加两个电子邮件地址时。
int result = JOptionPane.showOptionDialog(null, panel, "Feedback", JOptionPane.YES_NO_OPTION,
JOptionPane.INFORMATION_MESSAGE, null, options1, null);
if(result == JOptionPane.NO_OPTION){
try {
Desktop.getDesktop().mail(new URI("mailto:Chuck.Norris@yahoo.com"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
因此,这样做非常完美。
我试过简单地用逗号分隔地址,如下所示:
Desktop.getDesktop().mail(new URI("mailto:Chuck.Norris@yahoo.com","Bill.Clinton@gmail.com"));
但这给了我一个错误,唯一的选择是实际删除第二个参数。
最后,我尝试使用这样的String []:
String[] mailAddressTo = {"Chuck.Norris@yahoo.com","Bill.Clinton@gmail.com"};
然后将其插入到mailto方法中,如下所示:
Desktop.getDesktop().mail(new URI("mailto:"+mailAddressTo));
但是电子邮件地址出来了
[Ljava.lang.String; @5e9394f7
一旦打开电子邮件客户端。
我尝试过在线搜索,虽然确实找到了一些有关通过Java通过Desktop.mail以外的方法使用Java发送邮件的解决方案-但我发现与使用Desktop来完成此操作无关。
如果有人能让我知道如何进行这项工作,我将不胜感激!
它有助于查看文档而不是猜测。
URI构造函数列表显示不存在需要两个String的URI构造函数。 这就是为什么您的第一种方法失败了的原因。
在Java中,所有数组都扩展Object并继承Object的默认toString方法 。 用+
连接对象会自动调用每个对象的toString方法,这就是第二种方法产生其结果的原因。
mailto:
URL格式的正式定义是RFC 2368 ,它指出可以用逗号分隔来指定多个收件人。 因此,您处于正确的轨道上。
从Java 8开始,您可以简单地使用String.join来连接地址:
String[] mailAddressTo = {"Chuck.Norris@yahoo.com","Bill.Clinton@gmail.com"};
Desktop.getDesktop().mail(new URI("mailto:" + String.join(",", mailAddressTo)));
但是,URI类的文档指出,单参数构造函数假定其String参数已经正确转义。 虽然您提供的示例电子邮件地址确实不需要转义,但使用所有可能的地址进行这种假设并不安全。 为了解决这个问题,您可以使用多参数URI构造函数,该构造函数将为您执行正确的URI转义:
String[] mailAddressTo = { "Chuck.Norris@yahoo.com", "Bill.Clinton@gmail.com" };
Desktop.getDesktop().mail(new URI("mailto", String.join(",", mailAddressTo), null));
如果您使用的Java版本早于8,则可以自己构建字符串:
String[] mailAddressTo = { "Chuck.Norris@yahoo.com", "Bill.Clinton@gmail.com" };
StringBuilder addressList = new StringBuilder();
String separator = "";
for (String address : mailAddressTo) {
addressList.append(separator).append(address);
separator = ",";
}
Desktop.getDesktop().mail(new URI("mailto", addressList.toString(), null));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.