【发布时间】:2017-11-06 12:04:50
【问题描述】:
我想使用我自己的数据库向超过 2 个人发送电子邮件。 所以我使用 for 循环发送电子邮件。但它只是发送给第一个人。 我还检查了 email_data 有 2 个以上,我把 email 数据带好了。 这是我的代码。
private void Email()
{
DataTable email_data = GetEmailData();
.....
String from = "aa@gmail.com";
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))
{
SmtpClient smtp = new SmtpClient();
mm.Subject = "List";
mm.Attachments.Add(new Attachment(new MemoryStream(bytes), "List.xlsx"));
mm.IsBodyHtml = true;
smtp.Host = "smtp.gmail.com";
smtp.EnableSsl = true;
System.Net.NetworkCredential credentials = new System.Net.NetworkCredential();
credentials.UserName = "aa@gmail.com";
credentials.Password = "aa";
smtp.UseDefaultCredentials = true;
smtp.Credentials = credentials;
smtp.Port = 587;
//works well in the first loop, but stops here in the second loop
smtp.Send(mm);
}
}
}
【问题讨论】:
-
虽然这可能不是您的问题的原因,但请注意
SmtpClient和Attachment实现了IDisposable,因此您应该将它们包含在using(...)语句中 -
@Nuf 我想我使用 using(...) 语句,你的意思是 for 循环也应该用 using() 语句括起来?
-
我的意思是
using(SmtpClient smtp = new SmtpClient()) {...}和using(Attachment(new MemoryStream(bytes), "List.xlsx")) {...} -
@Nuf 我试过了,但还是不行。。对于第一封电子邮件,它发送得很完美,但是当我转到第二个 for loop 时,它在 smtp.Send(mm) 之前停止了.
标签: c# email windows-services sendmail taskscheduler