3

当我点击发送按钮时,我需要一次向 60 到 100 名学生发送邮件。如果我有 6 到 7 名学生,这很好,但是当我开始发送给 60 名学生时,我的代码显示以下错误

系统存储不足。服务器响应是:每个连接的电子邮件太多。

这是我的代码

受保护的无效btnsend_Click(对象发送者,EventArgs e){

     if (drptopics.SelectedValue == "-1")
            {
                Response.Write(@"<script language='javascript'>alert('Please select one Topic');</script>");
            }


     else

     {

    SqlConnection conn = new SqlConnection();
    conn.ConnectionString = "Data Source=xxxx; User Id=sa; Password=xxxx; Initial Catalog=xxxx; Integrated Security=SSPI;";
    conn.Open();


    SqlCommand cmd = new SqlCommand();
    cmd.Connection = conn;
    cmd.CommandText = "select EMail_1 from Student_Info where Branch_Code='ap' and Student_ID in(select Student_ID from Admissions where Branch_Code='ap' and Batch_ID='" + txtbatchid.Text + "')";
    cmd.CommandType = CommandType.Text;

    SqlDataAdapter da = new SqlDataAdapter(cmd);
    da.SelectCommand = cmd;
    DataSet ds = new DataSet();
    da.Fill(ds);




    if (ds.Tables[0].Rows[0][0] != null)
    {
        int count = ds.Tables[0].Rows.Count;


        for (int i = 0; i < count; i++)
        {

            MailMessage mm = new MailMessage();
            mm.To.Add(new MailAddress(ds.Tables[0].Rows[i][0].ToString()));
            mm.From = new MailAddress("xxxxx@abc.com");
            mm.Subject = "SMS and Interview Questions of Oracle 11g DBA";
            mm.IsBodyHtml = true;





            //Day 1 Architecture 1
             if (drptopics.SelectedValue == "1")
            {
                Attachment attachment1 = new Attachment(Server.MapPath("~/Oracle 11g DBA/Day 1/Architecture-1-I.doc")); //create the attachment
                mm.Attachments.Add(attachment1);
                Attachment attachment2 = new Attachment(Server.MapPath("~/Oracle 11g DBA/Day 1/Architecture1-S.doc")); //create the attachment
                mm.Attachments.Add(attachment2);

            }


            //Day 2 Architecture 2
            else if (drptopics.SelectedValue == "2")
            {
                Attachment attachment1 = new Attachment(Server.MapPath("~/Oracle 11g DBA/Day 2/Architecture-2-I.doc")); //create the attachment
                mm.Attachments.Add(attachment1);
                Attachment attachment2 = new Attachment(Server.MapPath("~/Oracle 11g DBA/Day 2/Architecture2-S.doc")); //create the attachment
                mm.Attachments.Add(attachment2);
            }

             mm.Body = "<html><head><body><h1>Thank you for choosing Wilshire</h1><br><b>Team Wilshire<b></body></head></html>";
            SmtpClient s = new SmtpClient("smtp.net4india.com");
            s.Send(mm);


        }

    }

}

请告诉我解决方案.......................

4

4 回答 4

2

SmtpClient.SendAsync()可能会导致其他问题(SMTP 服务器设置了每分钟的最大邮件数以避免垃圾邮件)!

由于邮件相同,因此解决方案是1 封单个邮件,所有收件人都为隐藏收件人( Bcc)!

MailMessage mm = new MailMessage();

for (int i = 0; i < count; i++)
{
  mm.Bcc.Add(new MailAddress(ds.Tables[0].Rows[i][0].ToString()));
}
mm.To.Add(new MailAddress("xxxxx@abc.com");
mm.From = new MailAddress("xxxxx@abc.com");
mm.Subject = "SMS and Interview Questions of Oracle 11g DBA";

....

SmtpClient s = new SmtpClient("smtp.net4india.com");
s.Send(mm);
于 2013-07-25T10:36:14.283 回答
1

错误显示“每个连接的电子邮件过多”。为什么不每次连接发送更少的电子邮件?每隔几封电子邮件添加一个循环并处理连接,然后创建一个新的?

于 2013-07-25T09:53:33.310 回答
1

用于SmtpClient.SendAsync Method发送邮件它是一一发送邮件背景。

参考链接1

参考链接 2

于 2013-07-25T09:54:56.153 回答
1

如果您正在使用最新的框架,您还可以使用 ASP.NET4.5 的新功能。

参考链接:

http://www.codeproject.com/Articles/599756/Five-Great-NET-Framework-4-5-Features

功能 1:async 和 await(代码标记)

于 2013-07-25T09:58:13.970 回答