2

我需要发送具有不同语言内容的 HTML。我的配置是:

MIME-Version: 1.0 Content-Type: multipart/mixed;    boundary="----=_Part_18_19002270.1337852743826"

------=_Part_18_19002270.1337852743826 Content-Type: text/html; charset=Cp1252 Content-Transfer-Encoding: quoted-printable

并在邮件中将所有字符都设为?. 任何人都可以建议我如何设置编码,以便我可以用正确的语言收到邮件。

谢谢

找到了解决方案:)

 MimeBodyPart htmlPart = new MimeBodyPart();
        htmlPart.setContent(bodyText, "UTF-8");


        htmlPart.setText(bodyText, "utf-8");
        htmlPart.setHeader("Content-Type","text/html; charset=\"utf-8\"");
        htmlPart.setHeader("Content-Transfer-Encoding", "quoted-printable");

仍然无法对主题行进行编码。

4

3 回答 3

4

这段代码可能会对您有所帮助。:)

MimeMessage msg = new MimeMessage(session);
msg.setSubject("yourSubject", "UTF-8"); // here you specify your subject encoding
msg.setContent("yourBody", "text/plain; charset=utf-8");

msg.setFrom("senderAddress");
msg.addRecipient(Message.RecipientType.TO, "recieverAddress");
Transport.send(msg);

编辑:

是我用来设置主题行编码的方法。

于 2012-05-24T11:44:10.290 回答
2

将整个 html 文件读取字符串转换为 Unicode 我使用下面的代码使用 FileUtils 将整个 HTML 文件读取为字符串

String contents = FileUtils.readFileToString(new File("/path/to/the/HTMLfile"), "UTF-8")

我试图用中文、阿拉伯文、日文和西班牙文发送一封电子邮件。因此,在发送时,我在 MimeMessage 和 MimeMultipart 中设置内容时无法弄清楚

因此,我将整个文件作为字符串读取,然后检查该字符是否介于 1-128 之间,即属于 ASCII 的 ASCII 等效字符(数字特殊字符空间等)。我将它们保留在字符串中,其余所有字符都转换为 Unicode

将 html 文件字符串转换为 Unicode 字符串,然后在 mime body part 和 mime multipart 中设置的函数。希望很清楚

public String convertToUniCode(String yourHTMLBodyStr) {
        String str = "<div>Chinese 你好嗎 English How are you Japanese お元気ですか Arabic كيف حالك Spanish  cómo estás</div>";
        String[] codePointAt = new String[str.length()];

        for (int j = 0; j < str.length(); j++) {
            int charactercode = Character.codePointAt(str, j);
            if (charactercode > 0 && charactercode < 128) {
                codePointAt[j] = String.valueOf(str.charAt(j));
            } else {
                codePointAt[j] = "&#" + String.valueOf(charactercode) + ";";
            }

        }

        StringBuilder strBuilder = new StringBuilder();
        for (int i = 0; i < codePointAt.length; i++) {
            strBuilder.append(codePointAt[i]);
        }
        System.out.println("New String :: " + strBuilder.toString());
    }

输出(Unicode 字符串)与 Like 㺃 :

新字符串 :: Chinese 你好吗 英语 How are you Japanese 元気ですか 阿拉伯语 كيف حالك 西班牙语 cómo estás

MimeMessage msg = new MimeMessage(session);
String htmlUnicodeStr = convertToUniCode(yourHTMLBodyStr);

msg.setSubject(UniCodeSubject, "UTF-8"); // here you specify your subject encoding

Multipart emailMimeMultipart;
MimeBodyPart messageBody = new MimeBodyPart();
messageBody.setDataHandler(new DataHandler(new ByteArrayDataSource(htmlUnicodeStr, "text/html")));
    emailMimeMultipart.addBodyPart(messageBody);
//Add UTF-8 In MimeMultiPart While Setting Content and Transport.Send()
于 2017-08-25T18:39:38.170 回答
1

尝试切换charset=Cp1252charset=UTF-8.

于 2012-05-24T10:03:37.453 回答