C# 是否使用MailMessage向多个收件人发送电子邮件?

C# 是否使用MailMessage向多个收件人发送电子邮件?,c#,mailmessage,C#,Mailmessage,我在SQL Server中存储了多个电子邮件收件人。当我单击网页中的“发送”时,它会向所有收件人发送电子邮件。我使用分隔电子邮件 以下是单一收件人代码 MailMessage Msg = new MailMessage(); MailAddress fromMail = new MailAddress(fromEmail); Msg.From = fromMail; Msg.To.Add(new MailAddress(toEmail)); if (ccEmail != ""

我在SQL Server中存储了多个电子邮件收件人。当我单击网页中的“发送”时,它会向所有收件人发送电子邮件。我使用
分隔电子邮件

以下是单一收件人代码

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);    
}

在本例中,
地址
包含“
address1@example.com;address2@example.com

正如Adam Miller在评论中建议的那样,我将添加另一个解决方案

MailMessage(stringfrom,stringto)构造函数接受以逗号分隔的地址列表。因此,如果您碰巧已经有一个逗号(“,”)分隔的列表,那么使用方法很简单:

MailMessage Msg = new MailMessage(fromMail, addresses);
在这种特殊情况下,我们可以替换“;”对于“”,仍然使用构造函数

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

不管你喜欢这个答案还是公认的答案,这取决于你自己。可以说,这个循环使意图更加清晰,但它更短,也不模糊。但是,如果您已经有了逗号分隔的列表,我认为这是一种方法。

我已经使用以下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);
$EmailFrom=”“;
$EmailPassword=“”;
$EmailTo=“,”;
$SMTPServer=“”;
$SMTPPort=;
$SMTPClient=新对象Net.Mail.SMTPClient($SmtpServer,$SMTPPort);
$SMTPClient.EnableSsl=$true;
$SMTPClient.Credentials=新对象系统.Net.NetworkCredential($EmailFrom,$EmailPassword);
$Subject=“来自XYZ的通知”;
$Body=“这是来自XYZ通知..”的通知;
$SMTPClient.Send($EmailFrom、$EmailTo、$Subject、$Body);

根据文档:

MailMessage.To属性-返回包含此电子邮件收件人列表的MailAddressCollection

这里,MailAddressCollection有一个名为

   public void Add(string addresses)

   1. Summary:
          Add a list of email addresses to the collection.

   2. Parameters:
          addresses: 
                *The email addresses to add to the System.Net.Mail.MailAddressCollection. Multiple
                *email addresses must be separated with a comma character (",").     
因此,如果有多个收件人,则要求: 传递包含以逗号分隔的电子邮件地址的字符串

就你而言:

简单地更换所有的设备;有,

Msg.To.Add(toEmail.replace(";", ","));
供参考:



  • 到目前为止你试过什么?您有为单个收件人工作的功能吗?@BrendanGreen是的,我有为单个收件人工作的功能。另外,仅供参考,您的
    MailMessage
    SmtpClient
    实例需要位于
    using
    块中。@johnsaunds他们应该知道,但肯定不需要。@JohnSaunders首先,你的措辞非常误导人:你可能会就此争论,但“需要在
    中使用
    块”并不等于“需要处理”。其次,在生产代码(如web应用程序)中,您通常希望使用
    sendsync
    ,它可以按预期工作,无需处理
    SnmpClient
    实例。我迟到了,但MailMessage(string-from,string-to)构造函数接受逗号分隔的地址列表。所以,你可以做一些像newmailmessage(fromMail,addresses.replace(“;”,“,”))这样的事情,也许使用replace并不更好,但我觉得我应该对此进行注释,以防其他人已经使用逗号分隔的字符串!那么就不需要拆分或替换了。@Areks,如果你能把一行类似于Brendan的示例代码放在一起,你一定要加上它作为答案。@Areks谢谢你的评论,在阅读你的评论之前,我已经准备好拆分地址了。这正是我想要的!这有必要吗?您是否只是将已格式化为多个地址的字符串拆分,然后重新分配它们?如果您向()发送一个字符串(如“a1;a2;a3”)所述,那么为什么需要拆分它们,然后分别赋值?因为它排除了AddressCollection或Deminator字符串中的多个地址。因为它导致了我管理的应用程序出现问题,所以在运行replace命令之前,您应该检查尾随字符是否为分号,并将其删除。我不确定尾随分号是否被视为有效的收件人列表,但人们可能习惯于在Outlook等应用程序中看到尾随分号。在传递给MailMessage的逗号分隔列表中不能有尾随逗号。据我所知,如果后面没有逗号/分号,则不应该有尾随逗号/分号。。。但这绝对是一个好的评论,所以读这篇文章的人都知道这一点。非常感谢。这有文件记录吗?构造函数文档仅将
    to
    参数描述为“包含电子邮件收件人地址的字符串”。我想使用它,但如果它的支持可能会被删除,我就不想使用它。遗憾的是,该格式似乎没有文档记录,但构造函数确实声明它可以用于多个收件人:一个包含电子邮件收件人地址的字符串。“地址”和“收件人”都是复数形式。这肯定是一个特性,但文档要么稀疏,要么不存在。我必须通过大约5个方法调用才能得到第一个提示,这是真的。这是一个标记为
    C#
    的问题,最终与同一个库中的PowerShell无关。在没有vs的机器上使用powershell进行测试更容易。在powershell脚本运行后,只需将其“翻译”为c等价物。这个问题甚至没有标记为
    .NET Framework
    ,而只标记为
    c
    。如果每个人都做了同样的事情,我们也会有VB.NET,F,甚至C++的答案来回答所有与<代码> .NETFramework < /C> >有关的问题。毕竟是同一个框架,只是翻译的问题。。。你明白我的意思了吗?StackOverflow将成为真正的垃圾信息源