我想做个简易邮件客户端,用System.Net.Mail命名空间下的类发送邮件,可以在网站上或者OE等客户端里正确显示内容。但是,如果用jmail接收,却发现完全无法解析出附件名称和类型,附件名一律是.msg,不过如果改成它们原本的名字,可以发现附件内容实际上已经被正确下载了,因为可以正确打开。我实在不知道为什么,难道是jmail的bug?
下面贴出部分源码,希望各位帮忙:
   发送邮件的:
   tring FromMail = "[email protected]";//发件人
            string Title = "test"; //邮件主题
            string Body = "test";   //邮件主体
            string ShowName = "paladintsy";//显示名字
            string MailUserName = "tangsiyanking";
            string MailPassword = "xxxxxx";//密码就不给了....
            System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
            msg.From = new MailAddress(FromMail,ShowName,System.Text.Encoding.GetEncoding("GB2312"));
            msg.Subject = Title;//邮件标题 
            msg.Body = Body;//邮件内容 
            msg.Priority = MailPriority.Normal;//邮件优先级  
            msg.SubjectEncoding = System.Text.Encoding.GetEncoding("GB2312");//标题编码
            msg.BodyEncoding = System.Text.Encoding.GetEncoding("GB2312");//正文编码
            msg.To.Add("[email protected]");             System.Net.Mail.Attachment attTemp = new System.Net.Mail.Attachment("C:\\Documents and Settings\\HellKnight\\My Documents\\My Pictures\\profile.txt");            attTemp.NameEncoding = System.Text.Encoding.GetEncoding("GB2312");//附件名编码
            msg.Attachments.Add(attTemp);
.....................................................
接收邮件:
      string subject;
            string body;
            jmail.Message jmsg = new jmail.Message();//生成jmail邮件对象
            jmail.POP3 jpop = new jmail.POP3();//生成POP3对象,用于连接服务器
            jmail.Attachments atts = new jmail.Attachments();//附件集合对象
            jmail.Attachment att = new jmail.Attachment();//附件对象
            jpop.Connect("tangsiyanking","xxxxxx","pop3.sina.com.cn",110);//连接服务器,4个参数依次为用户名,密码,服务器地址,端口号(可选,默认就是110)
            for (int i = 1; i <= jpop.Count; i++)//如果有邮件就接收
            {
                jmsg = jpop.Messages[i];//取得第i封邮件,注意这个数组下标从1开始
                atts = jmsg.Attachments;//取得邮件的所有附件
                subject = jmsg.Subject;//得到邮件标题
                body = jmsg.Body;
              for (int j = 0; j < atts.Count; j++)
                    {
                        att = atts[j];
                     if (File.Exists("D:\\atts\\" + att.Name))
                     {
                         int count = 1;
                         while (File.Exists("D:\\atts\\" + "(" + count + ")" + att.Name))
                         {
                             ++count;
                         }
                         att.SaveToFile("D:\\atts\\" + "(" + count + ")" +att.Name);                        
                     }
                     else
                     {
                         att.SaveToFile("D:\\atts\\" + att.Name);
                                              }
                     if (j != atts.Count - 1)
                         attachmentpath += ",";
                    }...................................................
主要的就是上面贴出的代码,请大家帮忙看看,什么地方可能出错?
   

解决方案 »

  1.   

    你用的jmail哪个版本?用其它版本有时候会出现这个问题只有JMail4.4pro版本不会出现这个问题详见http://www.cnblogs.com/ustbwuyi第一篇文章
      

  2.   

    这篇文章我是详细拜读过好几遍,我用的就是jmail 4.4pro。我看了下,邮件原文里附件的content-type是application/octet-stream,或许jmail不能正确识别这个类型?
      

  3.   

    顶贴,这个问题很致命,做不出来我拿不到学分了。早知道当初应该自己写POP3收取邮件和邮件解码的部分,没想到第三方组件这么不可靠。
      

  4.   

    我用的jmail. 蛮好用的,没有这种问题.
      

  5.   

    我也觉得奇怪,因为网上搜不到我说的这种错误。你jmail收取邮件怎么做的?有没有什么属性要设置?
      

  6.   

    测试了一下,状况大致如下:
       发送一封邮件,标题和内容都是test,带有一个名叫profile.txt的文本文件(5K左右)。
    1.用WindowsLiveMail和126的邮箱发送后,jmail可以正确接收。
    2.用Gmail,Sina邮箱,QQ邮箱发送后,jmail都无法正确接收,甚至根本都认为邮件没有携带附件。
    3.用我自己写的System.Net.Mail命名空间下的类发送的邮件,需要手动添加ContentDisposition.FileName和ContentDisposition.DispositionType这两个属性值,jmail才可以正确解析出附件。
      

  7.   

    另外,我发送的邮件无论在线查看,还是用FoxMail或者WindowsLiveMail接收都是很正常的。
      

  8.   

    惨......我没有试Gmail及QQ邮箱......
      

  9.   

    刚试验了QQ邮箱. 可以正常收到附件.GMAIL连不上,明天再试试看.
      

  10.   

    是直接用QQ邮箱在线发送的?看来是我的RP问题
      

  11.   

    刚试了下Gmail过来的,文件没问题,就是文件名及邮件内容乱码了. 看来这个问题还得处理一下.
      

  12.   

    呵呵,你不让他用Gmail与QQ邮箱发不就OK了? 演示的时候给他用126或163的邮箱,使用gb2312编码,不要使用utf8. 一个作业而已,何必那么较真呢?我倒是有蛮麻烦了. 项目中打算就这么用的,经你这么一提醒,倒真试出问题来了.我发现jmail对utf8编码的中文不感冒. 准备采用的办法是看到utf8编码的内容,就自己再重新将源字符串(Base64编码的)重新解码一遍. C#的Convert有相关的解码函数,结合正则表达式,应该不是很难. 暂时还没有正式弄.
      

  13.   

    UTF-8编码的邮件不正常,我寒假的时候发帖问过。不过没有得到好的解决办法就算了。jmail的官方论坛现在好像不给注册了,没法上去直接问,真郁闷。
      

  14.   

    自己判断utf8编码的邮件,然后重新解码吧. 应该不难的.我这几天有点别的事在弄,没弄这个,过几天再看看.
      

  15.   

    看起来不是光自己utf8解码,我得自己写邮件解码的内容了
      

  16.   

    测试了所谓的OpenPOP 1.3版本,也有jmail的问题。老外的第三方真是不可靠。
      

  17.   

    搂主接JMAIL的附件是用SAVETOFILE直接保存成文件的么?我遇到奇怪的问题是用JMAIL自带输出的STRING型文件流是乱码
    保存的文件根本没法用,郁闷的你的问题我到是没遇到,我测试用的2个邮箱都没问题
    过会注册个SINA试下
      

  18.   

    我用jmail接收qq邮件都是‘null’,‘nuknow’