2015-06-29 4 views
0

У меня есть программа, которая отправляет автоматические письма людям, которые находятся в моей базе данных. Я беру человек к таблице данных с этим кодом:Почему он отправляет почту дважды?

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); 

     } 
    } 

} 

Можете ли вы помочь мне, пожалуйста?

+1

Поместить MailMessage mesaj = new MailMessage(); внутри цикла, иначе он не будет повторно инициализирован. –

+1

Вы отправляете почту в цикле. Почему удивительно, что вы отправляете больше одного? – David

ответ

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

спасибо, что это работает :) – SteveGates

+0

@SteveGates без проблем рад, что я мог бы помочь вам! – Mivaweb

+0

@SteveGates не забывайте назначать это как ответ, так что другие люди, которые имеют одинаковую проблему, видят решение – Mivaweb

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); 

} 
0

Если я понял, что вы говорите правильно, и вы хотите новое сообщение для каждой строки в возвращаемой таблице, то вам нужно переместить:

MailMessage mesaj = new MailMessage(); 

..into ваших 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); 
} 
Смежные вопросы