I have a background task to send emails that work but it works continously. I want to make it fire at a spoecific time of day. How do I do that?
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
var dataAzi = DateTime.Now;
var data = await _context.MemoratClassDetails.Include(s => s.MemoratClassSubCategory)
.ThenInclude(s => s.MemoratClassCategory)
.Where(s => s.MemDataReminder.Year == dataAzi.Year && s.MemDataReminder.Month == dataAzi.Month && s.MemDataReminder.Day == dataAzi.Day && s.Reminder == false)
.ToListAsync();
while (!stoppingToken.IsCancellationRequested)
{
if (data.Count() > 0)
{
foreach (var i in data)
{
var category = i.MemoratClassSubCategory.MemoratClassCategory.MemCategory;
var uemail = "[email protected]";
var subcategory = i.MemoratClassSubCategory.MemSubCategory;
var message = i.MemData;
var emailCom = new MimeMessage();
emailCom.From.Add(new MailboxAddress(_smtpSettings.SenderName, _smtpSettings.SenderEmail));
emailCom.To.Add(new MailboxAddress(uemail));
emailCom.Cc.Add(new MailboxAddress("[email protected]"));
emailCom.Subject = "Reminder!";
var bodybuilder = new BodyBuilder();
bodybuilder.HtmlBody = @"
<div style='background-color:white;border-color:darkblue;border-style:double;width:80%; color:darkblue;padding:20px;margin:10px'>
<h1 style='text-align: center; font-family: Sigmar One' , cursive;'>Contact Notification</h1>
<hr>
<br><h3 style='color:blueviolet;'>Categorie: </h3>" + category + @"
<br>
<br><h3 style='color:blueviolet;'>Subcategorie: </h3>" + subcategory + @"
<br>
<br><h3 style='color:blueviolet;'>Detaliu: </h3>" + message + @"
<br><br><br><br><br>
<p style='text-align:center'>
This is a message received because you set a reminder on rosafety.com
</p>
</div>
";
emailCom.Body = bodybuilder.ToMessageBody();
using (var client = new SmtpClient())
{
await client.ConnectAsync(_smtpSettings.Server, _smtpSettings.Port, true);
client.AuthenticationMechanisms.Remove("XOAUTH2");
await client.AuthenticateAsync(_smtpSettings.UserName, _smtpSettings.Password);
await client.SendAsync(emailCom);
await client.DisconnectAsync(true);
}
var mdid = i.MemoratDetID;
var editData = await _context.MemoratClassDetails.FindAsync(mdid);
editData.Reminder = true;
await _context.SaveChangesAsync();
}
}
}
}