2017-06-05 288 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字段設置爲您的(發件人)電子郵件地址,以便發送給某人。

這是一個更有效的解決方案,並具有相同的總體結果。