【问题标题】:strange characters(?) added to the end of my subject text奇怪的字符(?)添加到我的主题文本的末尾
【发布时间】:2015-09-24 01:16:04
【问题描述】:

我的 java 代码向用户发送电子邮件时遇到问题。电子邮件的编码存在一些问题。当电子邮件到达电子邮件帐户时,主题行 ($subject) 出现编码问题,因为在我的主题文本末尾添加了奇怪的字符 (?)。

电子邮件内容本身很好,只是主题行(?)我已经搜索过但找不到,在使用 Unicode 和内容类型作为 text/html 邮件正文后,特殊字符没有问题 (ó) 但同样的修复不适用于主题行。

我有一个类使用 javamail 发送电子邮件,其文本如下 这个主题:

“Estimado Iván Escobedo:

问题是当邮件到达目的地时, 以这种方式到达:

“Estimado Iv?n Escobedo:

所有áéíóú等特殊字符都替换为?

可能是什么问题以及如何解决?

【问题讨论】:

  • 您告诉主题行末尾添加了奇怪的字符,但您的具体问题似乎只是“特殊字符”被问号替换。你现在遇到的问题到底是什么?您的问题标题和问题描述与描述的症状不一致。
  • 感谢回复,抱歉解释不好,如果这些字符 á, é, í, ó, ú 是邮件的主题,则替换为 ?标记。邮件中的消息也发生了同样的事情,但是在使用“文本/html”更改内容类型并使用 unicode 后,它正在工作,但主题并没有发生同样的事情,如果我也将 unicode 作为主题,它只会显示 unicode vale .
  • RFC5322 标头仅为 7 位 ASCII;如果要使用 8 位字符,则必须按照 RFC2048 对其进行编码。

标签: java character-encoding jms jakarta-mail


【解决方案1】:

你应该使用类似的东西来正确阅读消息:

TextMessage txtMessage = (TextMessage)message;
ByteArrayInputStream bais = new ByteArrayInputStream(txtMessage.getText().getBytes ("ISO-8859-15"))

编辑:

Sanjay 找到了解决方案。

为了在发送前正确设置消息,请使用:

MimeUtility.encodeText(SubjectText, "ISO-8859-15", "Q")

encodeText

按照 RFC 2047 将 RFC 822“文本”令牌编码为邮件安全形式。

检查给定的 Unicode 字符串是否有非 US-ASCII 字符。如果字符串仅包含 US-ASCII 字符,则按原样返回。如果字符串包含非 US-ASCII 字符,则首先使用指定的字符集对其进行字符编码,然后使用 B 或 Q 编码对其进行传输编码。然后将生成的字节作为仅包含 ASCII 字符的 Unicode 字符串返回。

请注意,此方法应仅用于编码“非结构化”RFC 822 标头。

【讨论】:

  • 感谢回复,邮件主题的主要问题,如果这些字符 á, é, í, ó, ú 是邮件的主题,它被替换为?标记。邮件中的消息也发生了同样的事情,但是在使用“文本/html”更改内容类型并使用 unicode 后,它正在工作,但主题并没有发生同样的事情,如果我也将 unicode 作为主题,它只会显示 unicode vale .
  • 你是这样设置主题的吗:message.setString("Subject", subject);?如果是,那么此时的主题是否被正确编码?
  • 我得到了解决这个问题。当我们设置主题时,可以使用下面的代码在主题中添加额外的字符:mailNotificationHelper.setSubject((MimeUtility.encodeText(SubjectText, "ISO-8859-15" , "Q")));
  • 干得好!如果有人需要这里的文档以获得更多解释docs.oracle.com/javaee/6/api/javax/mail/internet/…。我添加了编辑,如果有人需要此信息比读入 cmets 更好;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-23
  • 1970-01-01
  • 2012-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多