通过Internet发送邮件,可能会在网络传输上面使用较多的时间,如果调用发送邮件的线程与发送邮件线程是同一个的话,那么有可能会照成系统等待较长的时间而无法继续执行,影响系统效率。
那么这时可考虑使用多线程,实现异步发送,而不用等待邮件发送者的返回。
首先,是发送邮件的抽象任务类。其子类负责发送邮件操作。
public abstract class AbstractTask implements Runnable {
private IEmailSenderListener iEmailSenderListener;
private Log log = LogFactory.getLog(AbstractTask.class);
/* (non-Javadoc)
* @see java.lang.Runnable#run()
*/
@Override
public void run() {
if(iEmailSenderListener != null){
// 操作开始响应事件
iEmailSenderListener.beforeSendEmail();
}
boolean flag = false;
try{
flag = doAction();
}catch(Exception e){
if(iEmailSenderListener != null){
iEmailSenderListener.catchException(e);
}
log.error(e,e.fillInStackTrace());
e.printStackTrace();
}
if(iEmailSenderListener != null){
// 操作完成之后
iEmailSenderListener.afterSendEmail(flag);
}
}
public abstract boolean doAction() throws Exception;
}
发送邮件实现类:
public class EmailSendTask extends AbstractTask{
private JavaMailSender javaMailSender;
SimpleMailMessage simpleMailMessage;
MimeMessage mimeMessage;
public EmailSendTask(