30.4.09

POP3 check new mail

การดึงเมล์โดยใช้ protocol POP3 กับ IMAP4 มีความแตกต่างกันพอสมควรทั้งในแง่การ implement หรือคุณสมบัติต่างๆ ปัญหาอย่างนึงของ POP3 คือไม่สามารถคุยกับ mail server เพื่อดึงเฉพาะเมล์ใหม่ได้
เราอาจแก้ปัญหานี้ได้โดยการเข้าไปคุยกับ mail server เพื่อดึงเฉพาะ header มาตรวจสอบก่อน แต่ประเด็นของมันจึงอยู่ที่ขนาดของ header แทน ถ้าขนาดไม่กี่ kb ก็คงไม่เป็นไรแต่ถ้าขนาดใหญ่ถึง mb ดังนั้นการแก้ปัญหาด้วยการตรวจสอบจาก header จึงไม่ใช่แนวทางแก้ปัญหาที่ดี
ทางออกของปัญหานี้จะใช้การตรวจจาก uid (unique identify) แทนเพราะมันมีขนาดเล็กไม่ต้องกังวลเรื่องขนาดของข้อมูลตอนส่ง message
ตัวอย่าง (ตัด code มาบางส่วน)

Message[] message = folder.getMessages();
POP3Folder pop3Folder = (POP3Folder)folder;
FetchProfile fetchProfile = new FetchProfile();
fetchProfile.add(UIDFolder.FetchProfileItem.UID);
pop3Folder.fetch(message, fetchProfile);

for (int i = 0; i<message.length; i++) {
String uid = pop3Folder.getUID(message[i]);
if (isNewMessage(uid)) {
// blah blah....
}
}

ส่วนใน method isNewMessage(uid) ก็ส่งค่า uid เข้าไปตรวจจาก uid ที่เรามีอยู่แล้วโดยอาจเก็บไว้ใน database หรือ file system ก็ได้ตามสะดวก

No comments:

Post a Comment