【发布时间】:2019-03-01 08:47:40
【问题描述】:
我想在 ASP.NET MVC 中向多个收件人发送电子邮件,我觉得这很有挑战性。我的代码只发送到列表中的第一个电子邮件地址,但我想一次发送给大约 400 个收件人。这些收件人的地址存储在 SQL Server 数据库中。这是我的代码
[HttpPost]
[ValidateInput(false)]
public ActionResult SendBulkEmail(EmailAddress ea, HttpPostedFileBase postedFile)
{
string senderEmail = System.Configuration.ConfigurationManager.AppSettings["senderEmail"].ToString();
string senderPassword = System.Configuration.ConfigurationManager.AppSettings["senderPassword"].ToString();
if (ModelState.IsValid)
{
SqlDataReader reader;
using (SqlConnection cs = new SqlConnection(conn))
{
cs.Open();
SqlCommand cmd = new SqlCommand("SELECT email_address FROM Newsletter", cs);
ArrayList emailArray = new ArrayList();
reader = cmd.ExecuteReader();
myFunctions m = new myFunctions();
var emailList = m.LoadEmails();
var emails = new List<AllEmailAddresses>();
while (reader.Read())
{
emails.Add(new AllEmailAddresses
{
EmailAddress = Convert.ToString(reader["email_address"])
});
}
foreach (AllEmailAddresses email in emailList)
{
try
{
SmtpClient client = new SmtpClient("mail.chijiokechinedu.com", 25);
client.Timeout = 100000;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.Credentials = new NetworkCredential(senderEmail, senderPassword);
//MailMessage mailMessage = new MailMessage(senderEmail, email.EmailAddress, ea.EmailSubjest, ea.EmailBody);
MailMessage mailMessage = new MailMessage();
mailMessage.From = new MailAddress(senderEmail);
mailMessage.To.Add(new MailAddress(email.EmailAddress));
mailMessage.Subject = ea.EmailSubjest;
mailMessage.Body = ea.EmailBody;
mailMessage.IsBodyHtml = true;
mailMessage.BodyEncoding = UTF8Encoding.UTF8;
if (postedFile != null)
{
string fileName = Path.GetFileName(postedFile.FileName);
mailMessage.Attachments.Add(new Attachment(postedFile.InputStream, fileName));
}
client.Send(mailMessage);
return RedirectToAction("EmailSentSuccessfully", "Home");
}
catch (Exception)
{
throw;
}
}
}
}
else
{
ModelState.AddModelError("", "email failed to send!");
}
return View(ea);
}
【问题讨论】:
-
应该很简单。你在错误的地方循环。您需要循环这个:
mailMessage.To.Add(new MailAddress(email.EmailAddress));,而不是循环实际发送电子邮件。您要添加多个收件人,而不是发送多封电子邮件。并删除该尝试/捕获。如果您只是要重新抛出异常,那么捕获异常是没有意义的。而AllEmailAddresses对于只包含一个电子邮件地址的对象来说是一个糟糕的名称。 -
为了避免超时和其他问题,我强烈建议您从数据库中提取所需的所有数据,关闭数据库连接,然后发送电子邮件
-
谢谢大家。它现在工作,我真的很感激。
标签: c# asp.net-mvc smtpclient