58 votes

Comment envoyer un e-mail à plusieurs adresses en utilisant System.Net.Mail

J'ai la fonctionnalité d'e-mail smtp. cela fonctionne pour une seule adresse mais il y a un problème avec plusieurs adresses.

Je passe plusieurs adresses en utilisant la ligne de code suivante.

MailAddress to = new MailAddress("abc@gmail.com,xyz@gmail.com");

Veuillez me faire savoir le problème car je ne reçois aucune erreur.

93voto

Marco Points 29879
MailMessage msg = new MailMessage();
msg.Body = ....;
msg.To.Add(...);
msg.To.Add(...);

SmtpClient smtp = new SmtpClient();
smtp.Send(msg);

To est une MailAddressCollection, vous pouvez donc ajouter autant d'adresses que vous avez besoin.

Si vous avez besoin d'un nom d'affichage, essayez ceci:

MailAddress to = new MailAddress(
    String.Format("{0} <{1}>",display_name, address));

0 votes

@Denish: utilise la propriété msg.From ... quel est le problème avec ça? ;)

0 votes

En fait, j'ai une liste de destinataires séparés par des virgules avec moi. Donc une autre réponse à cette question est appropriée mais je ne trouve pas de moyen d'attribuer un nom d'affichage à l'adresse "from".

7 votes

Vous n'avez pas besoin d'ajouter chaque destinataire séparément. msg.To.Add("abc@gmail.com,xyz@gmail.com"); fonctionne bien.

24voto

Hari Gillala Points 2548

Essayez ceci..

using System;
using System.Net.Mail;

public class Test
{
    public static void Main()
    {
        SmtpClient client = new SmtpClient("smtphost", 25);
        MailMessage msg = new MailMessage("x@y.com", "a@b.com,c@d.com");
        msg.Subject = "sdfdsf";
        msg.Body = "sdfsdfdsfd";
        client.UseDefaultCredentials = true;
        client.Send(msg);
    }
}

15voto

Liuke YZF Points 151

Je pense que vous pouvez utiliser ce code pour avoir une liste d'adresses sortantes avec un nom d'affichage (également différent) :

//1.Le COMPTE
MailAddress fromAddress = new MailAddress("moncompte@moncompte.com", "mon nom d'affichage");
String fromPassword = "motdepasse";

//2.Les adresses email de destination
MailAddressCollection TO_addressList = new MailAddressCollection();

//3.Préparer la liste des adresses email de destination
foreach (var curr_address in mailto.Split(new [] {";"}, StringSplitOptions.RemoveEmptyEntries))
{
    MailAddress mytoAddress = new MailAddress(curr_address, "Nom d'affichage personnalisé");
    TO_addressList.Add(mytoAddress);
}

//4.Le corps du message Email
String body = bodymsg;

//5.Préparer GMAIL SMTP : avec SSL sur le port 587
var smtp = new SmtpClient
{
    Host = "smtp.gmail.com",
    Port = 587,
    EnableSsl = true,
    DeliveryMethod = SmtpDeliveryMethod.Network,
    Credentials = new NetworkCredential(fromAddress.Address, fromPassword),
    Timeout = 30000
};

//6.Compléter le message et ENVOYER l'email :
using (var message = new MailMessage()
        {
            From = fromAddress,
            Subject = sujet,
            Body = body,
        })
{
    message.To.Add(TO_addressList.ToString());
    smtp.Send(message);
}

10voto

David Aleu Points 2360

La suggestion de StewieFG est valable, mais si vous souhaitez ajouter le nom du destinataire, utilisez ceci, en ajoutant ce que Marco a posté ci-dessus mais avec l'adresse e-mail en premier et le nom d'affichage en second :

msg.To.Add(new MailAddress("votre@email1.com", "Votre nom 1"));
msg.To.Add(new MailAddress("votre@email2.com", "Votre nom 2"));

3voto

daniele3004 Points 62

Mon code pour résoudre ce problème:

private void sendMail()
{   
    //Cette liste peut être un paramètre de la méthode
    List lst = new List();

    lst.Add(new MailAddress("mouse@xxxx.com"));
    lst.Add(new MailAddress("duck@xxxx.com"));
    lst.Add(new MailAddress("goose@xxxx.com"));
    lst.Add(new MailAddress("wolf@xxxx.com"));

    try
    {

        MailMessage objeto_mail = new MailMessage();
        SmtpClient client = new SmtpClient();
        client.Port = 25;
        client.Host = "10.15.130.28"; //ou nom du SMTP
        client.Timeout = 10000;
        client.DeliveryMethod = SmtpDeliveryMethod.Network;
        client.UseDefaultCredentials = false;
        client.Credentials = new System.Net.NetworkCredential("from@email.com", "password");
        objeto_mail.From = new MailAddress("from@email.com");

        //ajouter chaque adresse e-mail
        foreach (MailAddress m in lst)
        {
            objeto_mail.To.Add(m);
        }

        objeto_mail.Subject = "Envoi de test de mail";
        objeto_mail.Body = "Test fonctionnel pour mail automatique :-)";
        client.Send(objeto_mail);

    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

0 votes

S'assurer de disposer de l'objet o_mail après l'envoi. Ou utiliser un bloc Using.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X