Reputation: 15
What I need is to use quartz to send emails at a given time, I just do not know what the email will be, so I want to send a variable to the EmailJob class, where it will receive the various emails and then the class JobSchedulerController, will take care of activate the Triguer. Anyone who can help me with this?
This would be the code of my class EmailJob:
public class EmailJob : IJob {
public Task Execute(IJobExecutionContext context)
{
string UserName = string.Empty;
string EmailAdress = string.Empty;
var correo1 = new MailAddress("[email protected]"); //Colocar el correo principal de salida
string contrasegna = "-Password-"; //Contraseña del Correo de salida
//Correos a los que se debe enviar la información
var correo2 = new MailAddress(Mail_1);
var correo3 = new MailAddress(Mail_2);
var correo4 = new MailAddress(Mail_3);
var correo5 = new MailAddress(Mail_4);
//El host correspondiente
string host = "smtp-mail.outlook.com";
//Título y cuerpo del mensaje.
string subject = "Prueba del uso de Quartz";
string body = "Se realiza una prueba con Quartz " + DateTime.Now + " .Finalmente se logra la incorporación de esta librería";
//
int? cod_form = 0;
DateTime Last_update;
int Status = 0;
string StatusDescription = string.Empty;
string User = string.Empty;
string Email = string.Empty;
using (var message1 = new MailMessage(correo1.ToString(), Email))
{
message1.Subject = subject;
message1.Body = body;
using (SmtpClient client = new SmtpClient
{
Host = host,
Port = 587,
EnableSsl = true,
UseDefaultCredentials = false,
Credentials = new NetworkCredential(correo1.Address, contrasegna)
})
{
client.Send(message1);
}
}
using (var message2 = new MailMessage(correo1, correo3))
{
message2.Subject = subject;
message2.Body = body;
using (SmtpClient client = new SmtpClient
{
Host = host,
Port = 587,
EnableSsl = true,
UseDefaultCredentials = false,
Credentials = new NetworkCredential(correo1.Address, contrasegna)
})
{
client.Send(message2);
}
}
using (var message3 = new MailMessage(correo1, correo4))
{
message3.Subject = subject;
message3.Body = body;
using (SmtpClient client = new SmtpClient
{
Host = host,
Port = 587,
EnableSsl = true,
UseDefaultCredentials = false,
Credentials = new NetworkCredential(correo1.Address, contrasegna)
})
{
client.Send(message3);
}
}
using (var message4 = new MailMessage(correo1, correo5))
{
message4.Subject = subject;
message4.Body = body;
using (SmtpClient client = new SmtpClient
{
Host = host,
Port = 587,
EnableSsl = true,
UseDefaultCredentials = false,
Credentials = new NetworkCredential(correo1.Address, contrasegna)
})
{
client.Send(message4);
}
}
return Task.CompletedTask;
}
}
}
And this would be the code of my class JobSchedulerController
public class JobSchedulerController : Controller { // GET: JobScheduler
#region Start
public static async void Start(List<string> Forms_List)
{
PrincipalController Status_Form = new PrincipalController();
EmailStatus SC_Model = new EmailStatus();
DateTime today = DateTime.Now;
int days5 = 120;
int days10 = 240;
int days7 = 168;
int minute_10 = 10;
int minute_20 = 20;
IJobDetail job = JobBuilder.Create<EmailJob>().Build();
IScheduler scheduler = await StdSchedulerFactory.GetDefaultScheduler();
await scheduler.Start();
ITrigger trigger2 = TriggerBuilder.Create() //Fecha, día exacto, 5 días después, 10 días después.
.WithIdentity("trigger_Test", "group_Test")
.StartAt(today)
//.WithCronSchedule("")
.WithSimpleSchedule(x => x
.WithIntervalInMinutes(1)
//.WithIntervalInHours(days5) //Equivale a 5 días.
.WithRepeatCount(2))
.Build();
await scheduler.ScheduleJob(job, trigger2);
}
#endregion
}
Upvotes: 0
Views: 42
Reputation: 15
In the end I got it, I leave the full code
public class JobSchedulerController : Controller
{
// GET: JobScheduler
#region Start
public static async void Start(List<string> Email)
{
DateTime today = DateTime.Now;
int days5 = 120;
int days10 = 240;
int days7 = 168;
int minute_10 = 10;
int minute_20 = 20;
string EmailAdress;
int cont = 0;
foreach (var item in Email)
{
++cont;
EmailAdress = item.ToString();
IJobDetail job = JobBuilder.Create<EmailJob>()
.UsingJobData("Email_List", EmailAdress)
.Build();
IScheduler scheduler = await StdSchedulerFactory.GetDefaultScheduler();
await scheduler.Start();
ITrigger trigger2 = TriggerBuilder.Create() //Fecha, día exacto, 5 días después, 10 días después.
.WithIdentity("trigger_"+cont, "group_" + cont)
.StartAt(today)
//.WithCronSchedule("")
.WithSimpleSchedule(x => x
.WithIntervalInMinutes(1)
//.WithIntervalInHours(days5) //Equivale a 5 días.
.WithRepeatCount(2))
.Build();
await scheduler.ScheduleJob(job, trigger2);
}
}
#endregion
}
}
Second Class
public class EmailJob : IJob
{
public Task Execute(IJobExecutionContext context)
{
JobKey key = context.JobDetail.Key;
JobDataMap dataMap = context.JobDetail.JobDataMap;
string UserName = string.Empty;
string List_Emails = dataMap.GetString("Email_List");
var correo1 = new MailAddress("[email protected]"); //Colocar el correo principal de salida
string contrasegna = "PASSWORD"; //Contraseña del Correo de salida
//Correos a los que se debe enviar la información
var correo2 = new MailAddress(List_Emails);
//El host correspondiente
string host = "smtp-mail.outlook.com";
//Título y cuerpo del mensaje.
string subject = "Prueba del uso de Quartz";
string body = "Se realiza una prueba con Quartz " + DateTime.Now + " .Finalmente se logra la incorporación de esta librería";
//
using (var message1 = new MailMessage(correo1, correo2))
{
message1.Subject = subject;
message1.Body = body;
using (SmtpClient client = new SmtpClient
{
Host = host,
Port = 587,
EnableSsl = true,
UseDefaultCredentials = false,
Credentials = new NetworkCredential(correo1.Address, contrasegna)
})
{
client.Send(message1);
}
}
return Task.CompletedTask;
}
}
Upvotes: 1