我的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();
第一封正常,但是第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();
DataSet dsMail = new DataSet();
sdaMail.Fill(dsMail, "dsMail");
string dyid = dsMail.Tables[0].Rows[0]["BookID"].ToString();
你每次循环都是取dataset的第一个table当然不对,应该是第i个才对,这样当然都一样啦
我dataset就一个datatable
在那里面循环是肯定错了的
Jmail.ClearAttachments;
如果不行你就把实例化(jmail.Message Jmail = new jmail.Message();
)放到循环中去
2.发件人的邮件是否可能正学登陆
3.邮件设置有问题因为没有写过C#的Jmail,但是应该出现在这些方面,你再检查一下吧如果还有问题可以一起讨论,http://www.jw5u.com(苏州网站建设,网页制作)
感谢
你给了我思路
Jmail.AddAttachment("D:\\WebSite10\\" + arry[b] + ".htm", true, null);
不管你循环多少次,你外面的Jmail只有一个,他会把你查询出来的所有附件都添加进去,你要在发送完一封邮件之后清空!
加一行代码:
Jmail.Attachments.Clear();
再于收件人,道理也是一样的:加一行
Jmail.Recipients .Clear