当前位置:  开发笔记 > 编程语言 > 正文

日本电子邮件主题编码

如何解决《日本电子邮件主题编码》经验,为你挑选了2个好方法。

显然,编码日语电子邮件有点挑战性,我正在慢慢发现自己.如果有任何专家(即使是那些经验有限的专家),我可以请一些指导如何做,如何测试以及如何验证它?

请记住,我从未踏足日本附近的任何地方,只是我正在开发的产品在其他地方使用.

到目前为止,我所知道的是:
- 日本的电子邮件应该用ISO-2022-JP,日本JIS代码页50220或可能的SHIFT_JIS代码页932
编码 - 电子邮件传输编码应该设置为Base64用于纯文本,7Bit用于Html
- 电子邮件主题应单独编码,以"=?ISO-2022-JP?B?"开头.(不知道这是什么意思).我试过用这个主题编码

"=?ISO-2022-JP?B?" + Convert.ToBase64String(Encoding.Unicode.GetBytes(subject))

它基本上给出了预期的编码字符串,但它没有在电子邮件程序中显示为任何日文文本
- 我已在Outlook 2003,Outlook Express和GMail中测试过

任何帮助将不胜感激


好的,所以发布一个简短的更新,由于这两个有用的答案,我已经设法得到正确的格式和编码.现在,Outlook提供了类似于正确主题的东西:
=?iso-2022-jp?B?6 Japanese test ??????????????? 6??????=

但是,Outlook Express中完全相同的电子邮件给出了这样的主题:
=?iso-2022-jp?B?6 Japanese test ???????????????????????? 6??????????=

此外,在Outlook Express的收件箱视图中查看时,电子邮件主题更加奇怪,如下所示:
=?iso-2022-jp?B?6 Japanese test ??????????????? 6???????=

Gmail似乎与Outlook的工作方式类似,看起来是正确的.

我无法理解这一个.



1> 小智..:

我已经处理了近20年的日语编码,所以我可以同情你的困难.我参与过的网站每天向日本客户发送数百封电子邮件,以便我与您分享对我们有用的信息.

首先,不要使用Shift-JIS.我个人收到大量的日本电子邮件,几乎从来没有用Shift-JIS编码.我认为一个旧的(大约Win 98?)版本的Outlook Express使用Shift-JIS编码外发邮件,但现在你只是看不到它.

正如您所知,您需要使用ISO-2022-JP作为邮件头中至少任何内容的编码.这包括主题,行和行.UTF-8在大多数情况下也可以使用,它不适用于Yahoo Japan邮件,而且可以想象,许多日本用户使用Yahoo Japan邮件.

您可以在电子邮件正文中使用UTF-8,但建议您对UTF-8编码的日文文本进行base64编码,并将其放在正文中而不是原始的UTF-8文本中.但是,在实践中,我相信原始的UTF-8文本最近可以正常工作,对于电子邮件的正文.

正如我上面提到的,您至少需要测试Outlook(Exchange),Outlook Express(IMAP/POP3)和Yahoo Japan Web邮件.雅虎日本是最棘手的,因为我相信他们使用EUC来编码他们的网页,所以你需要遵循正确的电子邮件标准,否则他们将无法工作(ISO-2022-JP是发送日语电子邮件的标准).

此外,您的主题行每行不应超过75个字符.也就是说,在使用ISO-2022-JP和base64编码后的 75个字符,而不是转换前的75个字符.如果超过75个字符,则需要将编码主题分成多行,从"=?iso-2022-jp?B?"开始.并在每一行以"?="结尾.如果您不这样做,您的主题可能会被截断(取决于电子邮件阅读器,以及主题文本的内容).根据RFC 2047:

"一个''编码字'长度不得超过75个字符,包括'字符集','编码','编码文本'和分隔符.如果需要编码的文本多于"编码 - "可以使用75个字符的单词,多个'编码字'(由CRLF SPACE分隔)."

下面是一些用于编码主题的示例PHP代码:

 // Convert Japanese subject to ISO-2022-JP (JIS is essentially ISO-2022-JP)

 $subject = mb_convert_encoding ($subject, "JIS", "SJIS");

 // Now, base64 encode the subject

 $subject = base64_encode ($subject);

 // Add the encoding markers to the subject

 $subject = "=?iso-2022-jp?B?" . $subject . "?=";

 // Now, $subject can be placed as-is into the raw mail header.

有关如何对电子邮件标头进行编码的完整说明,请参阅RFC 2047.



2> Bombe..:

请查看http://en.wikipedia.org/wiki/MIME#Encoded-Word,了解如何对符合MIME的邮件中的标头字段进行编码.你似乎在主题的末尾错过了一个"?=".

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有