I want to send bulk Emails by using MailKit.Net.Smtp, using MimeKit.
I get email lists and email body data like (feeamount and feetype), these two fields send to the same row email address.
Code to get list and data:
public IActionResult FeeNotification(int? id)
{
var ids = _context.FeeEntry
.Where(i => i.FeeInfoID.Equals(id))
.Select(x => x.StudentID).ToList();
var q = (from t in _context.FeeEntry
.Include(f => f.AddFeeInfo)
.Include(f => f.students)
join std in _context.Students
.Select(p => new StudentRegModel() { StudentID = p.StudentID }) on t.StudentID equals std.StudentID
join fi in _context.FeeInfo.Select(p => new AddFeeInfo() { FeeInfoID = p.FeeInfoID }) on t.FeeInfoID equals fi.FeeInfoID
where ids.Contains(std.StudentID)
select t).ToList();
return View(q);
}
I want to pass list of emailaddress to the
message.To.Add(new MailboxAddress(list of emailes)
Send email code is this code send only one email, I want to send full list email that show above in in my code.
I know that foreach loop will work here but I do not know the proper way to use it.
using (var client = new SmtpClient())
{
var myvalues = (from values in _context.FeeInfo
where values.FeeInfoID == feeEntry.FeeInfoID
select values.FeeAmount).FirstOrDefault();
client.Connect("smtp.gmail.com", 465);
client.Authenticate("emailaddress", "password");
var bodyBuilder = new BodyBuilder
{
HtmlBody = $"<table style = 'border:2px solid blue' border='1'> <thead> </thead> <tr>"
$"<th> </th><th>Name</th> <th>Submit Date </th> <th>Fee Amount</th> </tr> "
$"<tbody> <tr> <th>1</th> <td>{std.Student.StdName}</td> <td> {feeEntry.FeeDeppositDate}</td> <td>{ViewData["FeeInfoID"]} </td><tr> </tbody> </table> ",
TextBody = "{formData.ID}\r\n{ formData.subject}\r\n{formData.body}\r\n{formData.Email}"
};
var message = new MimeMessage
{
Body = bodyBuilder.ToMessageBody()
};
message.From.Add(new MailboxAddress("No Reply OCMWP", "[email protected]"));
message.To.Add(new MailboxAddress(std.Student.StdName, std.Student.StdEmailAddress));
message.Subject = "Fee Submitted Information (OCMWP)";
client.Send(message);
client.Disconnect(true);
}
CodePudding user response:
Internally, To
is a list, so if you have a list of students from your database you can do something like this to add them all to the same email:
foreach (Student student in students)
{
message.To.Add(new MailboxAddress(student.Name, student.EmailAddress));
}
CodePudding user response:
work like this
send bulk mails aspx.net core mvc form database using entityframwork
var q = (from t in _context.FeeEntry.Include(f => f.AddFeeInfo)
.Include(f => f.students)
join std in _context.Students.Select(p=> new StudentRegModel() { StudentID = p.StudentID }) on t.StudentID equals std.StudentID
join fi in _context.FeeInfo.Select(p => new AddFeeInfo() { FeeInfoID = p.FeeInfoID }) on t.FeeInfoID equals fi.FeeInfoID
where ids.Contains(std.StudentID)
select t).ToList();
using (var client = new SmtpClient())
{
foreach (FeeEntry student in q)
{
client.Connect("smtp.gmail.com", 465);
client.Authenticate("your email address", "password");
var bodyBuilder = new BodyBuilder
{
HtmlBody = $"<table style = 'border:2px solid blue' border='1'> <thead> </thead> <tr>"
$"<th> </th><th>Name</th> <th>Submit Date </th> <th>Fee Amount</th> </tr> "
$"<tbody> <tr> <th>1</th> <td>{student.students.StdName}</td> <td> {student.AddFeeInfo.FeeAmount}</td> <td>{ViewData["FeeInfoID"]} </td><tr> </tbody> </table> ",
TextBody = "{formData.ID}\r\n{ formData.subject}\r\n{formData.body}\r\n{formData.Email}"
};
var message = new MimeMessage
{
Body = bodyBuilder.ToMessageBody()
};
message.From.Add(new MailboxAddress("No Reply OCMWP", "mail address"));
message.To.Add(new MailboxAddress(student.students.StdName, student.students.StdEmailAddress));
message.Subject = "Fee Submited Information ( OCMWP)";
client.Send(message);
client.Disconnect(true);
}
}