在ASP.NET中 使用jmail提取KERIO邮件系统的邮件时 乱码据我了解,乱码原因是:KERIO邮件系统在发送邮件时,标题用的是UTF-8格式,而内容用的是 GB2312格式。
当我用jmail提取KERIO邮件时,展现的标题均为乱码,当然内容是正确的。
提取的邮件如果是其他邮件(比如:GMAIL),标题就不是乱码。以下是邮件标题:
鍥炲: 鍐呯淇敼鎯呭喌以下是邮件内容:
收到!显示格式是 GB2312如果转成UTF-8
结果就是:回复: 内管修改情况 �յ��� 
跪求解决方案!

解决方案 »

  1.   

    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 = "[email protected]" '发件人的E-MAIL地址
    jmail.MailServerUserName = "[email protected]" '登录邮件服务器所需的用户名
    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"
      

  2.   

    message.BodyEncoding = System.Text.Encoding.Default;这种编码格式
      

  3.   

    [size=24px]补充一下 : KERIO 是一款软件吧。。我们只能对其设置,不能修改他的代码![/size]
      

  4.   

    你应该判断邮件的来源,如果是 KERIO邮件系统的邮件那就应该分别用不同的编码获取 标题 和正文
      

  5.   


    请问用JMAIL如何获取???
    现在的提取方法是:jmail.POP3Class.Connect()方法
      

  6.   

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

  7.   

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

  8.   


    你的意思是设置在 发邮件那里吧? 我提过了,KERIO的邮件系统,我可以设置,但无法修改程序。
      

  9.   


    mailMessage.Charset = "GB2312"; 
      

  10.   

    mailMessage.Charset = "gb2312";
    mailMessage.ContentTransferEncoding = "base64";
    mailMessage.Encoding = "base64";
    mailMessage.ISOEncodeHeaders = false;
    mailMessage.Subject="鍥炲: 鍐呯淇敼鎯呭喌";
      

  11.   

    我提取的邮件 只要是从 KERIO上发的邮件  标题就会乱码  其他都正确的
     KERIO上发的邮件 的标题格式是UTF-8的
      

  12.   

    取标题的时候 用 mailMessage.Charset = "UTF-8"; 取中文的时候用 mailMessage.Charset = "GB2312"; 
      

  13.   


    mailMessage.Charset = "gb2312";
    mailMessage.ContentTransferEncoding = "base64";
    mailMessage.Encoding = "base64";
    mailMessage.ISOEncodeHeaders = false;
    string mailDody = mailMessage.Body;
    mailMessage.Charset = "utf-8";
    string mailSubject = mailMessage.Subject;内容都是正确的  就是 标题不对  还是乱码
      

  14.   

    mailMessage.Charset = "UTF-8"; 你先这样设置,然后取标题,先不管正文看看是不是乱码
      

  15.   

    参考!!!
    http://topic.csdn.net/u/20070411/14/9e3475b3-98dd-4073-bf8f-ff7bfc888468.html
      

  16.   

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

  17.   

    http://blog.csdn.net/epinszteinic/archive/2008/02/20/2108637.aspx
      

  18.   


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

  19.   

    =?utf-8?B?5L2g5Lus5aW95ZWK77yM6IO95pi+56S65ZCX77yf?= 
    ----------------------------------------------------你现在能得到类似的字符串么  是标题 的内容
      

  20.   

    "=?utf-8?Q?=E7=AB=A5=E7=8C=9B?="  这个?
      

  21.   

    mailMessage.FromName="=?utf-8?Q?=E7=AB=A5=E7=8C=9B?=";
      

  22.   

    恩 ,就是它了 =E7=AB=A5=E7=8C=9B 就是标题它是用 base64 编码过的先解码 再用 utf-8 读一下 就可以了
      

  23.   

    mailMessage.FromName="=?utf-8?Q?=E7=AB=A5=E7=8C=9B?=";--------------------------------------------------------??
      

  24.   

    Convert.FromBase64String("=E7=AB=A5=E7=8C=9B");
      

  25.   

    =E7=AB=A5=E7=8C=9B 这个格式不对你看你是否有别的类似的
      

  26.   


    这串值就是这样得到的 
    不过,mailMessage.FromName应该是邮件的发送人   才对啊
    mailMessage.Subject 得到的是乱码
      

  27.   

    This is a multipart message in MIME format.
    ----NEXT_BM_F330C8A609004A96B4CA8DFCFF91AF6A
    Content-Type: text/plain
    Content-Transfer-Encoding: base64suLK1KGjsKy4pcmttdi3vS4uICANCrLiytSho7CsuKXJrbXYt70uLrLiytSh
    o7CsuKXJrbXYt70u
    ----NEXT_BM_F330C8A609004A96B4CA8DFCFF91AF6A
    Content-Type: text/html
    Content-Transfer-Encoding: base64PCFET0NUWVBFIGh0bWwgUFVCTElDICctLy9XM0MvL0RURCBIVE1MIDQuMDEg
    VHJhbnNpdGlvbmFsLy9FTic+DQo8aHRtbD4NCjxoZWFkPg0KIDxtZXRhIGh0
    dHAtZXF1aXY9J0NvbnRlbnQtVHlwZScgY29udGVudD0ndGV4dC9odG1sO2No
    YXJzZXQ9VVRGLTgnPg0KIDxzdHlsZT5CT0RZe2ZvbnQ6MTBwdCBUYWhvbWEs
    IFZlcmRhbmEsIHNhbnMtc2VyaWY7fTwvc3R5bGU+DQo8L2hlYWQ+DQo8Ym9k
    eT4NCrLiytSho7CsuKXJrbXYt70uLg0KPERJVj6y4srUoaOwrLilya212Le9
    LrLiytSho7CsuKXJrbXYt70uPC9ESVY+PC9ib2R5PjwvaHRtbD4=
    ----NEXT_BM_F330C8A609004A96B4CA8DFCFF91AF6A--
      

  28.   


    mailMessage.Headers.GetHeader("Subject")你看看mailMessage 有没有 Headers 属性
      

  29.   

    mailMessage.Headers.GetHeader("Subject")=
    "娴嬭瘯銆傝壘寮楁.\t鍦版柟."
      

  30.   

    suLK1KGjsKy4pcmttdi3vS4uICANCrLiytSho7CsuKXJrbXYt70uLrLiytSh
    o7CsuKXJrbXYt70u
     这串是不是编译过的标题?
      

  31.   

    Subject: 娴嬭瘯銆傝壘寮楁. 鍦版柟.
    Sender: "=?utf-8?Q?=E7=AB=A5=E7=8C=9B?=" <[email protected]>
    From: "=?utf-8?Q?=E7=AB=A5=E7=8C=9B?=" <[email protected]>
    Date: Thu, 11 Mar 2010 14:46:49 +0800
    To: "" <[email protected]>
    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: base64suLK1KGjsKy4pcmttdi3vS4uICANCrLiytSho7CsuKXJrbXYt70uLrLiytSh
    o7CsuKXJrbXYt70u
    ----NEXT_BM_B2991028751B4A3DABF34FF131CE9D3A
    Content-Type: text/html
    Content-Transfer-Encoding: base64PCFET0NUWVBFIGh0bWwgUFVCTElDICctLy9XM0MvL0RURCBIVE1MIDQuMDEg
    VHJhbnNpdGlvbmFsLy9FTic+DQo8aHRtbD4NCjxoZWFkPg0KIDxtZXRhIGh0
    dHAtZXF1aXY9J0NvbnRlbnQtVHlwZScgY29udGVudD0ndGV4dC9odG1sO2No
    YXJzZXQ9VVRGLTgnPg0KIDxzdHlsZT5CT0RZe2ZvbnQ6MTBwdCBUYWhvbWEs
    IFZlcmRhbmEsIHNhbnMtc2VyaWY7fTwvc3R5bGU+DQo8L2hlYWQ+DQo8Ym9k
    eT4NCrLiytSho7CsuKXJrbXYt70uLg0KPERJVj6y4srUoaOwrLilya212Le9
    LrLiytSho7CsuKXJrbXYt70uPC9ESVY+PC9ib2R5PjwvaHRtbD4=
    ----NEXT_BM_B2991028751B4A3DABF34FF131CE9D3A--
    这个应该是整个邮件的最完整信息了 是byte64的
      

  32.   

    suLK1KGjsKy4pcmttdi3vS4uICANCrLiytSho7CsuKXJrbXYt70uLrLiytSh
    o7CsuKXJrbXYt70u解码后:测试。艾弗森地方.. 测试。艾弗森地方..测试。艾弗森地方.
      

  33.   

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

  34.   


    我贴出的那部分应该是BODY部分的。。
    真正的标题应该是SUBJECT 是一堆乱码,获取到的值只有内容转义成了BATY64 标题没被转义
      

  35.   

    mailMessage.Headers.GetHeader("Subject")你在这句之前 写什么了么
      

  36.   

    我 把很多都注释掉了  
    取邮件的方法是:
    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");
    }
      

  37.   

     mailMessage.ISOEncodeHeaders = false;
    这句漏下了  我也加了的
      

  38.   


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

  39.   

    string Subject = Encoding.UTF8.GetString(Encoding.GetEncoding("GB2312").GetBytes(mailMessage.Headers.GetHeader("Subject")))
      

  40.   

    你好厉害。!!!!
    不过不知道怎么搞的 多了个/t
    这个/t还是获取subject时就有了的 不知道怎么回事原标题是:测试。艾弗森地方.
    Response.Write(Encoding.UTF8.GetString(Encoding.GetEncoding("GB2312").GetBytes("娴嬭瘯銆傝壘寮楁.\t鍦版柟.")));得到的是:测试。艾弗森\t地方.
    去掉\t就可以的,怎么无缘无故多出来了? 不知道怎么回事。
      

  41.   

    哦,判断发件人你不是说从 KERIO邮件系统 发的邮件是乱码么判断是否是 KERIO邮件系统发的 就是了
      

  42.   

    我很诧异 KERIO邮件系统发的邮件也有部分几条是正确的
    所以不能这样判断。。
      

  43.   

    我发现乱码的标题邮件他的mailMessage.Text中会有一个utf-8存在
    而正确标题的邮件的mailMessage.Text属性是没的
    我用
     if (mailMessage.Text.IndexOf("utf-8") > 0)
    判断了一下 结果可行。问题终于解决了!!!谢谢你!!!
      

  44.   


    字符串有 Contains 函数 判断 是否包含指定字符串的
      

  45.   

    MimeUtility.decodeText(),java mail有这个现成都方法。不知是不是楼主要的
      

  46.   

        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=