使用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从我的文件中解析名称+地址组合项时,它会自动执行吗?
非常感谢提前
史蒂夫
答案 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对象数组,而不是自己拆分逗号。