0

使用 Java 发送电子邮件,我将如何在电子邮件地址旁边打印名称,最好采用这种样式?:

Joe A. Blow <joe.a.blow@host.org>

我在 *.properties 文件中有我的电子邮件列表,其中包含如下数据:

email_list_3 = Bob Smith<bob.smith@acme.com>,Jane Doe<jane.doe@acme.com, Betty Crocker<betty.crocker@acme.com

我正在使用此函数将属性文件中的每个电子邮件列表(例如“email_list_3”)作为数组列表返回:

private static ArrayList setEmailList(String email_list_name)throw Exception { Properties props = new Properties(); ArrayList email_list = new ArrayList();

try {
    props.load(MailSender.class.getResourceAsStream("/email_lists.properties"));
    email_list.addAll(Arrays.asList(props.getProperty(email_list_name).split(",")));

}// end try
catch (Exception e) {
    logger.error("Failure populating email list: " + email_list_name + "\n",e);
}

return email_list;

}// 结束函数 setEmailLists()

接下来,我将收集电子邮件地址(我假设名称仍然在他们身边?)到这样的 InternetAddresses 数组中

ArrayList<String> recipientsArray    = null;
ArrayList<InternetAddress> addressTo = new ArrayList<InternetAddress>();

recipientsArray = getAnArrayListOfEmailAddresses();

for (String tempAddress: recipientsArray) {
    if (tempAddress != null) {
        addressTo.add(new InternetAddress(tempAddress));
    }
}

这就是我将我的地址插入电子邮件的方式:

 InternetAddress[] to = new InternetAddress[addressTo.size()];
 to                    = addressTo.toArray(to);

 // processed in a for loop
 tempAddress = (to[i]).getAddress();

 MimeMessage msg  =  null;
 msg     = new MimeMessage(session);
 msg.setSubject(subject);
 msg.setFrom(new InternetAddress(fromAddressStringl));
 msg.setRecipients(Message.RecipientType.TO, tempAddress);

对我来说,现在,它看起来像是在电子邮件地址旁边显示的名称,我使用 InternetAddress 的另一个构造函数,它接受两个参数,地址和名称。

这是正确的还是有一个设置我可以更改,这样当Java从我的文件中解析名称+地址组合项时,它会自动执行它?

非常感谢提前

史蒂夫

4

1 回答 1

2

你把这弄得太复杂了。

您有一堆 InternetAddress 对象,只需直接使用它们来设置收件人:

 InternetAddress[] to = new InternetAddress[addressTo.size()];
 to                    = addressTo.toArray(to);

 MimeMessage msg  = new MimeMessage(session);
 msg.setSubject(subject);
 msg.setFrom(new InternetAddress(fromAddressStringl));
 msg.setRecipients(Message.RecipientType.TO, to);

您使用 getAddress() 将地址字段与个人姓名字段分开;不要那样做。

此外,您可以使用 InternetAddress.parse() 方法将您的属性解析为 InternetAddress 对象数组,而不是自己用逗号分割。

于 2012-08-24T20:18:29.317 回答