Java电子邮件:在电子邮件地址旁边输入要打印的名称

时间:2012-08-24 19:42:19

标签: javamail names

使用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)throws Exception {     属性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从我的文件中解析名称+地址组合项时,它会自动执行吗?

非常感谢提前

史蒂夫

1 个答案:

答案 0 :(得分: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对象数组,而不是自己拆分逗号。