2014-01-22 45 views
0
string line; 
int counter = 0; 

do 
{ 
    line = readFile.ReadLine(); 
    counter++; 

    var emailAddress = line; 

    if (line != null) 
    { 

     Console.WriteLine("Reading client email address..."); 
     mailMessage.From = new MailAddress("myEmailAddress"); 
     mailMessage.To.Add(line); 
     mailMessage.Subject = "TEST_SUBJECT"; 
     mailMessage.Body = "TEST_BODY"; 
     client.EnableSsl = true; 
     client.Send(mailMessage); 
     Console.WriteLine("Email sent to: " + line); 
    } 

} while (line != null); 

問題是,每當應用程序發送電子郵件,它迭代再次槽源(存儲的電子郵件的文件),它是這樣:
讀線>發送電子郵件至線1>讀取行>發送電子郵件到第1行&第2行>閱讀行>發送電子郵件到第1,2行& 3等等。它不會像它應該:閱讀線路>發送電子郵件到第1行>發送電子郵件到第2行。C#文件迭代問題

我做錯了什麼?

+0

我不認爲你已經顯示的代碼將做到這一點。請顯示一個簡短但完整的程序和一個示例輸入文件。 (程序不需要發送電子郵件 - 只需編寫控制檯輸出。)請注意,在File.ReadLines上使用'foreach'循環會更簡單。 –

+5

看來你做client.Send(mailMessage);每個週期while mailMessage.To.Add(line);看起來像存儲整個收件人列表。嘗試在每個週期開始時創建mailMessage的新實例或清除收件人列表以快速修復,以查看它是否有效。 – wondra

+0

http://prntscr.com/2li2bu這是輸出,在這裏,它有點正確。 – m0nsterp1ece

回答

0

我想你應該在循環中用new來初始化mailMessage。

0

你的問題是與線:

mailMessage.To.Add(line); 

要添加新的收件人的郵件,但沒有得到從以前的迭代擺脫舊的。

假設你正在使用System.Net.Mail.MailMessageToMailAddressCollection類型,所以你應該能夠使用以清除舊的條目:

mailMessage.To.Clear(); 
+0

如何擺脫以前迭代中的舊條目? – m0nsterp1ece

+0

編輯我的答案 - 見上文。 – raveturned

2

問題是這樣的一行:

mailMessage.To.Add(line); 

隨着每次迭代,您將添加電子郵件地址添加到郵件中,這會導致您的問題。

嘗試類似:

mailMessage.To.Clear(); 
mailMessage.To.Add(line); 

或在每次迭代中初始化一個新的對象MAILMESSAGE。