web-dev-qa-db-fra.com

Comment envoyer un courrier électronique à plusieurs destinataires avec MailMessage?

J'ai plusieurs destinataires d'e-mail stockés dans Sql Server. Lorsque je clique sur envoyer dans la page Web, il devrait envoyer un courrier électronique à tous les destinataires.

Voici le code de destinataire unique.

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();
70
Chetan Goenka

Facile!

Il suffit de scinder la liste d'adresses entrantes sur le ";" caractère, et les ajouter au message mail:

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

Dans cet exemple, addresses contient "[email protected];[email protected]".

142
Brendan Green

Comme suggéré par Adam Miller dans les commentaires, je vais ajouter une autre solution.

Le constructeur MailMessage (String from, String to) accepte une liste d'adresses séparées par des virgules. Donc, si vous avez déjà une liste séparée par des virgules (','), son utilisation est aussi simple que

MailMessage Msg = new MailMessage(fromMail, addresses);

Dans ce cas particulier, nous pouvons remplacer le ';' pour ',' et toujours utiliser le constructeur.

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

Que vous préfériez ceci ou la réponse acceptée, c'est à vous de décider. On peut soutenir que la boucle rend l'intention plus claire, mais celle-ci est plus courte et non obscure. Mais si vous avez déjà une liste séparée par des virgules, je pense que c'est la voie à suivre.

64
Areks

J'ai testé cela en utilisant le script PowerShell suivant et en utilisant (,) entre les adresses. Cela a fonctionné pour moi!

$EmailFrom = "<[email protected]>";
$EmailPassword = "<password>";
$EmailTo = "<[email protected]>,<[email protected]>";
$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);
0
Heitor Marcos