我目前正在开发一个模块,它可以从服务器以多种语言向客户发送邮件。
我已将邮件内容(to,subject和body)存储在数据库中并从中检索。
所有邮件内容都作为unicode存储在数据库中(例如:ضنتةى
以显示阿拉伯字符。)
我正在使用Apache的commons-email api发送邮件。 (版本:commons-email-1.1.jar)。
在JAVA编码。
使用Gmail SMTP主机发送的邮件。
当客户发送和接收邮件时 - >翻译邮件正文并显示阿拉伯字符。
问题:主题显示我的数据库中的unicode。翻译不会发生。
我知道必须完成一些邮件头配置,但不知道是什么以及如何配置。 RFC 2047似乎也提供了解决方案,但我如何使用这个特定的RFC?
提前致谢。 -Chandan
答案 0 :(得分:3)
正如@deceze所说,你并没有“真正”使用unicode。您正在使用HTML表示法来标记unicode字符。您的电子邮件正文格式为HTML,因此电子邮件客户端就像浏览器一样解释它们。
电子邮件主题不是HTML格式化主体的一部分,因此未正确显示。
您应该切换到真正使用unicode,即将DB编码定义为UTF-8并存储unicode文本,这样您就不会看到像ضنتةى
这样的文本,而是会看到ضنتةى。
在这种情况下,一切都会奏效。如果由于任何原因无法执行此操作,则必须在java代码中执行“翻译”。
除了这个翻译之外,您还应该从右到左指定文档方向rtl
。否则,文本将在具有默认从左到右文档方向的系统上向左调整。
答案 1 :(得分:0)
阅读RFC 2045 - 2049,了解在电子邮件中发送Unicode数据的正确方法。
2045:Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies
2046:Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types
2048:Multipurpose Internet Mail Extensions (MIME) Part Four: Registration Procedures
2049:Multipurpose Internet Mail Extensions (MIME) Part Five: Conformance Criteria and Examples