以前从未使用过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