DastanAli
DastanAli

Reputation: 15

Quartz Email dynamics

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

Answers (1)

DastanAli
DastanAli

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

Related Questions