奇怪的字符(?)添加到我的主题文本的末尾

发布于 2025-01-08 00:15:23 字数 556 浏览 1 评论 0原文

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

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

我有一门用 javamail 发送电子邮件的课程,其文本如下 主题中的这个:

“估计伊万·埃斯科贝多:

问题是,当邮件到达目的地时,它 到达方式如下:

“估计 Iv?n Escobedo:

所有 áéíóú< /code> 等特殊字符被替换为

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

I have a problem with my java code sending email to users. There is some problem with the encoding of the email. When the email arrives to email account the subject line ($subject) has encoding problems as has strange characters(?) added to the end of my subject text.

The email message content itself is fine just the subject line(?) I have searched all over but cant find,after using Unicode and content type as text/html mail body have no problem with special character
(ó) but same fix is not working for subject line.

I have a class that sends an email with javamail, with a text like
this one in subject :

"Estimado Iván Escobedo:

The problem is that when the mail arrives to its destination, it
arrives this way:

"Estimado Iv?n Escobedo:

All the á, é, í, ó, ú, etc special characters are replaced with ?.

What could be the problem and how to solve it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

小矜持 2025-01-15 00:15:23

您应该使用类似的内容来正确阅读消息:

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 标头进行编码。

You should use something like that to read the message properly:

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

Edit :

Sanjay found the solution.

In order to set properly the message before sending, use :

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

encodeText :

Encode a RFC 822 "text" token into mail-safe form as per RFC 2047.

The given Unicode string is examined for non US-ASCII characters. If the string contains only US-ASCII characters, it is returned as-is. If the string contains non US-ASCII characters, it is first character-encoded using the specified charset, then transfer-encoded using either the B or Q encoding. The resulting bytes are then returned as a Unicode string containing only ASCII characters.

Note that this method should be used to encode only "unstructured" RFC 822 headers.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文