准备使用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();
    } 
}
谢谢各位了!

解决方案 »

  1.   

    还是邮件list使用add方法时启动一个线程发送邮件
      

  2.   

    使用多线程有意义吗,邮件内容很大?MailSender sender = new MailSender();
    for (int i = 0; i < mailList.size(); i++) {
      sender.sendMail(mailList.get(i).toString,content);
    }
      

  3.   

    这是后来写的一个class
    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
      

  4.   

    你丫太牛啦,一个接收人就一个线程呀? 太浪费了吧...
    怎么也得传入一个接受人列表吧
    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();
      }
    }
      

  5.   

    sureyor():传入列表后,邮件发不了,不知道是不是邮件服务器的原因,一个接收人就一个线程时发送还比较正常,有时候会出现异常,请指点下。