package hamaster.gradesign.mail; import java.util.Date; import java.util.List; import java.util.Properties; import hamaster.gradesign.dao.IDRequestDAO; import hamaster.gradesign.dao.UserDAO; import hamaster.gradesign.entity.IDRequest; import hamaster.gradesign.entity.User; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; public class IBEMailDaemon implements Runnable { private Logger logger = LoggerFactory.getLogger(getClass()); private IBEMailParameterGenerator mailParameterGenerator; private JavaMailSender mailSender; private IDRequestDAO idRequestDAO; private UserDAO userDAO; private int userBatchSize; private int idBatchSize; private long interval; private volatile boolean running; public IBEMailDaemon() { running = true; } @Override public void run() { logger.info("IBE Mail Daemon active at:" + new Date().toString()); while (running) { sendingMail(); try { Thread.sleep(interval); } catch (InterruptedException e) { e.printStackTrace(); } } } public void stopRunning() { this.running = false; } private void sendingMail() { List<User> newUsers = userDAO.listNewRegisteredUsers(userBatchSize); List<IDRequest> newRequests = idRequestDAO.listNewRequests(idBatchSize); int i = newUsers.size() + newRequests.size(); if (i == 0) return; SimpleMailMessage[] mails = new SimpleMailMessage[i]; i = 0; for (User user : newUsers) { StringBuilder content = new StringBuilder("请将如下链接复制到浏览器中打开:\r\nhttp://localhost:8080/ibeserver/active?"); ActivationContent act = new ActivationContent(user); Properties props = mailParameterGenerator.sign(act); for (Object key : props.keySet()) { content.append(key.toString()); content.append('='); content.append(props.getProperty(key.toString())); content.append('&'); } content.deleteCharAt(content.length() - 1); content.append("\r\n"); System.out.println(content.toString());// TODO debug SimpleMailMessage mail = new SimpleMailMessage(); mail.setFrom("wangyeee@gmail.com"); mail.setTo(user.getEmail()); mail.setSubject("IBE用户激活"); mail.setText(content.toString()); mails[i] = mail; i++; } for (IDRequest idRequest : newRequests) { StringBuilder content = new StringBuilder("请将如下链接复制到浏览器中打开:\r\nhttp://localhost:8080/ibeserver/active?"); ActivationContent act = new ActivationContent(idRequest); Properties props = mailParameterGenerator.sign(act); for (Object key : props.keySet()) { content.append(key.toString()); content.append('='); content.append(props.getProperty(key.toString())); content.append('&'); } content.deleteCharAt(content.length() - 1); content.append("\r\n"); SimpleMailMessage mail = new SimpleMailMessage(); mail.setFrom("wangyeee@gmail.com"); mail.setTo(idRequest.getIdentityString()); mail.setSubject("IBE身份验证"); mail.setText(content.toString()); mails[i] = mail; i++; } mailSender.send(mails); } public JavaMailSender getMailSender() { return mailSender; } public void setMailSender(JavaMailSender mailSender) { this.mailSender = mailSender; } public IDRequestDAO getIdRequestDAO() { return idRequestDAO; } public void setIdRequestDAO(IDRequestDAO idRequestDAO) { this.idRequestDAO = idRequestDAO; } public void setUserDAO(UserDAO userDAO) { this.userDAO = userDAO; } public int getUserBatchSize() { return userBatchSize; } public void setUserBatchSize(int userBatchSize) { this.userBatchSize = userBatchSize; } public int getIdBatchSize() { return idBatchSize; } public void setIdBatchSize(int idBatchSize) { this.idBatchSize = idBatchSize; } public long getInterval() { return interval; } public void setInterval(long interval) { this.interval = interval; } public void setMailParameterGenerator(IBEMailParameterGenerator mailParameterGenerator) { this.mailParameterGenerator = mailParameterGenerator; } }