【问题标题】:Sending an automatic email periodically定期发送自动电子邮件
【发布时间】:2013-01-24 08:37:40
【问题描述】:

我有带有 PostgreSQL 数据库的 Windows 服务器。我在数据库中存储了包括合同到期日在内的员工数据。 我想在到期日前 30 天为每位员工发送一封自动电子邮件。 (每个员工都有一个电子邮件帐户)。 最好的方法是什么? 我正在考虑执行以下操作,请您告知这是否是最好的方法,如果我需要回答这些问题:

  • 构建 WinForm C# 应用程序:
  • 每天访问PostgreSQL(我知道如何处理Postgresql,但是how to make it per each new day (schedule task?)?)

  • 将机器日期与数据库中的所有到期日期进行比较

  • 如果差值等于或小于 30 天,将自动发送邮件 发送给员工。 (how to send emails using C#}

【问题讨论】:

  • 一个服务可能会为此过分。我会构建一个控制台应用程序,该应用程序每天作为计划任务运行一次。

标签: c# .net database postgresql


【解决方案1】:

正如@Middas 建议的那样,编写一个简单的控制台应用程序将负责在应用程序之外进行调度。

一个简单的控制台应用程序是可以的,由 Windows 调度程序或第 3 方调度程序进行调度。

对于发送电子邮件,您可以

  • 使用 .net 提供的 SMTPClient 命名空间发送电子邮件
  • 使用像Amazon SES这样的第三方服务

【讨论】:

    【解决方案2】:

    您可以使用Quartz.NET 来安排负责发送电子邮件的方法。

    Quartz.NET 使用 cron 时间来配置何时执行您的代码。

    在网站上有一些例子。

    【讨论】:

      【解决方案3】:

      创建 .Net 控制台应用程序会不会很容易,该应用程序会触发对数据库的查询,该数据库会带来合同在 30 天内到期的所有员工记录。 使用 Windows Scheduler 安排此任务,使其在每天的特定时间运行。

      现在要使用 C# 发送电子邮件,请尝试以下代码。

      MailMessage mailObj = new MailMessage(strFrom, strTo, strSubject, strBody);
      SmtpClient SMTPObj = new SmtpClient(IPAddress,port);
      try
      {
        SMTPObj.Send(mailObj);
      }
      catch (Exception ex)
      {
        //Handle Exception
      }
      

      希望有所帮助 温和的

      【讨论】:

        【解决方案4】:

        我会按照您的建议使用 Windows 服务。将服务计时器设置为 30 秒,然后检查时间是否在 00:00:00 和 00:00:00 之间,发送电子邮件。这意味着您不必尝试在需要时触发 elapsed 事件。

        【讨论】:

        • 当邮件需要在到期前 30 天发出时,为什么要每 30 秒检查一次?
        • 它使发送时间更容易。否则,如果您每天运行一次,则需要准确确定服务的启动时间。
        • 嗯,这是一个调度问题,我认为任何调度程序都会解决这个问题。当只需要一个时,我会小心不要触发 48 个查询。但猜测这取决于上下文
        猜你喜欢
        • 2013-06-09
        • 2011-10-22
        • 2013-08-22
        • 2013-10-31
        • 2014-01-15
        • 1970-01-01
        • 1970-01-01
        • 2013-12-02
        相关资源
        最近更新 更多