繁体   English   中英

对两个收件人使用Java Desktop mailto

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM