Не удалось отправить электронное письмо нескольким адресам/получателям с помощью С#
Я использую приведенный ниже код, и он отправляет только одно письмо - мне нужно отправить электронное письмо на несколько адресов.
Для получения более одного письма я использую:
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();
}
}
и для отправки письма, которое я использую:
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
Проблема заключается в том, что вы отправляете список адресов, разделенных полуколонами, в конструктор MailMessage
, когда он принимает только строку, представляющую один адрес:
Строка, содержащая адрес получателя сообщения электронной почты.
или, возможно, список, разделенный запятыми (см. ниже).
Источник
Чтобы указать несколько адресов, вам необходимо использовать свойство To
, которое является MailAddressCollection
, хотя примеры на этих страницах не показывают его очень четко:
message.To.Add("[email protected], [email protected]"));
Адреса электронной почты для добавления в MailAddressCollection. Несколько адресов электронной почты должны быть разделены запятой ( "," ).
Страница MSDN
поэтому создание MailMessage
с разделенным запятой списком должно работать.
Ответ 2
Это то, что сработало для меня.
(получатели представляют собой массив строк)
//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;
}
Ответ 3
Эта функция проверяет список адресов электронной почты, разделенный запятой или точкой с запятой:
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;
}
}
Ответ 4
Чтобы отправить нескольким получателям, я создал свою строку получателя с запятой в качестве разделителя.
string recipient = "[email protected],[email protected],[email protected]";
Затем, чтобы добавить получателей к объекту MailMessage
:
string[] emailTo = recipient.Split(',');
for (int i = 0; i < emailTo.GetLength(0); i++)
mailMessageObject.To.Add(emailTo[i]);
Ответ 5
Этот код, который я использую для отправки нескольких писем для, bcc и 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));
Ответ 6
Вам также разрешено передавать MailMessage.To.Add()
a список адресов с правильными адресами RFC 822:
Nathaniel Borenstein <[email protected]>, Ned Freed <[email protected]>
Таким образом, код будет выглядеть следующим образом:
message.To.Add("Nathaniel Borenstein <[email protected]>, Ned Freed <[email protected]>");
Примечание. Любой код, выпущенный в общественное достояние. Не требуется атрибуция.