Делается так:
MimeMessage message = new MimeMessage(mailSession);
message.setSubject(subject, "utf-8");
сообщение в этом случае должно быть типа MimeMessage, потому как в интерфейсе Message нет метода setSubject() с аргументом, указывающим кодировку.
Но можно сделать и так:
Message message = new MimeMessage(mailSession);
message.setSubject(MimeUtility.encodeText(subject, "utf-8", "Q"));
Для тела сообщения кодировка задаётся вместе с mime-типом:
message.setContent(bodyText, "text/plain;charset=UTF-8");
