Window 服务的 For 循环中仅发送第一封电子邮件
only the first email is being sent in a For Loop of a Window Service
我想使用我自己的数据库向 2 个以上的人发送电子邮件。
所以我使用 for 循环来发送电子邮件。但它只是将它发送给第一个人。
我还检查了 email_data 是否超过 2 个,并且我将电子邮件数据带好。
这是我的代码。
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);
}
}
}
通过添加调试打印来检查行数
也试着把睡眠放在最后
smtp.UseDefaultCredentials = true;
smtp.Credentials = credentials;
smtp.Port = 587;
smtp.Send(mm);
System.Threading.Sleep(1000);
我试图在我的计算机上 运行 您的代码(我只是用我的私人 gmail 帐户凭据替换了凭据)并且它没有任何问题 - 电子邮件已成功发送到 3 个不同的电子邮件地址。所以问题可能与您的计算机有关。因此,这里有一些您可以尝试的想法:
- 运行 您的程序在不同的计算机上运行,看看它是否在那里工作(对于
比较,我 运行 它在 Windows 10 Home,Visual Studio 2017 CE,针对 .NET Framework 4.7 的控制台应用程序上成功)
- 检查您的防病毒软件和防火墙是否以某种方式阻止群发电子邮件。
- 尝试调试
SmtpClient.Send()
方法的源代码,看看在哪里
恰好执行停止,这应该给你一个提示什么是错的
以及如何修复它。
- 在 app.config 中启用详细的网络通信日志记录,看看连接到 SMTP 服务器时是否有问题。
顺便说一句,可能有错误:for (int i = 0; i <= email_data.Rows.Count; i++)
应该是 for (int i = 0; i < email_data.Rows.Count; i++)
我想使用我自己的数据库向 2 个以上的人发送电子邮件。 所以我使用 for 循环来发送电子邮件。但它只是将它发送给第一个人。 我还检查了 email_data 是否超过 2 个,并且我将电子邮件数据带好。 这是我的代码。
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);
}
}
}
通过添加调试打印来检查行数
也试着把睡眠放在最后
smtp.UseDefaultCredentials = true;
smtp.Credentials = credentials;
smtp.Port = 587;
smtp.Send(mm);
System.Threading.Sleep(1000);
我试图在我的计算机上 运行 您的代码(我只是用我的私人 gmail 帐户凭据替换了凭据)并且它没有任何问题 - 电子邮件已成功发送到 3 个不同的电子邮件地址。所以问题可能与您的计算机有关。因此,这里有一些您可以尝试的想法:
- 运行 您的程序在不同的计算机上运行,看看它是否在那里工作(对于 比较,我 运行 它在 Windows 10 Home,Visual Studio 2017 CE,针对 .NET Framework 4.7 的控制台应用程序上成功)
- 检查您的防病毒软件和防火墙是否以某种方式阻止群发电子邮件。
- 尝试调试
SmtpClient.Send()
方法的源代码,看看在哪里 恰好执行停止,这应该给你一个提示什么是错的 以及如何修复它。 - 在 app.config 中启用详细的网络通信日志记录,看看连接到 SMTP 服务器时是否有问题。
顺便说一句,可能有错误:for (int i = 0; i <= email_data.Rows.Count; i++)
应该是 for (int i = 0; i < email_data.Rows.Count; i++)