Я знаю, что это старо, но это может помочь кому-то еще. Я не понимаю, как это решение / взлом мог сделать что-нибудь для этой проблемы.
Эта строка задает адрес для рецептов [0]:
InternetAddress[] recips = InternetAddress.parse(addresses, false);
и этот конструктор здесь ничего не меняет, так как кодировка применяется к личному имени (в данном случае пустому), а не к адресу.
new InternetAddress(recips[i].getAddress(), recips[i].getPersonal(), "utf-8");
Но что-то подобное ниже будет работать при условии, что почтовый сервер может обрабатывать закодированных получателей! (что пока не кажется обычным ....)
recip = MimeUtility.encodeText(recip, "utf-8", "B");
InternetAddress[] addressArray = InternetAddress.parse(recip , false);
msg.addRecipients(MimeMessage.RecipientType.TO, addressArray);