当前位置: 首页 > 编程语言 > C#

日文邮件主题编码分享

时间:2023-04-11 11:12:52 C#

日文邮件主题编码显然,写日文邮件有点挑战,我也在慢慢找回自己。如果有专家(即使是那些经验有限的人),我可以指导一下如何做,如何测试以及如何验证吗?请记住,我从未涉足过日本附近的任何地方,只是我正在开发的产品在其他地方使用过。到目前为止我所知道的是(我认为)以下内容:-日语电子邮件应使用ISO-2022-JP、日语JIS代码页50220或可能的SHIFT_JIS代码页932进行编码-电子邮件传输编码应设置为Base64,对于纯文本,7位对于Html-电子邮件主题应单独编码,以“=?ISO-2022-JP?B?”开头。(不确定那是什么意思)。我试过用这个主题编码“=?ISO-2022-JP?B?”+Convert.ToBase64String(Encoding.Unicode.GetBytes(subject))它基本上给出了预期的编码字符串,但它不会在电子邮件程序中显示为任何日文文本-我已经在Outlook2003、OutlookExpress和GMail中测试过任何帮助将不胜感激好的,所以发布一个简短的更新,感谢这两个有用的答案,我已经设法获得正确的格式和编码。现在,Outlook提供了类似正确主题的内容:=?iso-2022-jp?B?6日语测试ニ及うの观点で语っテもらった。6相当のWaterproof?=然而,OutlookExpress中的完全相同的电子邮件给出了这个主题:=?iso-2022-jp?B?6日文测试縺?冻···风也せ縺p隐阎▲縺?透ゅi縺`縺溘?6跨?蠖杨?风?鸡??=另外,在OutlookExpress的收件箱视图中查看邮件主题更奇怪,如下图:=?iso-2022-jp?B?6日语考试????????????????????????????????????????=Gmail似乎以与Outlook类似的方式工作,看起来是正确的。这个我看不懂我已经处理日语编码近20年了,所以我可以理解你的困难。我工作过的网站每天向日本客户发送数百封电子邮件,以便我可以与您分享对我们有用的信息。""encodedword"的长度不能超过75个字符,包括"charset"、"encoding"、"encodedtext"和分隔符。如果需要编码的文本多于"encoding-"可以使用75个字符的单词,多个'encodingwords'(由CRLFSPACE分隔)。"//将日语主题转换为ISO-2022-JP(JIS本质上是ISO-2022-JP)$subject=mb_convert_encoding($subject,"JIS","SJIS");//现在,base64编码主题$subject=base64_encode($subject);//给主题添加编码标记$subject="=?iso-2022-jp?B?".$主题。"?=";//现在,$subject可以按原样放入原始邮件标头中。查看http://en.wikipedia.org/wiki/MIME#Encoded-Word以了解如何对MIME兼容消息中的标头字段进行编码。你好像漏掉了主题一的结尾"?="。=?ISO-2022-日本?B'TEXTTEXT...ISO_2022-JP表示字符串在ISO-2022-JP代码页中编码(例如,不是Unicode)B表示字符串在您的示例中采用bese64编码,您应该只提供ISO-2022-JP的Unicode字符串。我有一些用日语写和发送电子邮件的经验……通常你必须注意操作系统使用的编码以及日语字符串的存储方式!我的邮件对象通常是这样编码的://我们的日语是shift-jis编码的,所以看起来像乱码MailMessagemessage=newMailMessage();message.BodyEncoding=Encoding.GetEncoding("iso-2022-jp");message.SubjectEncoding=Encoding.GetEncoding("iso-2022-jp");message.Subject=s.ToEncoding(Encoding.GetEncoding("Shift-Jis"));//将编码更改为您的来源message.Body=s.ToEncoding(Encoding.GetEncoding("Shift-Jis"));//将编码更改为您的源代码然后我有一个扩展方法,为我转换:publicstaticstringToEncoding(thisstrings,EncodingtargetEncoding){returns==null?null:targetEncoding.GetString(编码.GetEncoding(1252).GetBytes(s));//1252是Windows操作系统代码页编码:utf-8-*-从email.MIMEText导入smtplib从email.Header导入MIMEText从ema导入Headeril.Utilsimportformatdatedefsend_from_gmail(from_addr,to_addr,subject,body,password,encoding="iso-2022-jp"):msg=MIMEText(body.encode(encoding),'plain',encoding)msg??['主题']=Header(subject.encode(encoding),编码)msg??['From']=from_addrmsg['To']=to_addrmsg['Date']=formatdate()s=smtplib.SMTP('smtp.gmail.com',587)s.ehlo();s.starttls();s.ehlo()s.login(from_addr,password)s.sendmail(from_addr,to_addr,msg.as_string())s.close()返回“发送邮件至:%s”%to_addrif__name__==“__main__”:importsysforn,iteminenumerate(sys.argv):sys.argv[n]=sys.argv[n].decode("utf8")iflen(sys.argv)==6:printsend_from_gmail(sys.argv[1],sys.argv[2],sys.argv[3],sys.argv[4],sys.argv[5])eliflen(sys.argv)==7:printsend_from_gmail(sys.argv[1],sys.argv[2],sys.argv[3],sys.argv[4],sys.argv[5],encoding=sys.argv[6])else:raise"SYNTAX:%s[编码]"**当然被盗/改自:http://mtokyo.blog9.fc2.com/blog-entry-127.html首先,您应该使用:Encoding.GetEncoding("ISO-2022-JP")将主题行转换为将由Convert.ToBase64String()=?ISO-2022-日本?乙?文本文本...?=告诉接收邮件客户端在发送方使用哪种编码将日语“字母”转换为字节流。当前您使用UTF-16进行编码,但指定ISO-2022-JP进行解码。我认为,这显然是两种不同的编码,就像ISO-8859-1不同于Unicode(大多数扩展的西欧字符在ISO-XXX中用一个字节表示,而在Unicode中用两个字节表示)。我不确定您所说的UTF-8是二等公民是什么意思。只要接收邮件的客户端理解UTF-8并能够将其转换为当前的日语语言环境,一切都很好。n";$headers.="回复:".".mb_encode_mimeheader(mb_convert_encoding($from_name,"ISO-2022-JP","AUTO")).""."n";$headers.="Content-Type:text/plain;charset=ISO-2022-JPn";/*将正文转换为与上面Content-Type标头中所述相同的编码*/$body=mb_convert_encoding($body,"ISO-2022-JP","AUTO");/*Mail,可选参数。*/$sendmail_params="-f$from_email";mb_language("ja");$subject=mb_convert_encoding($subject,"ISO-2022-JP","AUTO");$subject=mb_encode_mimeheader($subject);$result=mail($to,$subject,$body,$headers,$sendmail_params);return$result;}90年代初期,JUNET(基于UUCP的全国互联网)引入了日文编码的邮件,当时定义了RFC1468,如果纯文本邮件遵循RFC1468是没有问题的,如果要处理html邮件,RFC1468除了header部分就没用了,我用的就是这个发送日语电子邮件的内容。主题行在Outlook2010、gmail和iPhone中看起来不错。以上就是C#学习教程:日语邮件主题编码分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多加关注—Encodingencoding=Encoding.GetEncoding("iso-2022-jp");byte[]bytes=encoding.GetBytes(主题);字符串uuEncoded=Convert.ToBase64String(bytes);subject="=?iso-2022-jp?B?"+uuEncoded+"?=";//不确定这是否真的有必要...mailMessage.SubjectEncoding=Encoding.GetEncoding("iso-2022-jp");如需转载请注明出处:

最新推荐
猜你喜欢