Java Mail API に問題があります。
メールを正常に送信できますが、一部の特殊文字 (チェコ語、スロバキア語などの ISO-8859-2 言語から) がメールに表示されません。IDE出力でも壊れています。
私は何を間違っていますか?
Message msg = new MimeMessage(session);
msg.setContent(message, "text/plain; charset=iso-8859-2")
Java Mail API に問題があります。
メールを正常に送信できますが、一部の特殊文字 (チェコ語、スロバキア語などの ISO-8859-2 言語から) がメールに表示されません。IDE出力でも壊れています。
私は何を間違っていますか?
Message msg = new MimeMessage(session);
msg.setContent(message, "text/plain; charset=iso-8859-2")
msg.setContent(message、 "text / plain; charset = UTF-8");
あなたが与えた文字セットの代わりに?
マルチパートを使用して解決策を見つけました。ここにコードがあります:
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(from));
MimeMultipart multipart = new MimeMultipart();
msg.setRecipient(Message.RecipientType.TO, new InternetAddress(recipient));
MimeBodyPart tmpBp = new MimeBodyPart();
tmpBp.setContent(message,"text/plain; charset=utf-8");
multipart.addBodyPart(tmpBp);
msg.setContent(multipart);
Transport.send(msg);
むしろUTF-8
、文字セットとして使用し、まったく同じ文字セットを使用するように IDE コンソールを構成してください。教えてくれなかったのでどのIDEを使っているかわかりませんが、EclipseならWindow > Preferences > General > Workspace > Text file encoding > Other > UTF-8で変更できます。
それでも問題が解決しない場合、問題は別の場所にあります。間違ったエンコーディングを使用してファイルからメッセージを読み取っている可能性があります。そのためInputStreamReader
には、charset を 2 番目のコンストラクター引数として使用する必要があります。
代わりにsetText
クラスのメソッドを使用する必要がありますMimeMessage
setContent
/**
* Convenience method that sets the given String as this part's
* content, with a MIME type of "text/plain" and the specified
* charset. The given Unicode string will be charset-encoded
* using the specified charset. The charset is also used to set
* the "charset" parameter.
*
* @param text the text content to set
* @param charset the charset to use for the text
* @exception MessagingException if an error occurs
*/
public void setText(String text, String charset)
throws MessagingException {