Отправлять почту каждый день в 20:00, используя службы Windows

Ниже код отправляет почту каждые 3 минуты. Но я хочу отправлять почту только один раз в день в 8 вечера. Как установить это в приведенном ниже коде.

Я новичок в Windows Services, так что помогите мне. Я использую Visual Studio 2010

    public partial class Scheduler : ServiceBase
 {
    System.Timers.Timer createOrderTimer;
    private Timer timer1 = null;
    public Scheduler()
    {
        InitializeComponent();
    }

    protected override void OnStart(string[] args)
    {
        System.Timers.ElapsedEventHandler(this.timer1_Tick);

        createOrderTimer = new System.Timers.Timer();
        createOrderTimer.Elapsed += new System.Timers.ElapsedEventHandler(GetMail);
        createOrderTimer.Interval = 180000;
        createOrderTimer.Enabled = true;
        createOrderTimer.AutoReset = true;
        createOrderTimer.Start();   
    }

    private void timer1_Tick(object sender, ElapsedEventArgs e)
    {
        Library.WriteErrorLog("Timer Ticked and some job has been done successfully");
    }

    protected override void OnStop()
    {
        timer1.Enabled = false;
        Library.WriteErrorLog("Test Window Service stopped");
    }

    public void GetMail(object sender, System.Timers.ElapsedEventArgs args)
    {
        NetworkCredential cred = new NetworkCredential("abc@gmail.com", "abc");
        MailMessage msg = new MailMessage();
        msg.To.Add("to@abc.com");
        msg.Subject = "Welcome Venkat";

        msg.Body = "You Have Successfully Entered to venkat World!!!";
        msg.From = new MailAddress("from@gmail.com"); // Your Email Id
        SmtpClient client = new SmtpClient("smtp.gmail.com", 587);
        client.Credentials = cred;
        client.EnableSsl = true;
        client.Send(msg);
    }
}

2 ответа

Вы отправляете почту каждые три минуты. Почему бы вам просто не контролировать, если время 8:00 каждую минуту, и отправлять почту, если так. Вы можете узнать текущее время с DateTime.Now, Чтобы усилить свой контроль, вы можете сохранить журнал отправленных писем и попытаться отправить еще раз, если вы еще этого не сделали, поскольку отправка может завершиться неудачей.

Примерно так, как показано ниже, но знайте, что это очень простой пример и может вызвать ошибки:

public void GetMail(object sender, System.Timers.ElapsedEventArgs args)
{
    if (mailSentForToday)
        return;

    if (DateTime.Now.Hour < 20)
        return;

    NetworkCredential cred = new NetworkCredential("abc@gmail.com", "abc");
    MailMessage msg = new MailMessage();
    msg.To.Add("to@abc.com");
    msg.Subject = "Welcome Venkat";

    // send the mail    
}

Взгляните на следующую библиотеку: http://www.quartz-scheduler.net/

При этом вы можете легко планировать свои задачи.

Вы можете найти примеры здесь на stackru, т.е.

Другие вопросы по тегам