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++)