Unable to send an email to multiple addresses/recipients using C#
I am using the below code, and it only sends one email - I have to send the email to multiple addresses.
For getting more than one email I use:
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();
}
}
and for sending the email I use:
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);
The problem is that you are supplying a list of addresses separated by semi-colons to the MailMessage
constructor when it only takes a string representing a single address:
A String that contains the address of the recipient of the e-mail message.
or possibly a list separated by commas (see below).
Source
To specify multiple addresses you need to use the To
property which is a MailAddressCollection
, though the examples on these pages don't show it very clearly:
message.To.Add("[email protected], [email protected]"));
The e-mail addresses to add to the MailAddressCollection. Multiple e-mail addresses must be separated with a comma character (",").
MSDN page
so creating the MailMessage
with a comma separated list should work.
This is what worked for me. (recipients is an Array of Strings)
//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;
}
This function validates a comma- or semicolon-separated list of email addresses:
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;
}
}