[英]How to run method/function after every 2 minutes upto 10 minutes in java?
[英]polling mailbox after every 10 minutes through java
我有下面的程序充当邮箱侦听器,它是用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();
}
}
您可以使用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();
因为timer
将等待每次执行之间的时间interval
,所以它将在12:19
。 如果您想在10分钟时执行而不关心先前的执行,则必须使用timer.scheduleAtFixedRate
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.