我们正在尝试一次将多个电子邮件发送到可以检查或未选中电子邮件的公司列表中。如果检查了电子邮件,则需要发送给他们。我已经设法将其发送到每个电子邮件地址的电子邮件中,但我们希望一次是一个。即,我们希望将一封电子邮件发送给Contact1,Contact2,Contact3全部,我们希望将一封电子邮件发送到Contact1,循环循环,然后第二次发送相同的电子邮件到Contact2等。
尝试了一个foreach循环,但它只是将电子邮件发送给每个收件人,而不是一次发送给一个收件人,而仅在"到"字段中显示他们的电子邮件。
发送电子邮件的代码如下:
var smtp = new SmtpClient
{
Host = "",
Port = 25,
EnableSsl = false,
DeliveryMethod = SmtpDeliveryMethod.Network,
UseDefaultCredentials = true,
};
//Set message details, ensuring HTML is displayed when sent
using (var message = new MailMessage(fromAddress, toAddress)
{
Subject = subject,
Body = body,
IsBodyHtml = true,
BodyEncoding = System.Text.Encoding.UTF8
})
//Try send the email to the users
try
{
smtp.Send(message); //Send the message to selected users
Response.Redirect("~/BulkEmail/Index"); //Redirect back to the Index page if send is successful.
}
catch
{
Response.Redirect("~/Home/Failure");
}
这可以正常工作,但是由于它将去看外部电子邮件,因此我们希望它们一次收到一封。收集电子邮件和"检查"的视图如下:
@{
string Email;
Email = User.Identity.Name.Split('\')[1] + "@email.email";
}
@{
int count = 1;
}
@using (Html.BeginForm("SendEmail", "BulkEmail", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.AntiForgeryToken()
<label>To:</label> @User.Identity.Name.Split('\')[1]<br />
<label>From:</label> <input type="text" name="txtFrom" value="@Email" /><br />
<table border="1" width="100%">
<label>BCC:</label>@foreach (var item in Model)
{
<tr width="100%">
<td>
@count
</td>
<td wdith="25">
@Html.DisplayFor(modelItem => item.FirstName) @Html.DisplayFor(modelItem => item.LastName)
</td>
<td wdith="25">
@Html.DisplayFor(modelItem => item.tblContact.Company)
</td>
<td wdith="25">
@Html.DisplayFor(modelItem => item.Email)
</td>
<td wdith="25" align="center">
<input type="checkbox" name="chkBox" value="@item.Email" checked="checked"/>
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id = item.MailRecipientId }) |
@Html.ActionLink("Details", "Details", new { id = item.MailRecipientId }) |
@Html.ActionLink("Delete", "Delete", new { id = item.MailRecipientId })
</td>
</tr>
count += 1;
}
</table><br />
<label>Subject:</label> <input type="text" name="txtSubject" value="Quotations Needed"/>
<textarea name="message"></textarea><br />
<input type="submit" value="BOOM THE EMAILS!" />
}
@Html.Action("TinyMCE", "Include")
任何帮助将不胜感激。我觉得它应该是一个foreach循环,但是我不确定在此特定情况下如何正确实施它。
谢谢
请求的代码:
var fromName = @User.Identity.Name.Split('\')[1];
var fromAddress = Request.Form["txtFrom"];
var toAddress = Request.Form["chkBox"];
var subject = Request.Form["txtSubject"];
var q = Request.Unvalidated.Form;
var messageBody = q["message"];
控制器更新
public ActionResult SendEmail()
{
//Create variables for where the message is going internally, setting the subject and body whilst allowing an unvalidated HTML tinyMCE box to be posted.
var fromName = @User.Identity.Name.Split('\')[1];
var fromAddress = Request.Form["txtFrom"];
var toAddress = Request.Form["chkBox[]"];
var subject = Request.Form["txtSubject"];
var q = Request.Unvalidated.Form;
var messageBody = q["message"];
String body = messageBody;
MailMessage mail_client = new MailMessage();
int index = 0;
foreach (var email in toAddress)
{
mail_client.To.Add(chkBox[index]);
index++;
}
mail_client.From = new MailAddress(fromAddress);
mail_client.Subject = subject;
mail_client.IsBodyHtml = true;
mail_client.Body = body;
{
//Create new SMTP client and give server details
var smtp = new SmtpClient
{
Host = "",
Port = 25,
EnableSsl = false,
DeliveryMethod = SmtpDeliveryMethod.Network,
UseDefaultCredentials = true,
};
//Set message details, ensuring HTML can be displayed when sent
using (var message = new MailMessage(fromAddress, toAddress)
{
Subject = subject,
Body = body,
IsBodyHtml = true,
BodyEncoding = System.Text.Encoding.UTF8
})
//Try send the email to the users
try
{
smtp.Send(message); //Send the message to selected users
Response.Redirect("~/BulkEmail/Index"); //Redirect back to the Index page if send is successful.
}
//If the email doesn't send, allow the page to redirect rather than giving a vile error!
catch
{
Response.Redirect("~/Home/Failure");
}
}
return View();
}
将chkbox的名称更改为" chkbox []"因此,在控制器中,您将获得一个参数(字符串[] Chkbox),该参数仅包含检查。
然后创建邮件对象
MailMessage mail_client = new MailMessage();
int index = 0
foreach (string email in chkbox)
{
mail_client.To.Add(chkbox[index]);
index++;
}
mail_client.From = new MailAddress("");
mail_client.Subject = subject;
mail_client.IsBodyHtml = true;
mail_client.Body = body;
smtp.Host = "";
smtp.Port = ;
smtp.UseDefaultCredentials = true;
smtp.Send(mail_client);
然后,您可以使用相同的方式发送邮件
添加要发送到数组的所有电子邮件地址,例如:
//Email Address
List<string> recipients= new List<string>();
recipients.Add("Email1");
recipients.Add("Email2");
recipients.Add("Email3");
recipients.Add("Email4");
recipients.Add("Email5");
然后为这样的循环做一个:
for (int i = 0; i < recipients.Count; i++)
{
System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage();
message.IsBodyHtml = true;
message.To.Add(recipients[i]);
message.Subject = subject;
message.From = from;
message.Body = body;
System.Net.Mail.SmtpClient smtp = smtpClient;
smtp.Send(message);
}