通过java

时间:2015-07-11 05:35:08

标签: java javamail pop3 timertask

我有以下程序作为邮箱侦听器,它配置了POP3协议,当程序执行时,它连接到邮箱并下载指定文件夹中的所有邮件和附件,现在我的查询是我如何修改我的下面的程序,以便它应该保持轮询邮箱列表,让我们说每10分钟,并下载所有的邮件,所以每10分钟应该进行一次轮询请告诉我如何修改我的下面的程序实现了这个..

import java.io.*;
import java.util.*;
import javax.mail.*;

import javax.mail.internet.MimeBodyPart;

public class ReceiveMailPOP3 {
  private static final String HOST = "pop.gmail.com";
  private static final String USERNAME = "myemail@gmail.com";
  private static final String PASSWORD = "******";

  public static void doit() throws MessagingException, IOException {
    Folder folder = null;
    Store store = null;
    try {
      Properties props = new Properties();
      props.put("mail.store.protocol", "pop3s"); // Google uses POP3S not POP3
      Session session = Session.getDefaultInstance(props);
      // session.setDebug(true);
      store = session.getStore();
      store.connect(HOST, USERNAME, PASSWORD);
      folder = store.getDefaultFolder().getFolder("INBOX");
      folder.open(Folder.READ_ONLY);
      Message[] messages = folder.getMessages();
      System.out.println("No of Messages : " + folder.getMessageCount());
      System.out.println("No of Unread Messages : " + folder.getUnreadMessageCount());
      for (int i=0; i < messages.length; ++i) {
        System.out.println("MESSAGE #" + (i + 1) + ":");
        Message msg = messages[i];
        String from = "unknown";
        if (msg.getReplyTo().length >= 1) {
          from = msg.getReplyTo()[0].toString();
        }
        else if (msg.getFrom().length >= 1) {
          from = msg.getFrom()[0].toString();
        }
        String subject = msg.getSubject();
        System.out.println("Saving ... " + subject +" " + from);
        // you may want to replace the spaces with "_"
        // the files will be saved into the TEMP directory
        String filename = "c:/temp/" +  subject;
        saveParts(msg.getContent(), filename);
      }
    }
    finally {
      if (folder != null) { folder.close(true); }
      if (store != null) { store.close(); }
    }
  }

  public static void saveParts(Object content, String filename)
  throws IOException, MessagingException
  {
    OutputStream out = null;
    InputStream in = null;
    try {
      if (content instanceof Multipart) {
        Multipart multi = ((Multipart)content);
        int parts = multi.getCount();
        for (int j=0; j < parts; ++j) {
          MimeBodyPart part = (MimeBodyPart)multi.getBodyPart(j);
          if (part.getContent() instanceof Multipart) {
            // part-within-a-part, do some recursion...
            saveParts(part.getContent(), filename);
          }
          else {
            String extension = "";
            if (part.isMimeType("text/html")) {
              extension = "html";
            }
            else {
              if (part.isMimeType("text/plain")) {
                extension = "txt";
              }
              else {
                //  Try to get the name of the attachment
                extension = part.getDataHandler().getName();
              }
              filename = filename + "." + extension;
              System.out.println("... " + filename);
              out = new FileOutputStream(new File(filename));
              in = part.getInputStream();
              int k;
              while ((k = in.read()) != -1) {
                out.write(k);
              }
            }
          }
        }
      }
    }
    finally {
      if (in != null) { in.close(); }
      if (out != null) { out.flush(); out.close(); }
    }
  }

  public static void main(String args[]) throws Exception {
    ReceiveMailPOP3.doit();
  }
} 

1 个答案:

答案 0 :(得分:1)

您可以使用Timer。通过使用Timer,您可以定期安排任务。

  Timer timer = new Timer();
  long interval = (10*60*1000) ; // 10 minutes

  timer.schedule( new TimerTask() {
       public void run() {
          ReceiveMailPOP3.doit();
       }
  }, 0, interval); 

如果您想停止日程安排,可以使用timer.cancel();

值得注意的另一点是:如果ReceiveMailPOP3.doit();12:00开始并需要9分钟才能执行,ReceiveMailPOP3.doit();的下一次执行将在12:19,因为timer将在每次执行之间等待interval个时间。如果你想在10分钟执行而不关心以前的执行,你将不得不使用timer.scheduleAtFixedRate