I'm using Java Mail API and I'm trying to send an email through Gmail's SMTP. How my program works: java.util.Scanner class is used to get user input - I'm asking user for various parameters to be used in mail sending class; which does the following:
Message mailMessage = new MimeMessage(session);
mailMessage.setFrom(new InternetAddress("[email protected]"));
mailMessage.setRecipients(Message.RecipientType.TO,InternetAddress.parse(mail.getTo()));
mailMessage.setSubject(mail.getSubject());
mailMessage.setText(mail.getMessage());
Transport.send(mailMessage);
Everything works as long as I use ASCII symbols/ chars. But whenever I want to use "country-specific" characters - like [õäöü] - I get bunch of weird-looking symbols...
Techniques I've used so far(which don't work for me):
setHeader("Content-Type", "text/plain; charset=UTF-8");
setHeader("Content-Encoding","ISO-8859-9");
setContent(message, "text/plain; charset=iso-8859-2");
Note: everything is displayed correctly inside an IDE when System.out.println() is performed to display the message to be sent.
EDIT: e.x. when sent message body is [õäöü] It's displayed [ä„”?] in Gmail.
EDIT: When mailMessage.setText(MimeUtility.encodeText(mail.getMessage(), "UTF-8", "Q")); is used, then the output in Gmail is following:
"=?UTF-8?Q?=C3=A4=E2=80=9E=E2=80=9D=EF=BF=BD;=0D=0A?="
ANOTHER EDIT: Interestingly, when I do: mailMessage.setText(strVar + "õäöü", "ISO-8859-1");
It actually appends "õäöü" nicely in my email (but the first part[strVar] of the string is still full of ?'s and []'s).
strVar?, and what if you assignstrVarimmediately before thatmailMessate.setText(..)? Maybe the content you receive from the scanner is not the same as the string that does work.message.setContent("<h5>[õäöü]</h5><h1>" + strVar + "</h1>", "text/html");When I get an mail HTML is parsed correctly, so is "[õäöü]", butstrVarseems to "come" incorrectly. I have a classInputandget()method inside it:public String get(){ /* Scanner declaration here */ return scanner.nextLine(); }And in second classMailSenderI initializestrVarlike that: ` /* Input class declaration */ String strVar = input.get(); ` // Sorry, hard to write code in here :)