[英]How can I send email to multiple recipients from SQL Server database in ASP.NET MVC?
我想將電子郵件發送給多個收件人。 我從SQL Server數據庫中檢索多個用戶的電子郵件地址,如下所示:
var students = (from u in db.Users
where u.projectGroup == id
select u.userEmail).ToArray();
這將返回多個電子郵件地址,例如: user1@gmail.com user2@gmail.com
,我嘗試發送給這樣的多個用戶
for (int h = 0; h < students.Length; h++)
{
try
{
var body = "<p>Email From: {0} ({1})</p><p>Message:</p><p>{2}</p>";
var smtpClient = new SmtpClient();
var message = new MailMessage();
message.To.Add(new MailAddress(students[h]));
message.Subject = "I'm interested in your project";
message.Body = string.Format(body, model.FromName, model.FromEmail, model.Message);
message.IsBodyHtml = true;
using (var smtp = new SmtpClient())
{
await smtp.SendMailAsync(message);
return RedirectToAction("Sent");
}
}
catch (Exception ex)
{
//MessageBox("Your Email address is not valid");
//ScriptManager.RegisterStartupScript(this, this.GetType(), "popup", "alert('Your Email address is not valid');", true);
}
}
但這不起作用,它會向第一位用戶發送電子郵件,但另一位用戶未收到該電子郵件。
如何將每封電子郵件拆分為一行以將電子郵件發送給多個收件人?
一切似乎都很好。 但是,您的redirectToAction
正在為第一封電子郵件執行並退出循環。之后,該控件不知道如何繼續第二封記錄。 這就是為什么您的電子郵件不會發送到第二封電子郵件的原因。 嘗試下面的代碼,你應該很好。
for (var index= 0; index< students.Length; index++)
{
try
{
var body = "<p>Email From: {0} ({1})</p><p>Message:</p><p>{2}</p>";
var smtpClient = new SmtpClient();
var message = new MailMessage();
message.To.Add(new MailAddress(students[index]));
message.Subject = "I'm interested in your project";
message.Body = string.Format(body, model.FromName, model.FromEmail, model.Message);
message.IsBodyHtml = true;
using (var smtp = new SmtpClient())
{
await smtp.SendMailAsync(message);
}
}
catch (Exception ex)
{
//MessageBox("Your Email address is not valid");
//ScriptManager.RegisterStartupScript(this, this.GetType(), "popup", "alert('Your Email address is not valid');", true);
}
}
return RedirectToAction("Sent");
return RedirectToAction("Sent");
是罪魁禍首。
這將在第一封電子郵件后停止您的代碼。 在所有方法都發送完畢之前,請不要從方法中返回:
using (var smtp = new SmtpClient())
{
for (int h = 0; h < students.Length; h++)
{
var body = "<p>Email From: {0} ({1})</p><p>Message:</p><p>{2}</p>";
var message = new MailMessage();
message.To.Add(new MailAddress(students[h]));
message.Subject = "I'm interested in your project";
message.Body = string.Format(body, model.FromName, model.FromEmail, model.Message);
message.IsBodyHtml = true;
smtp.Send(message);
}
}
return RedirectToAction("Sent");
注意:我還刪除了多余的try / catch(如果您不打算記錄異常,則不要使用它(盡管您無論如何都要全局記錄),抑制意外錯誤是一種反模式),並減少了次數您不必實例化全新的SmtpClient-每次都使用相同的SmtpClient是可以的。 另外,如果您要await
異步電子郵件呼叫,則沒有用處-只需使用常規的發送即可。
您是從循環內部返回SENT,因此它執行第一個項目然后退出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.