在上一篇发送邮件的基础上,改进发送生日祝福。例如腾讯qq邮箱,qq用户过生日,腾讯都会自动给用户发送一个qq生日祝福邮件。
知识点:Listener, SendMail, sql
package birthday;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import mail.SendEmailUtil;
import org.apache.tomcat.jni.Time;
import java.text.SimpleDateFormat;
import java.util.*;
//设置一个监听器,服务器启动就开始监听当前是否有过生日的会员
public class BirthdaySendHappyListener implements ServletContextListener {
public BirthdaySendHappyListener() {
// TODO Auto-generated constructor stub
}
public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub
}
public void contextInitialized(ServletContextEvent arg0) {
// TODO Auto-generated method stub
//服务器启动,开始检测任务是否会员过生日。并且发送生日祝福
Timer timer=new Timer();
// 任务,用TimerTask,中执行run方法。也可以利用匿名内部类
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
// 1,获取当天过生日的顾客对象集合
SimpleDateFormat format=new SimpleDateFormat("MM-dd");
String currentDate=format.format(new Date());//获得当天月日
QueryRunner runner=new QueryRunner(DataSourceUtils.getDataSource());
String sql="select email from customer where cname like ?";
Customer customerList=null;
try {
customerList = runner.query(sql, new BeanListHandler(Customer.class) ,"%"+currentDate+"%");
} catch (SQLException e) {
e.printStackTrace();
}
//2、发邮件
if(customerList!=null&&customerList.size()>0){
for(Customer c : customerList){
String emailMsg = "亲爱的:"+c.getRealname()+",生日快乐!";
try {
SendEmailUtil.sendMail(c.getEmail(), "生日祝福", emailMsg);
System.out.println(c.getRealname()+"邮件发送完毕");
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
}
},new Date(),1000*60*60*24); //每天执行一次
}
}