为什么它会两次发送邮件?

时间:2015-06-29 14:13:58

标签: c# asp.net smtp

我有一个程序可以向我数据库中的人发送自动邮件。我将这些人带到数据表中:

private DataTable verileri_cek() 
{
    consql.Open();
    string kayit = "SELECT * from kisiler where 
        DATEPART(DAY,dogumtarihi)=DATEPART(DAY,GETDATE()) and 
        DATEPART(MONTH,dogumtarihi)=DATEPART(MONTH,GETDATE())";
    SqlCommand komut = new SqlCommand(kayit, consql);
    SqlDataAdapter da = new SqlDataAdapter(komut);
    DataTable dt =new DataTable(); 
    da.Fill(dt);
    consql.Close();
    return dt;
}

然后我想发送邮件给数据表上的人。我必须收到2封电子邮件,用于发送我的两封电子邮件。但它发送了两次。为什么? 这是我发送邮件的代码部分:

private void Saat10()
{
    DataTable dt=verileri_cek();

    if (dt.Rows.Count > 0)
    {
        SmtpClient client = new SmtpClient();
        MailMessage mesaj = new MailMessage();

        for (int i = 0; i < dt.Rows.Count; i++)
        {
            if (dt.Rows[i]["durum"].ToString() == "Akademik")
            {
                mesaj.IsBodyHtml = true;
                mesaj.Subject = "Doğum Günü";
                mesaj.Body = "Sayın Akademik Personelimiz" + dt.Rows[i]["isim"].ToString() + " " + dt.Rows[i]["soyisim"].ToString() + " " + "Doğum Gününüz Kutlu Olsun";

             }
             else
             {

                 mesaj.IsBodyHtml = true;
                 mesaj.Subject = "Doğum Günü";
                 mesaj.Body = "Sayın İdari Personelimiz" + " " + dt.Rows[i]["isim"].ToString() + "  " + dt.Rows[i]["soyisim"].ToString() + " " + "Doğum Gününüz Kutlu Olsun";

             }
             mesaj.To.Add(dt.Rows[i]["mail"].ToString());
             client.Send(mesaj);

         }
     }

 }
你能帮帮我吗?

3 个答案:

答案 0 :(得分:4)

您必须为每个用户创建一个新的MailMessage对象:

 private void Saat10()
 {
    DataTable dt=verileri_cek();

    if (dt.Rows.Count > 0)
    {
        SmtpClient client = new SmtpClient();
        MailMessage mesaj = new MailMessage();

        for (int i = 0; i < dt.Rows.Count; i++)
        {
           mesaj = new MailMessage();

           // all other code
        }
    }

  }

答案 1 :(得分:0)

首先,我建议您在实际发送邮件之前每次打印一次。当然你也可以调试。在您的示例中,您需要在for循环中创建消息。

for (int i = 0; i < dt.Rows.Count; i++)
{
     MailMessage mesaj = new MailMessage();
     if (dt.Rows[i]["durum"].ToString() == "Akademik")
     {
           mesaj.IsBodyHtml = true;
           mesaj.Subject = "Doğum Günü";
           mesaj.Body = "Sayın Akademik Personelimiz" + dt.Rows[i]["isim"].ToString() + " " + dt.Rows[i]["soyisim"].ToString() + " " + "Doğum Gününüz Kutlu Olsun";


     }
     else
     {
           mesaj.IsBodyHtml = true;
           mesaj.Subject = "Doğum Günü";
           mesaj.Body = "Sayın İdari Personelimiz" + " " + dt.Rows[i]["isim"].ToString() + "  " + dt.Rows[i]["soyisim"].ToString() + " " + "Doğum Gününüz Kutlu Olsun";

     }
     mesaj.To.Add(dt.Rows[i]["mail"].ToString());
     client.Send(mesaj);

}

答案 2 :(得分:0)

如果我已经理解了您正确说出的内容,并且您希望在返回的表格中为每一行添加新消息,那么您需要移动:

MailMessage mesaj = new MailMessage();

..进入您的For..Loop而不是在您检查是否有行之后。

for (int i = 0; i < dt.Rows.Count; i++)
{
    MailMessage mesaj = new MailMessage();

    //< rest of your code here>

    mesaj.To.Add(dt.Rows[i]["mail"].ToString());
    client.Send(mesaj);
}