无法使用C#向多个地址/收件人发送电子邮件

我使用以下代码,它只发送一封电子邮件 – 我必须将电子邮件发送到多个地址。

为了获得多个我使用的电子邮件:

string connectionString = ConfigurationManager.ConnectionStrings["email_data"].ConnectionString; OleDbConnection con100 = new OleDbConnection(connectionString); OleDbCommand cmd100 = new OleDbCommand("select top 3 emails from bulk_tbl", con100); OleDbDataAdapter da100 = new OleDbDataAdapter(cmd100); DataSet ds100 = new DataSet(); da100.Fill(ds100); for (int i = 0; i < ds100.Tables[0].Rows.Count; i++) //try { string all_emails = ds100.Tables[0].Rows[i][0].ToString(); { string allmail = all_emails + ";"; Session.Add("ad_emails",allmail); Response.Write(Session["ad_emails"]); send_mail(); } } 

并发送我使用的电子邮件:

 string sendto = Session["ad_emails"].ToString(); MailMessage message = new MailMessage("info@abc.com", sendto, "subject", "body"); SmtpClient emailClient = new SmtpClient("mail.smtp.com"); System.Net.NetworkCredential SMTPUserInfo = new System.Net.NetworkCredential("abc", "abc"); emailClient.UseDefaultCredentials = true; emailClient.Credentials = SMTPUserInfo; emailClient.Send(message); 

问题是,当它只接受表示单个地址的字符串时,您将提供由分号分隔的地址列表到MailMessage构造函数:

包含电子邮件收件人地址的字符串。

或者可能是用逗号分隔的列表(见下文)。

资源

要指定多个地址,您需要使用To属性,这是一个MailAddressCollection ,尽管这些页面上的示例不能很清楚地显示:

 message.To.Add("one@example.com, two@example.com")); 

要添加到MailAddressCollection的电子邮件地址。 必须使用逗号字符(“,”)分隔多个电子邮件地址。

MSDN页面

所以用逗号分隔的列表创建MailMessage应该有效。

这对我有用。 (收件人是一个字符串数组)

 //Fuse all Receivers var allRecipients = String.Join(",", recipients); //Create new mail var mail = new MailMessage(sender, allRecipients, subject, body); //Create new SmtpClient var smtpClient = new SmtpClient(hostname, port); //Try Sending The mail try { smtpClient.Send(mail); } catch (Exception ex) { Log.Error(String.Format("MailAppointment: Could Not Send Mail. Error = {0}",ex), this); return false; } 

此函数validation以逗号分隔或以分号分隔的电子邮件地址列表:

 public static bool IsValidEmailString(string emailAddresses) { try { var addresses = emailAddresses.Split(',', ';') .Where(a => !string.IsNullOrWhiteSpace(a)) .ToArray(); var reformattedAddresses = string.Join(",", addresses); var dummyMessage = new System.Net.Mail.MailMessage(); dummyMessage.To.Add(reformattedAddresses); return true; } catch { return false; } } 

要发送给多个收件人,我设置了一个逗号作为我的分隔符的收件人字符串。

 string recipient = "foo@bar.com,foo2@bar.com,foo3@bar.com"; 

然后将收件人添加到MailMessage对象:

 string[] emailTo = recipient.Split(','); for (int i = 0; i < emailTo.GetLength(0); i++) mailMessageObject.To.Add(emailTo[i]); 

我用这个代码发送多个邮件给,bcc和cc

 MailMessage email = new MailMessage(); Attachment a = new Attachment(attach); email.From = new MailAddress(from);//De string[] Direcciones; char[] deliminadores = { ';' }; //Seleccion de direcciones para el parametro to Direcciones = to.Split(deliminadores); foreach (string d in Direcciones) email.To.Add(new MailAddress(d));//Para //Seleccion de direcciones para el parametro CC Direcciones = CC.Split(deliminadores); foreach (string d in Direcciones) email.CC.Add(new MailAddress(d)); //Seleccion de direcciones para el parametro Bcc Direcciones = Bcc.Split(deliminadores); foreach (string d in Direcciones) enter code here`email.Bcc.Add(new MailAddress(d)); 

您还可以通过MailMessage.To.Add()传递一个逗号分隔的有效RFC 822电子邮件地址列表 :

 Nathaniel Borenstein , Ned Freed  

所以代码是:

 message.To.Add("Nathaniel Borenstein , Ned Freed "); 

注意 :任何代码都会发布到公共领域。 无需归属。