无法使用Asp.Net通过SMTP发送邮件

时间:2013-07-25 09:50:06

标签: asp.net

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

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

这是我的代码

protected void btnsend_Click(object sender,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 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

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

答案 2 :(得分:1)

使用SmtpClient.SendAsync Method逐个发送邮件发送邮件。

Reference Link 1

Reference Link 2

答案 3 :(得分:1)

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

参考链接:

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

功能1:异步和等待(代码标记)