2010-07-09 12 views
20

Sto utilizzando il codice seguente e invia solo una e-mail: devo inviare l'e-mail a più indirizzi.Impossibile inviare un'e-mail a più indirizzi/destinatari utilizzando C#

Per ottenere più di una e-mail che uso:

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

e per l'invio della mail che uso:

string sendto = Session["ad_emails"].ToString(); 

MailMessage message = new MailMessage("[email protected]", 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); 
+1

Qual è la domanda? –

+0

Si prega di controllare il codice postato qui. Quando l'ho riformattato ho trovato un set extra di '{}'. Non penso che sia stato intenzionale, quindi li ho rimossi. Basta fare clic sul link modifica sopra se vuoi rimetterli. –

+0

Mettere un, per separare e-mail diverse e creare un oggetto MailAddress non funzionerà! Verifica questa soluzione: http://stackoverflow.com/questions/7498968/how-to-send-email-to-multiple-address-using-system-net-mail – dtakis

risposta

59

Il problema è che si sta fornendo un elenco di indirizzi separati da semi due punti al costruttore MailMessage quando prende solo una stringa che rappresenta un singolo indirizzo:

Una stringa che contiene l'indirizzo del destinatario del messaggio e-mail.

o eventualmente un elenco separato da virgole (vedere di seguito).

Source

Per specificare più indirizzi è necessario utilizzare la proprietà To che è un MailAddressCollection, anche se gli esempi di queste pagine non mostrano molto chiaramente:

message.To.Add("[email protected], [email protected]")); 

L'e -mail indirizzi da aggiungere a MailAddressCollection. Più indirizzi e-mail devono essere separati da un carattere virgola (",").

MSDN page

creando così la MailMessage con una lista virgola separati dovrebbe funzionare.

+4

sì, gli indirizzi separati da virgola funzionano – Andrew

+1

Hai un pieno esempio da questa funzionalità? –

8

Questo è ciò che ha funzionato per me. (destinatari è un array di stringhe)

//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; 
} 
6

Questa funzione convalida un elenco delimitato da virgole o punti e virgola di indirizzi email separati:

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; 
    } 
} 
+0

Questo dovrebbe essere .Where (a =>! String.IsNullOrEmpty (a)). ToArray(); invece –

+1

Grazie per la presa. Ho aggiornato il codice, anche se uso la funzione .NET 4.0 'IsNullOrWhiteSpace' – Matt

4

Per inviare a più destinatari ho creato la mia stringa destinatario con una virgola come separatore.

string recipient = "[email protected],[email protected],[email protected]"; 

Poi per aggiungere i destinatari all'oggetto MailMessage:

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

Questo codice che uso per inviare la posta multiplo per a, bcc e 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)); 
Problemi correlati