我的jmail发送邮件的时候(群发)并且带多附件.
   第一封正常,但是第2封开始就不正常了,往往是把第一封的收件人也囊括进去,并且包括第一个收件人的附件.第三封就类推.
这个问题很恼火.有人跟我说是smtp的问题,因为附件太多,所以导致第一封还没发完的情况下第2封就开始发了,所以会出现上面问题
但是我用sleep 等待1分钟都没用.所以想请教这到底是什么问题
下面是代码
 jmail.Message Jmail = new jmail.Message();
        DateTime t = DateTime.Now;
        string sqlcon = System.Configuration.ConfigurationManager.ConnectionStrings["DreamConnectionString"].ToString();
        using (SqlConnection con = new SqlConnection(sqlcon))
        {
            con.Open();
            string sqlRw = "select UserMail from BookShipping";
            SqlDataAdapter sdaUser = new SqlDataAdapter(sqlRw, con);
            DataSet dsUser = new DataSet();
            sdaUser.Fill(dsUser, "dsUser");
            for (int i = 0; i < dsUser.Tables[0].Rows.Count; i++)
            {
                System.Threading.Thread.Sleep(2000);
                string UserMail = dsUser.Tables[0].Rows[i]["UserMail"].ToString();  
                string sqlpath = "select Bookid from BookShipping where UserMail = '" + UserMail + "'";
                Response.Write(UserMail);
                Response.Write("<br/>");
                SqlDataAdapter sdaMail = new SqlDataAdapter(sqlpath, con);
                DataSet dsMail = new DataSet();
                sdaMail.Fill(dsMail, "dsMail");
                string dyid = dsMail.Tables[0].Rows[0]["BookID"].ToString();
                string[] arry = dyid.Trim().Split(',');
                for (int b = 0; b < arry.Length; b++)
                {
                    Jmail.AddAttachment("D:\\WebSite10\\" + arry[b] + ".htm", true, null);
                  //  Response.Write("D:\\WebSite10\\" + arry[b] + ".htm");
                //    Response.Write("<br>");
                }
                Jmail.AddRecipient(UserMail, "", "");
                Jmail.Body = body + t.ToString();
                Jmail.Silent = true;//Silent属性:如果设置为true,JMail不会抛出例外错误. JMail. Send( () 会根据操作结果返回true或false
                Jmail.ContentTransferEncoding = "base64";
                Jmail.ISOEncodeHeaders = true;
                Jmail.Logging = true; //Jmail创建的日志,前提loging属性设置为true
                Jmail.Charset = "utf-8";   //字符集,缺省为"US-ASCII"
                Jmail.From = FromEmail;
                Jmail.MailServerUserName = SendName;      //发件人邮件用户名
                Jmail.MailServerPassWord = SendPassWord;    //发件人邮件密码
                Jmail.Subject = Subject; //设置邮件标题     
                Jmail.Send("mail.mndchina.com", false);//Smtp服务器
                Response.Write("成功");            }
            con.Close();

解决方案 »

  1.   

    SqlDataAdapter   sdaMail   =   new   SqlDataAdapter(sqlpath,   con); 
                                    DataSet   dsMail   =   new   DataSet(); 
                                    sdaMail.Fill(dsMail,   "dsMail"); 
                                    string   dyid   =   dsMail.Tables[0].Rows[0]["BookID"].ToString(); 
    你每次循环都是取dataset的第一个table当然不对,应该是第i个才对,这样当然都一样啦
      

  2.   

    直接报错
     我dataset就一个datatable
     在那里面循环是肯定错了的
      

  3.   

    不好意思,看错了,是这样你的Jmail定义在for外面,这样你每次循环都会往里面添加,你应该重新声明或者清空
      

  4.   

    发送完要清空一下Jmail.Send("mail.mndchina.com",   false);//Smtp服务器 
    Jmail.ClearAttachments;
      

  5.   

    问题很明显是实例化位置不对,每次发的都是同样的message我没有试过ClearAttachments这个方法,按道理应该是可以,
    如果不行你就把实例化(jmail.Message   Jmail   =   new   jmail.Message(); 
    )放到循环中去
      

  6.   

    收不到可能有三种可能1.接收人的邮件服务器会不会认为发件人的邮件是垃圾邮件地址
    2.发件人的邮件是否可能正学登陆
    3.邮件设置有问题因为没有写过C#的Jmail,但是应该出现在这些方面,你再检查一下吧如果还有问题可以一起讨论,http://www.jw5u.com(苏州网站建设,网页制作)
      

  7.   

    leaohong  无定河
     感谢
      你给了我思路
      

  8.   

    问题可能出在这里:
    Jmail.AddAttachment("D:\\WebSite10\\"   +   arry[b]   +   ".htm",   true,   null); 
    不管你循环多少次,你外面的Jmail只有一个,他会把你查询出来的所有附件都添加进去,你要在发送完一封邮件之后清空!
    加一行代码:
     Jmail.Attachments.Clear();
    再于收件人,道理也是一样的:加一行
    Jmail.Recipients .Clear