JavaMail API - เซิร์ฟเวอร์ IMAP

IMAP เป็นคำย่อของ Internet Message Access Protocol. เป็นโปรโตคอลอินเทอร์เน็ตของ Application Layer ที่อนุญาตให้ไคลเอนต์อีเมลเข้าถึงอีเมลบนเซิร์ฟเวอร์อีเมลระยะไกล โดยทั่วไปเซิร์ฟเวอร์ IMAP จะรับฟังบนพอร์ต 143 ที่รู้จักกันดี IMAP ผ่าน SSL (IMAPS) ถูกกำหนดให้กับพอร์ตหมายเลข 993

IMAP รองรับโหมดการทำงานทั้งออนไลน์และออฟไลน์ อีเมลไคลเอ็นต์ที่ใช้ IMAP โดยทั่วไปจะทิ้งข้อความไว้บนเซิร์ฟเวอร์จนกว่าผู้ใช้จะลบออกอย่างชัดเจน

แพ็คเกจ com.sun.mail.imapเป็นผู้ให้บริการโปรโตคอล IMAP สำหรับ JavaMail API ที่ให้การเข้าถึงที่เก็บข้อความ IMAP ตารางด้านล่างแสดงอินเทอร์เฟซและคลาสของผู้ให้บริการนี้:

คลาส / อินเทอร์เฟซ คำอธิบาย
IMAPFolder.ProtocolCommand อินเทอร์เฟซที่เรียบง่ายสำหรับคำสั่งโปรโตคอล IMAP ที่ผู้ใช้กำหนดเอง
ACL นี่คือชั้นเรียน รายการควบคุมการเข้าถึงสำหรับตัวระบุการพิสูจน์ตัวตนเฉพาะ (ผู้ใช้หรือกลุ่ม)
IMAPFolder คลาสนี้ใช้โฟลเดอร์ IMAP
IMAPFolder.FetchProfileItem นี่คือคลาสสำหรับการดึงข้อมูลส่วนหัว
IMAPMessage คลาสนี้ใช้อ็อบเจ็กต์ ReadableMime
IMAPMessage.FetchProfileCondition คลาสนี้ดำเนินการทดสอบที่จะทำกับแต่ละข้อความในโฟลเดอร์
IMAPSSLStore คลาสนี้ให้การเข้าถึงที่เก็บข้อความ IMAP ผ่าน SSL
IMAPStore คลาสนี้ให้การเข้าถึงที่เก็บข้อความ IMAP
สิทธิ คลาสนี้แสดงถึงชุดของสิทธิ์สำหรับตัวระบุการพิสูจน์ตัวตน (เช่นผู้ใช้หรือกลุ่ม)
สิทธิขวา ชั้นในนี้แสดงถึงสิทธิส่วนบุคคล
SortTerm เกณฑ์การจัดเรียงเฉพาะตามที่กำหนดโดย RFC 5256

บางจุดที่ควรสังเกตเหนือผู้ให้บริการนี้:

  • ผู้ให้บริการนี้รองรับทั้งโปรโตคอล IMAP4 และ IMAP4rev1

  • IMAPStore ที่เชื่อมต่อจะรักษาพูลของอ็อบเจ็กต์โปรโตคอล IMAP เพื่อใช้ในการสื่อสารกับเซิร์ฟเวอร์ IMAP เมื่อโฟลเดอร์ถูกเปิดขึ้นและจำเป็นต้องใช้อ็อบเจ็กต์โปรโตคอล IMAP ใหม่ IMAPStore จะจัดเตรียมจากพูลการเชื่อมต่อหรือสร้างขึ้นหากไม่มี เมื่อปิดโฟลเดอร์อ็อบเจ็กต์โปรโตคอล IMAP จะถูกส่งกลับไปยังพูลการเชื่อมต่อหากพูล

  • อ็อบเจ็กต์ IMAPStore ที่เชื่อมต่ออาจหรือไม่อาจรักษาอ็อบเจ็กต์โปรโตคอล IMAP แยกต่างหากที่ให้การเชื่อมต่อเฉพาะกับเซิร์ฟเวอร์ IMAP

ผู้ให้บริการโปรโตคอล IMAP สนับสนุนคุณสมบัติต่อไปนี้ซึ่งอาจถูกตั้งค่าในวัตถุ JavaMail Session คุณสมบัติจะถูกตั้งค่าเป็นสตริงเสมอ ที่Type คอลัมน์อธิบายวิธีการตีความสตริง

ชื่อ ประเภท คำอธิบาย
mail.imap.user สตริง ชื่อผู้ใช้เริ่มต้นสำหรับ IMAP
mail.imap.host สตริง เซิร์ฟเวอร์ IMAP ที่จะเชื่อมต่อ
mail.imap.port int พอร์ตเซิร์ฟเวอร์ IMAP ที่จะเชื่อมต่อหากเมธอด connect () ไม่ได้ระบุอย่างชัดเจน ค่าเริ่มต้นคือ 143
mail.imap.partialfetch บูลีน ควบคุมว่าควรใช้ความสามารถในการดึงข้อมูลบางส่วนของ IMAP หรือไม่ ค่าเริ่มต้นเป็นจริง
mail.imap.fetchsize int ขนาดการดึงข้อมูลบางส่วนเป็นไบต์ ค่าเริ่มต้นคือ 16K
mail.imap.ignorebodystructuresize บูลีน การตอบสนองของ IMAP BODYSTRUCTURE ประกอบด้วยขนาดที่แน่นอนของแต่ละส่วนของร่างกาย โดยปกติขนาดนี้จะใช้เพื่อกำหนดปริมาณข้อมูลที่จะดึงสำหรับแต่ละส่วนของร่างกาย ค่าเริ่มต้นเป็นเท็จ
mail.imap.connectiontimeout int ค่าการหมดเวลาของการเชื่อมต่อซ็อกเก็ตเป็นมิลลิวินาที ค่าเริ่มต้นคือการหมดเวลาไม่สิ้นสุด
mail.imap.timeout int ค่าการหมดเวลาของ Socket I / O หน่วยเป็นมิลลิวินาที ค่าเริ่มต้นคือการหมดเวลาไม่สิ้นสุด
mail.imap.statuscachetimeout int ค่าการหมดเวลาเป็นมิลลิวินาทีสำหรับแคชของการตอบสนองคำสั่ง STATUS ค่าเริ่มต้นคือ 1,000 (1 วินาที) Zero ปิดการใช้งานแคช
mail.imap.appendbuffersize int ขนาดสูงสุดของข้อความที่จะบัฟเฟอร์ในหน่วยความจำเมื่อผนวกเข้ากับโฟลเดอร์ IMAP
mail.imap.connectionpoolsize int จำนวนการเชื่อมต่อสูงสุดที่พร้อมใช้งานในพูลการเชื่อมต่อ ค่าเริ่มต้นคือ 1
mail.imap.connectionpooltimeout int ค่าการหมดเวลาเป็นมิลลิวินาทีสำหรับการเชื่อมต่อพูลการเชื่อมต่อ ค่าเริ่มต้นคือ 45000 (45 วินาที)
mail.imap.separatestoreconnection บูลีน ตั้งค่าสถานะเพื่อระบุว่าจะใช้การเชื่อมต่อที่เก็บเฉพาะสำหรับคำสั่งร้านค้าหรือไม่ ค่าเริ่มต้นเป็นเท็จ
mail.imap.auth.login.disable บูลีน ถ้าเป็นจริงให้ป้องกันการใช้คำสั่ง AUTHENTICATE LOGIN ที่ไม่ได้มาตรฐานแทนที่จะใช้คำสั่ง LOGIN ธรรมดา ค่าเริ่มต้นเป็นเท็จ
mail.imap.auth.plain.disable บูลีน ถ้าเป็นจริงให้ป้องกันการใช้คำสั่ง AUTHENTICATE PLAIN ค่าเริ่มต้นเป็นเท็จ
mail.imap.auth.ntlm.disable บูลีน ถ้าเป็นจริงให้ป้องกันการใช้คำสั่ง AUTHENTICATE NTLM ค่าเริ่มต้นเป็นเท็จ
mail.imap.proxyauth.user สตริง หากเซิร์ฟเวอร์รองรับส่วนขยาย PROXYAUTH คุณสมบัตินี้จะระบุชื่อของผู้ใช้ที่จะดำเนินการ พิสูจน์ตัวตนกับเซิร์ฟเวอร์โดยใช้ข้อมูลประจำตัวของผู้ดูแลระบบ หลังจากการพิสูจน์ตัวตนผู้ให้บริการ IMAP จะออกคำสั่ง PROXYAUTH ด้วยชื่อผู้ใช้ที่ระบุในคุณสมบัตินี้
mail.imap.localaddress สตริง ที่อยู่ภายในเครื่อง (ชื่อโฮสต์) ที่จะผูกกับเมื่อสร้างซ็อกเก็ต IMAP ค่าดีฟอลต์คือแอดเดรสที่เลือกโดยคลาส Socket
mail.imap.localport int หมายเลขพอร์ตภายในที่จะเชื่อมโยงเมื่อสร้างซ็อกเก็ต IMAP ค่าดีฟอลต์คือหมายเลขพอร์ตที่เลือกโดยคลาส Socket
mail.imap.sasl.enable บูลีน หากตั้งค่าเป็น true ให้พยายามใช้แพ็กเกจ javax.security.sasl เพื่อเลือกกลไกการพิสูจน์ตัวตนสำหรับล็อกอิน ค่าเริ่มต้นเป็นเท็จ
mail.imap.sasl.mechanisms สตริง รายการที่คั่นด้วยช่องว่างหรือจุลภาคของชื่อกลไก SASL ที่จะพยายามใช้
mail.imap.sasl.authorizationid สตริง ID การอนุญาตที่จะใช้ในการพิสูจน์ตัวตน SASL หากไม่ได้ตั้งค่า ID การพิสูจน์ตัวตน (ชื่อผู้ใช้) จะถูกใช้
mail.imap.sasl.realm สตริง ขอบเขตที่จะใช้กับกลไกการพิสูจน์ตัวตน SASL ที่ต้องการขอบเขตเช่น DIGEST-MD5
mail.imap.auth.ntlm.domain สตริง โดเมนรับรองความถูกต้อง NTLM
mail.imap.auth.ntlm.flags int แฟล็กเฉพาะโปรโตคอล NTLM
mail.imap.socketFactory โรงงานซ็อกเก็ต หากตั้งค่าเป็นคลาสที่ใช้อินเทอร์เฟซ javax.net.SocketFactory คลาสนี้จะถูกใช้เพื่อสร้างซ็อกเก็ต IMAP
mail.imap.socketFactory.class สตริง หากตั้งค่าให้ระบุชื่อของคลาสที่ใช้อินเตอร์เฟส javax.net.SocketFactory คลาสนี้จะใช้ในการสร้างซ็อกเก็ต IMAP
mail.imap.socketFactory.fallback บูลีน หากตั้งค่าเป็น true ความล้มเหลวในการสร้างซ็อกเก็ตโดยใช้คลาสโรงงานของซ็อกเก็ตที่ระบุจะทำให้ซ็อกเก็ตถูกสร้างขึ้นโดยใช้คลาส java.net.Socket ค่าเริ่มต้นเป็นจริง
mail.imap.socketFactory.port int ระบุพอร์ตที่จะเชื่อมต่อเมื่อใช้โรงงานซ็อกเก็ตที่ระบุ พอร์ตดีฟอลต์ถูกใช้เมื่อไม่ได้ตั้งค่า
mail.imap.ssl.enable บูลีน หากตั้งค่าเป็นจริงให้ใช้ SSL เพื่อเชื่อมต่อและใช้พอร์ต SSL ตามค่าเริ่มต้น ค่าเริ่มต้นเป็นเท็จสำหรับโปรโตคอล "imap" และเป็นจริงสำหรับโปรโตคอล "imaps"
mail.imap.ssl.checkserveridentity บูลีน หากตั้งค่าเป็นจริงให้ตรวจสอบข้อมูลประจำตัวเซิร์ฟเวอร์ตามที่ระบุโดย RFC 2595 ค่าดีฟอลต์คือ false
mail.imap.ssl.trust สตริง หากไม่ได้ตั้งค่าและโรงงานซ็อกเก็ตไม่ได้ระบุไว้ให้เปิดใช้งาน MailSSLSocketFactory
หากตั้งค่าเป็น "*" โฮสต์ทั้งหมดจะเชื่อถือได้
หากตั้งค่าเป็นรายการโฮสต์ที่คั่นด้วยช่องว่างโฮสต์เหล่านั้นจะเชื่อถือได้
มิฉะนั้นความน่าเชื่อถือจะขึ้นอยู่กับใบรับรองที่เซิร์ฟเวอร์นำเสนอ
mail.imap.ssl.socketFactory โรงงานซ็อกเก็ต SSL หากตั้งค่าเป็นคลาสที่ขยายคลาส javax.net.ssl.SSLSocketFactory คลาสนี้จะถูกใช้เพื่อสร้างซ็อกเก็ต IMAP SSL
mail.imap.ssl.socketFactory.class สตริง หากตั้งค่าให้ระบุชื่อของคลาสที่ขยายคลาส javax.net.ssl.SSLSocketFactory คลาสนี้จะถูกใช้เพื่อสร้างซ็อกเก็ต IMAP SSL
mail.imap.ssl.socketFactory.port int ระบุพอร์ตที่จะเชื่อมต่อเมื่อใช้โรงงานซ็อกเก็ตที่ระบุ หากไม่ได้ตั้งค่าพอร์ตเริ่มต้นจะถูกใช้
mail.imap.ssl.protocols สตริง ระบุโปรโตคอล SSL ที่จะเปิดใช้งานสำหรับการเชื่อมต่อ SSL ค่าคุณสมบัติเป็นรายการโทเค็นที่คั่นด้วยช่องว่างซึ่งยอมรับได้สำหรับเมธอด javax.net.ssl.SSLSocket.setEnabledProtocols
mail.imap.starttls.enable บูลีน หากเป็นจริงให้เปิดใช้งานคำสั่ง STARTTLS (หากเซิร์ฟเวอร์รองรับ) เพื่อสลับการเชื่อมต่อเป็นการเชื่อมต่อที่มีการป้องกัน TLS ก่อนที่จะออกคำสั่งล็อกอินใด ๆ ค่าเริ่มต้นเป็นเท็จ
mail.imap.starttls.required บูลีน หากเป็นจริงต้องใช้คำสั่ง STARTTLS หากเซิร์ฟเวอร์ไม่รองรับคำสั่ง STARTTLS หรือคำสั่งล้มเหลววิธีการเชื่อมต่อจะล้มเหลว ค่าเริ่มต้นเป็นเท็จ
mail.imap.socks.host สตริง ระบุชื่อโฮสต์ของพร็อกซีเซิร์ฟเวอร์ SOCKS5 ที่จะใช้สำหรับการเชื่อมต่อกับเมลเซิร์ฟเวอร์
mail.imap.socks.port สตริง ระบุหมายเลขพอร์ตสำหรับพร็อกซีเซิร์ฟเวอร์ SOCKS5 สิ่งนี้ควรใช้เฉพาะในกรณีที่พร็อกซีเซิร์ฟเวอร์ไม่ได้ใช้หมายเลขพอร์ตมาตรฐาน 1080
mail.imap.minidletime int คุณสมบัตินี้ตั้งค่าความล่าช้าเป็นมิลลิวินาที หากไม่ได้ตั้งค่าเริ่มต้นคือ 10 มิลลิวินาที
mail.imap.enableimapevents บูลีน เปิดใช้งานเหตุการณ์เฉพาะ IMAP พิเศษเพื่อส่งไปยัง ConnectionListener ของร้านค้า หากเป็นจริงการตอบกลับที่ไม่ได้ร้องขอที่ได้รับระหว่างวิธีการไม่ได้ใช้งานของ Store จะถูกส่งเป็น ConnectionEvents ด้วยประเภทของ IMAPStore.RESPONSE ข้อความของเหตุการณ์จะเป็นสตริงการตอบกลับ IMAP แบบดิบ โดยค่าเริ่มต้นกิจกรรมเหล่านี้จะไม่ถูกส่ง
mail.imap.folder.class สตริง ชื่อคลาสของคลาสย่อยของ com.sun.mail.imap.IMAPFolder สามารถใช้คลาสย่อยเพื่อให้การสนับสนุนคำสั่ง IMAP เพิ่มเติม คลาสย่อยต้องมีตัวสร้างสาธารณะของ MyIMAPFolder แบบฟอร์มสาธารณะ (String fullName, ตัวคั่นถ่าน, ที่เก็บ IMAPStore, บูลีน isNamespace) และ MyIMAPFolder สาธารณะ (ListInfo li, ที่เก็บ IMAPStore)

โดยทั่วไปแอปพลิเคชันไม่ควรใช้คลาสในแพ็คเกจนี้โดยตรง ควรใช้ API ที่กำหนดโดยแพ็คเกจ javax.mail (และแพ็กเกจย่อย) แทน แอปพลิเคชันไม่ควรสร้างอินสแตนซ์ของ IMAPStore หรือ IMAPFolder โดยตรง พวกเขาควรใช้เมธอดเซสชัน getStore เพื่อรับอ็อบเจ็กต์ Store ที่เหมาะสมและจากการรับอ็อบเจ็กต์โฟลเดอร์

ตัวอย่างเพื่อใช้เซิร์ฟเวอร์ IMAP จะแสดงให้เห็นในบทการจัดการโควต้า