准备使用spring的发邮件方式实现邮件群发的功能,单个发邮件比较简单,已经实现。对于多线程群发邮件还有疑问,从数据库中取出所有用户的列表以及要发送的邮件内容html格式的(邮件相同,用户邮件地址不同),管理员点击发送,action执行群发功能。下面是单个邮件发送的代码
public class MailSender {
public void sendMail(String receiverEmail,String content) throws MailException{
ApplicationContext ctx= new FileSystemXmlApplicationContext("classpath:spring/applicationContext-mail.xml");
JavaMailSender sender = (JavaMailSender)ctx.getBean("mailSender");
SimpleMailMessage message = (SimpleMailMessage)ctx.getBean("mailMessage");
//设置简单邮件信息接受人
message.setTo(receiverEmail);
message.setText(content);
sender.send(message);}}
想问一下,怎么使用多线程控制,或者是单线程在后台执行,主要是怎么每次只发送一个用户邮件,后来传入的是一个用户邮件list或者一个quene的,
怎么使用多线程控制;
public class MailSender implements Runnable {
public void run() {
this.sendMail();
}
public static void main(String[] args) {
Thread thread = new Thread(new MailSender ());
thread.start();
}
}
谢谢各位了!
public class MailSender {
public void sendMail(String receiverEmail,String content) throws MailException{
ApplicationContext ctx= new FileSystemXmlApplicationContext("classpath:spring/applicationContext-mail.xml");
JavaMailSender sender = (JavaMailSender)ctx.getBean("mailSender");
SimpleMailMessage message = (SimpleMailMessage)ctx.getBean("mailMessage");
//设置简单邮件信息接受人
message.setTo(receiverEmail);
message.setText(content);
sender.send(message);}}
想问一下,怎么使用多线程控制,或者是单线程在后台执行,主要是怎么每次只发送一个用户邮件,后来传入的是一个用户邮件list或者一个quene的,
怎么使用多线程控制;
public class MailSender implements Runnable {
public void run() {
this.sendMail();
}
public static void main(String[] args) {
Thread thread = new Thread(new MailSender ());
thread.start();
}
}
谢谢各位了!
for (int i = 0; i < mailList.size(); i++) {
sender.sendMail(mailList.get(i).toString,content);
}
public class MailSender2 implements Runnable{
/**
* 邮件排队点号、发送线程,
*/
private Thread thread;
private String receiverEmail;
private String content;
private JavaMailSenderImpl mailSender;
private SimpleMailMessage mailMessage; public MailSender2(String receiverEmail,String content,JavaMailSenderImpl mailSender,SimpleMailMessage mailMessage) throws InterruptedException {
this.mailSender=mailSender;
this.mailMessage=mailMessage;
this.receiverEmail=receiverEmail;
this.content=content;
thread = new Thread(this);
thread.setDaemon(true);
thread.start();
thread.sleep(10000);
}
public void run() {
try {
//执行实际发送
sendMail(receiverEmail, content,mailSender,mailMessage);
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void sendMail(String receiverEmail,String content,JavaMailSenderImpl sender,SimpleMailMessage message) throws MailException{
//设置简单邮件信息接受人
message.setTo(receiverEmail);
message.setText(content);
sender.send(message);
}
在action中循环new MailSender2 ,每次new一个启动一个线程,后台大多数情况下报Could not connect to SMTP host: 211.152.45.108, port: 25, response: 554还是会继续执行。大家帮忙看看有什么不对 ,谢谢1
怎么也得传入一个接受人列表吧
public MailSender2(
List receiverEmailList,String content,JavaMailSenderImpl mailSender,SimpleMailMessage mailMessage) throws InterruptedExceptionpublic void run() {
try {
MailSender sender = new MailSender();
for (int i = 0; i < receiverEmailList.size(); i++) {
sender.sendMail(mailList.get(i).toString,content);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}