簡體   English   中英

如何從ASP.NET MVC中的SQL Server數據庫向多個收件人發送電子郵件?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM