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)throws 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の他のコンストラクターを使用している電子メールアドレスの横に名前が表示されているように見えます。これは、addressとnameの2つの引数を取ります。

それは正しいですか、それとも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 に答える