code to send email is following:
MimeMessage msg = new MimeMessage(session);
msg.setSubject("subject", "UTF-8"); // here you specify your subject encoding
msg.setContent("yourBody", "text/plain; charset=utf-8");
msg.setFrom("senderAddress");
msg.addRecipient(Message.RecipientType.TO, new InternetAddress(address));
Transport.send(msg);
My probelem is that as as i have encoded subject in utf-8 how can i encode recipient address ie. new InternetAddress(address)
JavaMail's MimeMessage uses InternetAddress:
This class represents an Internet email address using the syntax of RFC822. Typical address syntax is of the form "[email protected]" or "Personal Name < [email protected] >".
RFC822 format says:
Note that RFC 822 limits the character repertoire to ASCII. In practice, other characters (such as ä or é) usually work inside quoted strings used for commenting purposes (and comments), but they must not be used in addresses proper.
InternetAddress uses a personal name:
If the name contains non US-ASCII characters, then the name will be encoded using the specified charset as per RFC 2047. If the name contains only US-ASCII characters, no encoding is done and the name is used as is.
To set charset for encoding, there is a InternetAddress#constructor. Looking at sources:
public InternetAddress(String address, String personal, String charset)
throws UnsupportedEncodingException {
this.address = address;
setPersonal(personal, charset);
}
it just calls setPersonal(..), thus choose the way which is the most convenient for you.
To lookup a charset, use Charset.forName().