解决jmail接收邮件标题乱码(ASP.NET)

平凡的威哥 2010-07-20 05:32:20
用jmail接收网络邮件时,经常会出现标题成乱码。无论如何设置页面默认编码方式都不管用。
下面是我的解决方法,希望对大家有用。
Msg.Subject获取标题错误。
使用Msg.Headers.GetHeader("Subject")获取标题,的出来的字符串为Base64编码。
举例:Msg.Headers.GetHeader("Subject")得出:=?utf-8?B?5L2g5Lus5aW95ZWK77yM6IO95pi+56S65ZCX77yf?= 。
一共有4个“?”号,作为分隔符
第一段:utf-8
第二段:B
第三段:5L2g5Lus5aW95ZWK77yM6IO95pi+56S65ZCX77yf
第四段:=
其中第三段就是标题的内容经过Base64编码后的显示。
解决代码如下(C#):
下面info是我程序中的实体类;
try
{
string str = Msg.Headers.GetHeader("Subject");
string[] strss = str.Split('?');
byte[] bytystr = Convert.FromBase64String(strss[3]);

string strlast = Encoding.Default.GetString(bytystr);
info.Title = strlast;
}
catch
{
info.Title = "无主题";
}
之所以用try,cath,因为有些网络系统上发送的邮件,如CSDN用户密码忘记后,发送密码到注册邮箱的标题,超出Base64编码范畴,会出错,用catch避免出错。有时间的同行可以尝试解决下这个问题。以上代码除了极少超出ASCII范围的编码都可以正常显示。
...全文
153 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
jphcp 2010-07-22
  • 打赏
  • 举报
回复
如果发送的格式 为 HMTL 格式
info.Title =Server.UrlEncode("无主题");

13,347

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET技术前瞻
社区管理员
  • .NET技术前瞻社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧