2017-06-05 174 views
0

我想发送一封电子邮件给超过2人使用我自己的数据库。所以我使用for循环发送电子邮件。它发送给第一个人(mail_data.Rows [0] [0]),但不是第二个人。(mail_data.Rows [1] [0])代码在smtp.Send(mm)之前停止。第二个人的电子邮件是完全正确的。我不知道为什么代码停在那里。smtp不适用于循环

private void Email() 
    { 
     //get the data from database 
     DataTable data = GetData(); 
     DataTable email_data = GetEmailData(); 

     data.TableName = "Employee_Data"; 

       .... 


       String from = "[email protected]"; 

       for (int i = 0; i <= email_data.Rows.Count; i++) 
       { 
        String to = email_data.Rows[i][0].ToString(); 

        using (MailMessage mm = new MailMessage(from, to)) 
        { 
         this.WriteToFile(to); 
         using (SmtpClient smtp = new SmtpClient()) 
         { 

          mm.Subject = "Fresh NSO Updated List"; 

          mm.AlternateViews.Add(body); 
          mm.Attachments.Add(new Attachment(new MemoryStream(bytes), "NSOList.xlsx")); 
          mm.IsBodyHtml = true; 

          smtp.Host = "smtp.gmail.com"; 
          smtp.EnableSsl = true; 
          System.Net.NetworkCredential credentials = new System.Net.NetworkCredential(); 
          credentials.UserName = "[email protected]"; 
          credentials.Password = "aa"; 
          smtp.UseDefaultCredentials = true; 
          smtp.Credentials = credentials; 
          smtp.Port = 587; 

          this.WriteToFile("beforeSend"); 
          Thread.Sleep(1000); 
      //just stop here on second loop, 
          smtp.Send(mm); 
          this.WriteToFile("Sent!"); 
         } 

        } 

       } 
      } 
+4

你是什么意思?抛出异常吗?它挂在发送?你真的只是将你的真实密码嵌入到这个堆栈溢出问题中吗?可怕的想法。您需要立即更改密码。 – mason

+3

而不是单独的消息,你可不只是将所有收件人添加到单个电子邮件的密件抄送字段? – Andy

+0

@mason哦是的..这是我的错误,我看到这一个后立即改变..谢谢。当我执行代码时,它挂在发送第二个for循环。 – Scarlett

回答

0

而不是发送个人电子邮件给每个收件人的时候他们都是相同的内容,你应该使用BCC(密件抄送)字段发送相同的邮件给多个收件人,仍然为所有提供的隐私他们的电邮地址。

您可以将to字段设置为您的(发件人)电子邮件地址,以便发送给某人。

这是一个更有效的解决方案,并具有相同的总体结果。