メールを送信していて、正しく受信していますが、件名のエンコードが正しくありません。 「invitación」を送信していますが、「invitaci?n」を受信しています。メッセージの内容は問題ありません。
メッセージの内容は、件名が文字列変数に設定されている間、速度テンプレートの変換からのものです。
私はググってみましたが、MimeUtility.encodeText()で問題を解決できると言う人もいるようですが、成功していません。
どうすれば問題を解決できますか?これは私がこれまでに持っているコードです。
String subject = "Invitación";
String msgBody = VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, "/vmTemplates/template.vm", "UTF-8", model);
Properties props = new Properties();
Session session = Session.getDefaultInstance(props, null);
try {
String encodingOptions = "text/html; charset=UTF-8";
Message msg = new MimeMessage(session);
msg.setHeader("Content-Type", encodingOptions);
msg.setFrom(new javax.mail.internet.InternetAddress(emailFrom));
msg.addRecipient(Message.RecipientType.TO, new InternetAddress(emailTo));
msg.setSubject(subject);
msg.setContent(msgBody, encodingOptions);
Transport.send(msg);
} catch (AddressException e) {
...
} catch (MessagingException e) {
...
}
ありがとう
JavaMailの抽象化は多すぎるかもしれませんが、ここではJavaMailの犠牲になっています。使うとき
_Message msg = new MimeMessage(session);
_
あなたはcreatingMimeMessage
オブジェクトですが、Message
オブジェクトとして扱います。 Message
にはsetSubject(String subject)
メソッドのみがあり、プラットフォームのデフォルトの文字セットを使用してサブジェクトをエンコードします。プラットフォームのデフォルトでエンコードできない場合は、結果のヘッダーに_?
_文字が含まれます。ただし、MimeMessage
にはsetSubject(String subject, String charset)
メソッドがあり、サブジェクトのエンコードに使用する文字セットを指定できます。だからあなたのコードを
_MimeMessage msg = new MimeMessage(session);
msg.setHeader("Content-Type", encodingOptions);
msg.setFrom(new javax.mail.internet.InternetAddress(emailFrom));
msg.addRecipient(Message.RecipientType.TO, new InternetAddress(emailTo));
msg.setSubject(subject, "UTF-8");
_
そしてそれはうまくいくはずです。
使用できます
msg.setSubject(MimeUtility.encodeText("string", "UTF-8", "Q"));
多分あなたは試すことができます:msg.setSubject(subject, "UTF8");
私の場合、機能したのは、システムロケールを目的の文字セットをサポートするロケールに変更することだけです。その前に、このスレッドから受け入れられた回答を含むさまざまな方法を試しましたが、どれも役に立ちませんでした。