Asp.net:如何修复向多个收件人发送邮件时抛出的异常?erroline:在邮件头中找到了无效字符:','

时间:2013-09-09 07:29:29

标签: c# asp.net email

当我尝试从数据库中获取电子邮件数据以发送电子邮件时,此行message.To.Add(mailTo);出错。

 void Sendmail_Click(object sender, EventArgs e)
        {

            List<DAL.Customer> mailId = (from rs in General.db.Customers
                                         where rs.IsActive == true
                                         select rs).ToList();

            StringBuilder mailstring = new StringBuilder();

                foreach (var item in mailId)
                {

                        mailstring.Append(item.Email).Append(",");

                }

            string mailTo = mailstring.ToString();

            if (mailTo.EndsWith(","))
            {

                mailTo = mailTo.Remove(mailTo.LastIndexOf(","));
            }


            SmtpClient smtp = new SmtpClient();
            mailMessage.From = fromMail;
            mailMessage.To.Add(new MailAddress(mailTo));

            mailMessage.IsBodyHtml = true;



            lblStatus.Text = "Email sent successfully";



    }

3 个答案:

答案 0 :(得分:2)

请看一下。我不知道凭证,所以我假设你可以加起来。

void Sendmail_Click(object sender, EventArgs e)
        {

            List<DAL.Customer> mailId = (from rs in General.db.Customers
                                         where rs.IsActive == true
                                         select rs).ToList();

            SmtpClient smtp = new SmtpClient();
            mailMessage.From = fromMail;
            mailMessage.IsBodyHtml = true;

            foreach (var item in mailId)
            {
               mailMessage.To.Add(new MailAddress(item.Email));
            }
            lblStatus.Text = "Email sent successfully";

    }

答案 1 :(得分:0)

正如Christian Mark建议的那样,你应该只是遍历每个邮件地址并单独添加它们(因为你已经遍历它们以构建一个字符串)。

但是,这在理论上不起作用的原因是因为您使用逗号分隔的电子邮件地址字符串创建 MailAddress,其中包含以下行: / p>

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

可以将逗号分隔的列表传递给Add(string)的{​​{1}}重载但是 - 因为您传递的是MailAddressCollection.Add - 这不是过载你正在使用。

以下方法可行:

MailMessage

答案 2 :(得分:0)

我没有看到带有逗号分隔字符串的MailAddress构造函数的任何重载。您需要一次遍历所有目标电子邮件地址,这需要对代码进行少量重组:

SmtpClient smtp = new SmtpClient();
mailMessage.From = fromMail;

List<DAL.Customer> mailId = (from rs in General.db.Customers
                             where rs.IsActive == true
                             select rs).ToList();

foreach (var item in mailId)
{
    mailMessage.To.Add(new MailAddress(item.Email));
}