以前从未使用过Java邮件。

在我的JSF Web应用程序中,我有一个实体(followUp),其属性private Date checkDate;对应于Animal实体。 (动物有很多跟进记录)。除此以外:

用户必须每3个月在{followUp}中创建一个新记录,并将其标记为已选中,并提供其操作日期为“ checkDate”。但由于用户是如此懒惰,因此他只对少数动物进行了此操作。
因此,他实际上希望通过电子邮件收到有关未检查3个月以上的动物的警报。
示例:我在2011年1月1日为动物“ A”创建了一个followUp记录,然后大约在2011年1月4日,该用户收到一封电子邮件,提醒他去检查动物B的随访。

该Web应用程序正在本地企业网络上运行。

我只知道那段代码:

import javax.mail.*;
import javax.mail.internet.*;

import java.util.Properties;

class SimpleMail {
    public static void main(String[] args) throws Exception{
      Properties props = new Properties();
      props.setProperty("mail.transport.protocol", "smtp");
      props.setProperty("mail.host", "mymail.server.org");
      props.setProperty("mail.user", "emailuser");
      props.setProperty("mail.password", "");

      Session mailSession = Session.getDefaultInstance(props, null);
      Transport transport = mailSession.getTransport();

      MimeMessage message = new MimeMessage(mailSession);
      message.setSubject("Testing javamail plain");
      message.setContent("This is a test", "text/plain");
      message.addRecipient(Message.RecipientType.TO,
           new InternetAddress("[email protected]"));

      transport.connect();
      transport.sendMessage(message,
          message.getRecipients(Message.RecipientType.TO));
      transport.close();
    }
}


为此,我应该创建一个Servlet筛选器,一个侦听器,一个应用程序范围的支持bean吗?在followUp记录上循环并返回最后一条记录的checkDate并将其与“今天”日期进行比较的查询?

任何帮助都可以。问候。

最佳答案

根据您的问题历史记录,我知道您正在使用Glassfish 3(带有EJB 3.1的Java EE 6),因此建议您使用@Singleton方法创建一个@Schedule EJB,该方法以指定的间隔在后台执行,例如例如每天午夜(00:00:00)。

@Singleton
public class MailReminder {

    @Schedule(hour="0", minute="0", second="0", persistent=false)
    public void run() {
        // Do your check and mail job here.
    }

}

而已。无需其他配置。出于测试目的,您可以使用
    @Schedule(hour="*", minute="*/1", second="0", persistent=false)

让它每分钟运行一次。
也可以看看:

Java EE 6 tutorial - Using timer service

08-04 13:54