Java Mail APIを使用していて、GmailのSMTPを介してメールを送信しようとしています。プログラムの仕組み:java.util.Scannerクラスを使用してユーザー入力を取得します-メール送信クラスで使用するさまざまなパラメーターをユーザーに要求しています。これは次のことを行います。
Message mailMessage = new MimeMessage(session);
mailMessage.setFrom(new InternetAddress("example@example.com"));
mailMessage.setRecipients(Message.RecipientType.TO,InternetAddress.parse(mail.getTo()));
mailMessage.setSubject(mail.getSubject());
mailMessage.setText(mail.getMessage());
Transport.send(mailMessage);
ASCII記号/文字を使用している限り、すべてが機能します。しかし、[õäöü]のような「国固有の」文字を使用したいときはいつでも、奇妙に見える記号がたくさん表示されます...
私がこれまでに使用したテクニック(私にはうまくいきません):
setHeader("Content-Type", "text/plain; charset=UTF-8");
setHeader("Content-Encoding","ISO-8859-9");
setContent(message, "text/plain; charset=iso-8859-2");
注:System.out.println()を実行して送信するメッセージを表示すると、IDE内にすべてが正しく表示されます。
編集:送信されたメッセージ本文が[õäöü]の場合の例Gmailでは[ä„”?]と表示されます。
編集:mailMessage.setText(MimeUtility.encodeText(mail.getMessage(), "UTF-8", "Q"));
を使用すると、Gmailの出力は次のようになります。
"=?UTF-8?Q?=C3=A4=E2=80=9E=E2=80=9D=EF=BF=BD;=0D=0A?="
別の編集:興味深いことに、私がそうするとき:mailMessage.setText(strVar + "õäöü", "ISO-8859-1");
それは実際に私の電子メールに「õäöü」をうまく追加します(しかし、文字列の最初の部分[strVar]はまだ?と[]でいっぱいです)。