以下のコードを使用して、異なるドメイン間で複数のユーザーにメールを送信しています。javamail APIを使用して送信されたhtmlメール本文は、Outlookで文字化けして表示される
String emailBody = "<html>Some html text goes here</html>"
String from = "[email protected]"
String bcc = "[email protected]"
String subject = "Some subject..."
List attachments = "Some image attachments ..."
MimeMessage message = new MimeMessage(session);
message.setHeader("Content-Type", "text/html; charset=UTF-16")
message.setHeader("Accept-Language", "en-US")
message.setHeader("Content-Language", "en-US")
message.setFrom(new InternetAddress(from));
message.setRecipients(Message.RecipientType.BCC,InternetAddress.parse(bcc));
message.setSubject(subject);
// creates message part
MimeBodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setContent(emailBody, "text/html; charset=UTF-16");
// creates multi-part
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);
addAttachmentsToMultiPart(multipart,attachments)
message.setContent(multipart);
Transport.send(message);
メールの本文はすべて英語です。しかし、ほとんどのドメインのユーザーはそれを漢字で受信しています。私は身体のHTMLソースを見たとき、部分的に文字化けしていることがわかりました。オリジナルのhtmlテキストの一部は、インタクトであり、特定の順序のないテキスト間のいくつかのジャンク文字です。このメールは、このパス "Tomcatアプリケーション - >会社メールサーバー - > outlook.office365.comサーバー - >ターゲットメールサーバー - >エンドユーザーOutlookクライアント"を経由します。
いくつかの調査の末、この問題が文字エンコーディングに起因する可能性があることがわかりました。テストのために、私はgamil.comにこのメールを送ろうとしました。メール本文はGmailに正しく表示されますが、ヘッダー部分にヘッダがあり、本体部分全体がbase64でエンコードされていることがわかります。
Content-Type: text/html; charset="UTF-16"
Content-Transfer-Encoding: base64
私はヘッダーに設定されている、どこでメール本文がエンコードされつつあるか、「コンテンツ転送エンコード」を確認していません。しかし、エンドユーザーのメールプロパティには同様のヘッダーが表示されません。私は明示的に "base64"、 "quoted-printable"(そして他のタイプ)に "Content-Transfer-Encoding"を設定しようとしましたが、常に無視され、gmailは常にbase64としてそれを受け取ります。この設定はエンドユーザメールに影響を与えません。彼らはいつも同じゴミを受け取る。
誰もがあなたが試みることができる唯一の違い、私は問題とどのようにそれを