首页 > 解决方案 > 使用 sql 表作为收件人的动态电子邮件列表

问题描述

我希望使用 sql 表列作为我列表的来源,从 ac# 控制台应用程序发送多封电子邮件。

使用以下代码,我收到错误“System.FormatException:'指定的字符串不是电子邮件地址所需的形式。'”

当我将输出发送到控制台时,传递给 var m 的所有内容都是字符串的第一个字母。

我非常接近完成这项工作,因为这看起来像是最后一件。

任何人都可以为我指明方向以使其发挥作用。

        con = new SqlConnection("MyConnectionString");

        SqlCommand cmd = new SqlCommand();

        cmd.CommandText = "SELECT * FROM UserEmails";
        cmd.Connection = con;

        try
        {
            con.Open();
            SqlDataReader reader = cmd.ExecuteReader();

            while (reader.Read())
            {

                MailMessage mailMessage = new MailMessage();

                //string[] to = { "me@hotmail.com", "me@gmail.com"}; //<-- this works 

                string to = reader.GetString(1);   //<-- this dosent work :( 

                foreach (var m in to)
                {
                    mailMessage.To.Add(m);
                }

                mailMessage.Subject = "Hello";
                mailMessage.Body = "This is a test email";
                mailMessage.From = new MailAddress("me@gmail.com", "me");

                SmtpClient smtpMail = new SmtpClient();
                smtpMail.Host = "smtp.gmail.com";
                smtpMail.Credentials = new NetworkCredential("me@gmail.com", "password");
                smtpMail.EnableSsl = true;

                try
                {
                    smtpMail.Send(mailMessage);
                    Console.WriteLine("Message Sent");
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message.ToString());
                }
            }
            reader.Close();
        }
        finally
        {
            con.Close();
        }

标签: c#

解决方案


您遍历 的字符to,这是一个字符串。

而不是这个:

foreach (var m in to)
{
  mailMessage.To.Add(m);
}

做这个:

mailMessage.To.Add(new MailAddress(to));

推荐阅读