Tôi đang tạo một chương trình cần giám sát tài khoản Gmail cho thư mới và để có được chúng càng sớm càng tốt Tôi đang sử dụng tính năng nhàn rỗi của JavaMail. Đây là đoạn mã từ chuỗi mà tôi đang sử dụng để gọi thư mục folder.idle():JavaMail: Giữ IMAPFolder.idle() còn sống
//Run method that waits for idle input. If an exception occurs, end the thread's life.
public void run() {
IMAPFolder folder = null;
try {
folder = getFolder();
while(true)
{
//If connection has been lost, attempt to restore it
if (!folder.isOpen())
folder = getFolder();
//Wait until something happens in inbox
folder.idle(true);
//Notify controller of event
cont.inboxEventOccured();
}
}
catch (Exception ex) {
ex.printStackTrace();
}
System.out.println("MailIdleWaiter thread ending.");
}
Phương thức getFolder() về cơ bản sẽ mở kết nối đến máy chủ IMAP và mở hộp thư đến.
Điều này hoạt động trong một thời gian, nhưng sau 10 phút hoặc lâu hơn, nó sẽ không nhận được cập nhật (không có ngoại lệ được ném).
Tôi đang tìm các đề xuất để giữ kết nối luôn hoạt động. Tôi có cần một chủ đề thứ hai chỉ có vai trò là ngủ và làm mới nhàn rỗi() thread mỗi 10 phút hoặc là có một cách dễ dàng hơn/tốt hơn?
Xin cảm ơn trước.
Tôi đang lên kế hoạch thực hiện tương tự. Bạn cuối cùng có thể giải quyết vấn đề này không? Hiện tại, tôi đang bỏ phiếu thư mục qua 'folder.open/folder.close' cứ 15 giây một lần, nhưng IDLE sẽ tốt hơn. Tôi đang lập kế hoạch để sử dụng điều này trong một môi trường máy chủ ứng dụng. – Theo
Xin lỗi vì không nhận được bình luận của bạn sớm hơn. Tôi đã kết thúc việc bỏ dự án, vì vậy tôi chưa bao giờ đến gần một giải pháp. Nhưng bây giờ mà chủ đề này có một câu trả lời, có thể điều đó sẽ làm việc ... mặc dù nó dựa trên bỏ phiếu và không nhàn rỗi. – Anders
Bạn có cả hai cuộc thăm dò ý kiến và được nhàn rỗi để làm điều đó đúng. IDLE phải được chấm dứt và gia hạn mỗi nửa giờ theo thông số kỹ thuật và thường xuyên hơn nếu một NATbox bị hỏng đang cản trở. Khoảng thời gian phù hợp là ... tốt, có thể không có Giá trị chính xác. – arnt