首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

在ASP.NET中 运用jmail提取KERIO邮件系统的邮件时 乱码

2012-12-24 
在ASP.NET中 使用jmail提取KERIO邮件系统的邮件时 乱码在ASP.NET中 使用jmail提取KERIO邮件系统的邮件时

在ASP.NET中 使用jmail提取KERIO邮件系统的邮件时 乱码
在ASP.NET中 使用jmail提取KERIO邮件系统的邮件时 乱码

据我了解,乱码原因是:KERIO邮件系统在发送邮件时,标题用的是UTF-8格式,而内容用的是 GB2312格式。
当我用jmail提取KERIO邮件时,展现的标题均为乱码,当然内容是正确的。
提取的邮件如果是其他邮件(比如:GMAIL),标题就不是乱码。

以下是邮件标题:
鍥炲: 鍐呯淇敼鎯呭喌

以下是邮件内容:
收到!

显示格式是 GB2312

如果转成UTF-8
结果就是:

回复: 内管修改情况 

????? 




跪求解决方案!
[最优解释]
string Subject = Encoding.UTF8.GetString(Encoding.GetEncoding("GB2312").GetBytes(mailMessage.Headers.GetHeader("Subject")))


[其他解释]
没人帮忙吗? 自己顶起来
[其他解释]
Set jmail = Server.CreateObject("JMAIL.Message") '建立发送邮件的对象
jmail.silent = true '屏蔽例外错误,返回FALSE跟TRUE两值j
jmail.logging = true '启用邮件日志
jmail.Charset = "GB2312" '邮件的文字编码为国标
jmail.ContentType = "text/html" '邮件的格式为HTML格式   
Jmail.Encoding="BASE64";

jmail.ISOEncodeHeaders = false '是否进行ISO编码,默认为True(加上了这一句)
jmail.AddRecipient email '邮件收件人的地址
jmail.From = "163@163.com" '发件人的E-MAIL地址
jmail.MailServerUserName = "163@163.com" '登录邮件服务器所需的用户名
jmail.MailServerPassword = "11111" '登录邮件服务器所需的密码

jmail.Subject = title '邮件的标题 
jmail.Body = content '邮件的内容
'jmail.Prority = 1 '邮件的紧急程序,1 为最快,5 为最慢, 3 为默认值
jmail.Send("Smtp.163.com") '执行邮件发送(通过邮件服务器地址)
jmail.Close() '关闭对象




去掉这句试试: jmail.ContentType = "text/html"
[其他解释]
message.BodyEncoding = System.Text.Encoding.Default;

这种编码格式
[其他解释]
[size=24px]补充一下 : KERIO 是一款软件吧。。我们只能对其设置,不能修改他的代码![/size]
[其他解释]
你应该判断邮件的来源,如果是 KERIO邮件系统的邮件

那就应该分别用不同的编码获取 标题 和正文


[其他解释]

引用:
你应该判断邮件的来源,如果是 KERIO邮件系统的邮件

那就应该分别用不同的编码获取 标题 和正文


请问用JMAIL如何获取???
现在的提取方法是:jmail.POP3Class.Connect()方法
[其他解释]
 jmail.Message mailMessage; 

   mailMessage.Charset = "GB2312"; 

   if(mailMessage.From 是 KERIO邮件系统的邮件)
   {
           Body = mailMessage.Body; 
           mailMessage.Charset = "UTF-8"; 
           Subject = mailMessage.Subject; 
    }
    else
    {

      }
 
[其他解释]
还是不行。。。。。。。。。。。



[其他解释]
现在是什么情况
------其他解决方案--------------------


引用:
message.BodyEncoding =System.Text.Encoding.Default;

这种编码格式



设置下编码格式~~
[其他解释]
引用:
现在是什么情况

还是乱码  如果我没记错的话 .net用的都是统一的unicode码。我提出来后是无法转编码格式的。


[其他解释]
引用:
引用:message.BodyEncoding =System.Text.Encoding.Default; 这种编码格式


设置下编码格式~~


你的意思是设置在 发邮件那里吧? 我提过了,KERIO的邮件系统,我可以设置,但无法修改程序。
[其他解释]
引用:
引用:
现在是什么情况
 还是乱码? 如果我没记错的话 .net用的都是统一的unicode码。我提出来后是无法转编码格式的。

mailMessage.Charset = "GB2312"; 

[其他解释]
你现在是怎么写的
[其他解释]
mailMessage.Charset = "gb2312";
mailMessage.ContentTransferEncoding = "base64";
mailMessage.Encoding = "base64";
mailMessage.ISOEncodeHeaders = false;


mailMessage.Subject="鍥炲: 鍐呯淇敼鎯呭喌";
[其他解释]
我提取的邮件 只要是从 KERIO上发的邮件  标题就会乱码  其他都正确的
 KERIO上发的邮件 的标题格式是UTF-8的
[其他解释]
我试一下  谢谢!!
[其他解释]
取标题的时候 用 

mailMessage.Charset = "UTF-8"; 

取中文的时候用 

mailMessage.Charset = "GB2312"; 
[其他解释]
mailMessage.Charset = "UTF-8"; 

你先这样设置,然后取标题,先不管正文

看看是不是乱码

[其他解释]

mailMessage.Charset = "gb2312";
mailMessage.ContentTransferEncoding = "base64";
mailMessage.Encoding = "base64";
mailMessage.ISOEncodeHeaders = false;
string mailDody = mailMessage.Body;
mailMessage.Charset = "utf-8";
string mailSubject = mailMessage.Subject;

内容都是正确的  就是 标题不对  还是乱码
[其他解释]
参考!!!
http://topic.csdn.net/u/20070411/14/9e3475b3-98dd-4073-bf8f-ff7bfc888468.html
[其他解释]
ㄗIT技术交流 29990225
[其他解释]
引用:
参考!!!
http://topic.csdn.net/u/20070411/14/9e3475b3-98dd-4073-bf8f-ff7bfc888468.html



这个我看过了 还是不行

[其他解释]
引用:
mailMessage.Charset = "UTF-8";

你先这样设置,然后取标题,先不管正文

看看是不是乱码


还是一样的 
[其他解释]

引用:

mailMessage.Charset = "UTF-8";
mailMessage.ContentTransferEncoding = "base64";
mailMessage.ISOEncodeHeaders = false;

这样呢


还是乱码呢,,,,,
[其他解释]
mailMessage.Charset = "UTF-8";
mailMessage.ContentTransferEncoding = "base64";
mailMessage.ISOEncodeHeaders = false; 

这样呢
[其他解释]
难道就没人能帮我了吗? 顶起来
[其他解释]
注意一下编码方式!!!
[其他解释]
http://blog.csdn.net/epinszteinic/archive/2008/02/20/2108637.aspx
[其他解释]
难道就没人能帮我了吗? 顶起来
[其他解释]
=?utf-8?B?5L2g5Lus5aW95ZWK77yM6IO95pi+56S65ZCX77yf?= 
----------------------------------------------------

你现在能得到类似的字符串么  是标题 的内容
[其他解释]
引用:
http://blog.csdn.net/epinszteinic/archive/2008/02/20/2108637.aspx


请问这里的代码转成ASP。NET是怎么样的

[其他解释]
恩 ,就是它了 

=E7=AB=A5=E7=8C=9B 就是标题

它是用 base64 编码过的

先解码 再用 utf-8 读一下 就可以了
[其他解释]
mailMessage.FromName="=?utf-8?Q?=E7=AB=A5=E7=8C=9B?=";

--------------------

??
[其他解释]
"=?utf-8?Q?=E7=AB=A5=E7=8C=9B?="  这个?
[其他解释]
mailMessage.FromName="=?utf-8?Q?=E7=AB=A5=E7=8C=9B?=";
[其他解释]
=E7=AB=A5=E7=8C=9B 

这个格式不对

你看你是否有别的类似的
[其他解释]
引用:
mailMessage.FromName="=?utf-8?Q?=E7=AB=A5=E7=8C=9B?=";

--------------------

??


这串值就是这样得到的 
不过,mailMessage.FromName应该是邮件的发送人   才对啊
mailMessage.Subject 得到的是乱码
[其他解释]
用 ASP.NET怎么解码呢?
[其他解释]
Convert.FromBase64String("=E7=AB=A5=E7=8C=9B");
[其他解释]
mailMessage.Headers.GetHeader("Subject")=
"娴嬭瘯銆傝壘寮楁.\t鍦版柟."
[其他解释]
suLK1KGjsKy4pcmttdi3vS4uICANCrLiytSho7CsuKXJrbXYt70uLrLiytSh
o7CsuKXJrbXYt70u
 这串是不是编译过的标题?
[其他解释]
This is a multipart message in MIME format.
----NEXT_BM_F330C8A609004A96B4CA8DFCFF91AF6A
Content-Type: text/plain
Content-Transfer-Encoding: base64

suLK1KGjsKy4pcmttdi3vS4uICANCrLiytSho7CsuKXJrbXYt70uLrLiytSh


o7CsuKXJrbXYt70u


----NEXT_BM_F330C8A609004A96B4CA8DFCFF91AF6A
Content-Type: text/html
Content-Transfer-Encoding: base64

PCFET0NUWVBFIGh0bWwgUFVCTElDICctLy9XM0MvL0RURCBIVE1MIDQuMDEg
VHJhbnNpdGlvbmFsLy9FTic+DQo8aHRtbD4NCjxoZWFkPg0KIDxtZXRhIGh0
dHAtZXF1aXY9J0NvbnRlbnQtVHlwZScgY29udGVudD0ndGV4dC9odG1sO2No
YXJzZXQ9VVRGLTgnPg0KIDxzdHlsZT5CT0RZe2ZvbnQ6MTBwdCBUYWhvbWEs
IFZlcmRhbmEsIHNhbnMtc2VyaWY7fTwvc3R5bGU+DQo8L2hlYWQ+DQo8Ym9k
eT4NCrLiytSho7CsuKXJrbXYt70uLg0KPERJVj6y4srUoaOwrLilya212Le9
LrLiytSho7CsuKXJrbXYt70uPC9ESVY+PC9ib2R5PjwvaHRtbD4=


----NEXT_BM_F330C8A609004A96B4CA8DFCFF91AF6A--

[其他解释]

mailMessage.Headers.GetHeader("Subject")

你看看mailMessage 有没有 Headers 属性
[其他解释]
你把内容编译出来了?
[其他解释]
Subject: 娴嬭瘯銆傝壘寮楁.鍦版柟.
Sender: "=?utf-8?Q?=E7=AB=A5=E7=8C=9B?=" <tm@will-soft.com>
From: "=?utf-8?Q?=E7=AB=A5=E7=8C=9B?=" <tm@will-soft.com>
Date: Thu, 11 Mar 2010 14:46:49 +0800
To: "" <tm@will-soft.com>
X-Priority: 3
X-MSMail-Priority: Normal
MIME-Version: 1.0
X-Mailer: JMail 4.4 by Dimac
Content-Type: multipart/mixed;
boundary="--NEXT_BM_B2991028751B4A3DABF34FF131CE9D3A"
This is a multipart message in MIME format.
----NEXT_BM_B2991028751B4A3DABF34FF131CE9D3A
Content-Type: text/plain
Content-Transfer-Encoding: base64

suLK1KGjsKy4pcmttdi3vS4uICANCrLiytSho7CsuKXJrbXYt70uLrLiytSh
o7CsuKXJrbXYt70u


----NEXT_BM_B2991028751B4A3DABF34FF131CE9D3A
Content-Type: text/html
Content-Transfer-Encoding: base64

PCFET0NUWVBFIGh0bWwgUFVCTElDICctLy9XM0MvL0RURCBIVE1MIDQuMDEg
VHJhbnNpdGlvbmFsLy9FTic+DQo8aHRtbD4NCjxoZWFkPg0KIDxtZXRhIGh0
dHAtZXF1aXY9J0NvbnRlbnQtVHlwZScgY29udGVudD0ndGV4dC9odG1sO2No
YXJzZXQ9VVRGLTgnPg0KIDxzdHlsZT5CT0RZe2ZvbnQ6MTBwdCBUYWhvbWEs
IFZlcmRhbmEsIHNhbnMtc2VyaWY7fTwvc3R5bGU+DQo8L2hlYWQ+DQo8Ym9k
eT4NCrLiytSho7CsuKXJrbXYt70uLg0KPERJVj6y4srUoaOwrLilya212Le9
LrLiytSho7CsuKXJrbXYt70uPC9ESVY+PC9ib2R5PjwvaHRtbD4=


----NEXT_BM_B2991028751B4A3DABF34FF131CE9D3A--




这个应该是整个邮件的最完整信息了 是byte64的
[其他解释]
艾弗森地方.. 测试。艾弗森地方..测试。艾弗森地方

这个是标题?
[其他解释]
主题: 测试。艾弗森地方.
内容:测试。艾弗森地方. 
测试。艾弗森地方.测试。艾弗森地方.
[其他解释]
mailMessage.Headers.GetHeader("Subject")

你在这句之前 写什么了么
[其他解释]

引用:
Response.Write(Encoding.Default.GetString(Convert.FromBase64String("suLK1KGjsKy4pcmttdi3vS4uICANCrLiytSho7CsuKXJrbXYt70uLrLiytSho7CsuKXJrbXYt70u")));


我贴出的那部分应该是BODY部分的。。
真正的标题应该是SUBJECT 是一堆乱码,获取到的值只有内容转义成了BATY64 标题没被转义
[其他解释]
Response.Write(Encoding.Default.GetString(Convert.FromBase64String("suLK1KGjsKy4pcmttdi3vS4uICANCrLiytSho7CsuKXJrbXYt70uLrLiytSho7CsuKXJrbXYt70u")));
[其他解释]
suLK1KGjsKy4pcmttdi3vS4uICANCrLiytSho7CsuKXJrbXYt70uLrLiytSh


o7CsuKXJrbXYt70u

解码后:

测试。艾弗森地方.. 测试。艾弗森地方..测试。艾弗森地方.
[其他解释]


Response.Write(Encoding.UTF8.GetString(Encoding.GetEncoding("GB2312").GetBytes("娴嬭瘯銆傝壘寮楁.\t鍦版柟.")));

[其他解释]
 mailMessage.ISOEncodeHeaders = false;
这句漏下了  我也加了的
[其他解释]
我 把很多都注释掉了  
取邮件的方法是:
popMail.Connect(sEmail, sPwd, sIp, Convert.ToInt32(Port));
for (int i = 1; i <= popMail.Count; i++)
{
mailMessage = popMail.Messages[i];
mailMessage.ContentTransferEncoding = "base64";
mailMessage.ContentType = "text/plain";
string aaa=mailMessage.Headers.GetHeader("Subject");
}
[其他解释]
不用整体都加啊, 只是标题 这样获取
[其他解释]
引用:
string Subject = Encoding.UTF8.GetString(Encoding.GetEncoding("GB2312").GetBytes(mailMessage.Headers.GetHeader("Subject")))


如果我整体都加了这个 问题又有了.
乱码信息是对了,但是本来正确的那些信息都给转义掉了 。
这个怎么区分是不是需要转义哦
[其他解释]
引用:
mailMessage.Headers.GetHeader("Subject")=
"娴嬭瘯銆傝壘寮楁.\t鍦版柟."


我是从这复制的。

你按照 我在 56楼 写的 应该就可以了
[其他解释]
你好厉害。!!!!
不过不知道怎么搞的 多了个/t
这个/t还是获取subject时就有了的 不知道怎么回事。。。

原标题是:测试。艾弗森地方.
Response.Write(Encoding.UTF8.GetString(Encoding.GetEncoding("GB2312").GetBytes("娴嬭瘯銆傝壘寮楁.\t鍦版柟.")));得到的是:测试。艾弗森\t地方.
去掉\t就可以的,怎么无缘无故多出来了? 不知道怎么回事。。。。
[其他解释]
你再看一下 正确 和 乱码 有什么区别,除了标题
[其他解释]
我很诧异 KERIO邮件系统发的邮件也有部分几条是正确的
所以不能这样判断。。。。。

[其他解释]
哦,判断发件人

你不是说从 KERIO邮件系统 发的邮件是乱码么

判断是否是 KERIO邮件系统发的 就是了
[其他解释]
就是标题 我知道的  我的意思是  部分邮件的标题是乱码  而部分邮件标题不是乱码
如果我这么一加 就把乱码的改正确了,但把不是乱码的却改掉了
[其他解释]
    if (mailMessage.Headers.GetHeader("Subject").IndexOf("utf-8") > 0)
                    {
                        string BiaoTiAll = mailMessage.Headers.GetHeader("Subject");
                        string[] arryBiaoTi = BiaoTiAll.Split('?');
                        string Subject = Encoding.UTF8.GetString(Encoding.GetEncoding("GB2312").GetBytes(arryBiaoTi[3].ToString()));


                        tnRoot.Text = Subject;
                    }
                    else
                    {}

得到 Subject是   6L2s5Y+R77yabHg=
[其他解释]
求助 不知到为什么
[其他解释]
我发现乱码的标题邮件他的mailMessage.Text中会有一个utf-8存在
而正确标题的邮件的mailMessage.Text属性是没的
我用
 if (mailMessage.Text.IndexOf("utf-8") > 0)
判断了一下 结果可行。问题终于解决了!!!谢谢你!!!
[其他解释]

字符串有 Contains 函数 判断 是否包含指定字符串的
[其他解释]
恩。谢谢你了!!!
[其他解释]
MimeUtility.decodeText(),java mail有这个现成都方法。不知是不是楼主要的

热点排行