Отправлять почту каждый день в 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, т.е.