Asp.net Mvc,如何将电子邮件值存储到数组中并将电子邮件发送到数组中保留的那些电子邮件

Asp.net Mvc, How to store email values into array and send email to those emails reserved in array

我想 return 所有管理员的电子邮件地址,然后向他们发送电子邮件。现在我只能发送到一个电子邮件地址,而且我必须对其进行硬编码(我的意思是我必须对其进行硬编码)。但是我想根据我的电子邮件数组发送到多个电子邮件

// Here is my first problem, to save them in array
        public string UserEmails()
        {

            var emails =  context.Users.Where(u => u.IsAdmin == true).Select(e => e.Email).ToArray();
            // First question,  How to save those emails into an array and return those email array then to use it in my SendEmailToUser(); 

        }

这是我的 SendEmailToUser()

public JsonResult SendEmailToUser()
        {
            bool result = false;
            // My second question, Here I want to put those email array, But I don't know how to do
            // If I hardcoded with one email .. let say test@gmail.com, works fine
            // But instead to send to one email address , I want to send to thos emails which are in my array
            result = SendEmail("emails from array", "Here is my subject", "<p>Here is my message</p>");

            return Json(result, JsonRequestBehavior.AllowGet);
        }

这是我的 SendEmail(使用一个硬编码的电子邮件地址就可以正常工作)

public bool SendEmail(string toEmail, string subject, string emailBody)
        {
            try
            {
                string senderEmail = System.Configuration.ConfigurationManager.AppSettings["SenderEmail"].ToString();
                string senderPassword = System.Configuration.ConfigurationManager.AppSettings["SenderPassword"].ToString();

                SmtpClient client = new SmtpClient("smtp.gmail.com", 587);
                client.EnableSsl = true;
                client.Timeout = 100000;
                client.DeliveryMethod = SmtpDeliveryMethod.Network;
                client.UseDefaultCredentials = false;
                client.Credentials = new NetworkCredential(senderEmail, senderPassword);

                MailMessage mailMessage = new MailMessage(senderEmail, toEmail, subject, emailBody);
                mailMessage.IsBodyHtml = true;
                mailMessage.BodyEncoding = UTF8Encoding.UTF8;
                client.Send(mailMessage);


                return true;
            }
            catch(Exception ex)
            {
                return false;
            }

        }

您可以遍历数组并为每封电子邮件调用该方法。

使用foreach方法

var emails =  context.Users
                     .Where(u => u.IsAdmin)
                     .Select(e => e.Email).ToArray();

foreach(var email in emails)
{
   SendEmail(email , "subject","email body");
}

假设 Email 属性 是存储电子邮件地址的字符串类型。

如果你想使用 return 这个电子邮件数组的方法,只需将方法的 return 类型更改为字符串数组即可。

public string[] UserEmails()
{
    return context.Users
                  .Where(u => u.IsAdmin == true)
                  .Select(e => e.Email)
                  .ToArray();           
}

而在你的另一个方法中,你调用了这个方法。

var emails =  UserEmails();

foreach(var email in emails)
{
   SendEmail(email , "subject","email body");
}

请记住,这会多次调用 SendEmail 方法,对电子邮件数组中的每个项目调用一次。 MailMessage.To method 将允许您将一封电子邮件发送给多个人("To" 地址中的许多人),如果这是您所追求的。