使用MailMessage向多个收件人发送电子邮件

我有多个电子邮件收件人存储在Sql服务器。 当我点击发送网页时,它应该发送电子邮件给所有收件人。我已经使用“;”分隔电子邮件。

以下是单个收件人代码。

MailMessage Msg = new MailMessage(); MailAddress fromMail = new MailAddress(fromEmail); Msg.From = fromMail; Msg.To.Add(new MailAddress(toEmail)); if (ccEmail != "" && bccEmail != "") { Msg.CC.Add(new MailAddress(ccEmail)); Msg.Bcc.Add(new MailAddress(bccEmail)); } SmtpClient a = new SmtpClient("smtp server name"); a.Send(Msg); sreader.Dispose(); 

简单!

只需将传入的地址列表分割为“;” 字符,并将其添加到邮件消息中:

 foreach (var address in addresses.Split(new [] {";"}, StringSplitOptions.RemoveEmptyEntries)) { mailMessage.To.Add(address); } 

在这个例子中, addresses包含“ address1@example.com;address2@example.com ”。

正如Adam Miller在评论中所build议的那样,我会添加另一个解决scheme。

MailMessage(String from,String to)构造函数接受逗号分隔的地址列表。 所以如果你碰巧已经有一个逗号(',')分隔的列表,那么用法就像下面这样简单:

 MailMessage Msg = new MailMessage(fromMail, addresses); 

在这个特定的情况下,我们可以取代';' 为','仍然使用构造函数。

 MailMessage Msg = new MailMessage(fromMail, addresses.replace(";", ",")); 

无论你喜欢这个还是接受的答案,都取决于你。 可以说,循环使意图更清楚,但是这个更短而且不难理解。 但是,如果你已经有一个逗号分隔列表,我认为这是要走的路。

我已经testing了这个使用下面的PowerShell脚本和地址之间使用(,)。 它为我工作!

 $EmailFrom = "<from@any.com>"; $EmailPassword = "<password>"; $EmailTo = "<to1@any.com>,<to2@any.com>"; $SMTPServer = "<smtp.server.com>"; $SMTPPort = <port>; $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer,$SMTPPort); $SMTPClient.EnableSsl = $true; $SMTPClient.Credentials = New-Object System.Net.NetworkCredential($EmailFrom, $EmailPassword); $Subject = "Notification from XYZ"; $Body = "this is a notification from XYZ Notifications.."; $SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body);