JavaMail API - คลาสหลัก
JavaMail API ประกอบด้วยอินเทอร์เฟซและคลาสบางอย่างที่ใช้ในการส่งอ่านและลบข้อความอีเมล แม้ว่าจะมีหลายแพ็กเกจใน JavaMail API จะครอบคลุมหลักสองแพคเกจที่ใช้ใน Java API จดหมายบ่อย: javax.mailและjavax.mail.internetแพคเกจ แพ็กเกจเหล่านี้มีคลาสหลักของ JavaMail ทั้งหมด พวกเขาเป็น:
คลาส | คำอธิบาย |
---|---|
javax.mail.Session | คลาสสำคัญของ API อ็อบเจ็กต์มัลติเธรดแสดงถึงโรงงานการเชื่อมต่อ |
javax.mail.Message | คลาสนามธรรมที่จำลองข้อความอีเมล คลาสย่อยให้การใช้งานจริง |
javax.mail.A ที่อยู่ | คลาสนามธรรมที่จำลองที่อยู่ (จากและไปยังที่อยู่) ในข้อความ คลาสย่อยจัดเตรียมการนำไปใช้งานเฉพาะ |
javax.mail.Authenticator | คลาสนามธรรมที่ใช้เพื่อป้องกันทรัพยากรอีเมลบนเซิร์ฟเวอร์อีเมล |
javax.mail.Transport | คลาสนามธรรมที่จำลองกลไกการส่งข้อความสำหรับการส่งข้อความอีเมล |
javax.mail.Store | คลาสนามธรรมที่จำลองที่เก็บข้อความและโปรโตคอลการเข้าถึงสำหรับจัดเก็บและเรียกค้นข้อความ ร้านค้าแบ่งออกเป็นโฟลเดอร์ |
javax.mail.Folder | คลาสนามธรรมที่แสดงถึงโฟลเดอร์ของข้อความเมล สามารถมีโฟลเดอร์ย่อยได้ |
javax.mail.internetMimeMessage | ข้อความเป็นคลาสนามธรรมดังนั้นจึงต้องทำงานร่วมกับคลาสย่อย ในกรณีส่วนใหญ่คุณจะใช้ MimeMessage MimeMessage คือข้อความอีเมลที่เข้าใจประเภทและส่วนหัวของ MIME |
javax.mail.internetInternetAddress | คลาสนี้แสดงที่อยู่อีเมลทางอินเทอร์เน็ตโดยใช้ไวยากรณ์ของ RFC822 ไวยากรณ์อยู่ทั่วไปคือรูปแบบ[email protected]หรือชื่อบุคคล <[email protected]> |
ให้เราศึกษาแต่ละชั้นเรียนเหล่านี้โดยละเอียดและในบทต่อ ๆ ไปเราจะศึกษาตัวอย่างโดยใช้แต่ละชั้นเรียนเหล่านี้
ชั้นเรียน
เซสชันชั้นเป็นชั้นหลักของ JavaMail API และมันก็ไม่ได้ subclassed เซสชันวัตถุทำหน้าที่เป็นโรงงานการเชื่อมต่อสำหรับ JavaMail API ซึ่งจัดการทั้งการตั้งค่าการกำหนดค่าและการตรวจสอบ
สามารถสร้างวัตถุเซสชันได้ด้วยวิธีต่อไปนี้:
โดยการค้นหาอ็อบเจ็กต์ที่จัดการที่เก็บไว้ในบริการ JNDI
InitialContext ctx = new InitialContext(); Session session = (Session) ctx.lookup("usersMailSession");
usersMailSessionคืออ็อบเจ็กต์ชื่อ JNDI ที่ใช้เป็นอ็อบเจ็กต์ที่บริหารจัดการสำหรับอ็อบเจ็กต์เซสชัน usersMailSessionสามารถสร้างและกำหนดค่าด้วยพารามิเตอร์ที่ต้องการเป็นคู่ชื่อ / ค่ารวมถึงข้อมูลเช่นชื่อโฮสต์เซิร์ฟเวอร์เมลบัญชีผู้ใช้ที่ส่งเมลและโปรโตคอลที่อ็อบเจ็กต์เซสชันรองรับ
อีกวิธีหนึ่งในการสร้างวัตถุเซสชันขึ้นอยู่กับวิธีการทางโปรแกรมซึ่งคุณสามารถใช้อ็อบเจ็กต์java.util.Propertiesเพื่อแทนที่ข้อมูลดีฟอลต์บางอย่างเช่นชื่อเซิร์ฟเวอร์เมลชื่อผู้ใช้รหัสผ่านและข้อมูลอื่น ๆ ที่สามารถ แชร์ในแอปพลิเคชันทั้งหมดของคุณ
ตัวสร้างสำหรับเซสชันระดับเป็นส่วนตัว ดังนั้นคลาสเซสชันจึงมีสองวิธี (ตามรายการด้านล่าง) ซึ่งได้รับวัตถุเซสชัน
getDefaultInstance(): มีสองวิธีในการรับวัตถุเซสชันโดยใช้เมธอด getDefaultInstance () ส่งคืนเซสชันเริ่มต้น
public static Session getDefaultInstance(Properties props) public static Session getDefaultInstance(Properties props,Authenticator auth)
getInstance(): มีสองวิธีในการรับวัตถุเซสชันโดยใช้เมธอด getInstance () ส่งคืนเซสชันใหม่
public static Session getInstance(Properties props) public static Session getInstance(Properties props,Authenticator auth)
คลาสข้อความ
ด้วยการสร้างวัตถุเซสชันเราไปสู่การสร้างข้อความที่จะส่ง พิมพ์ข้อความที่จะjavax.mail.Message
ข้อความเป็นคลาสนามธรรม ดังนั้นคลาสย่อยของjavax.mail.internet.MimeMessageส่วนใหญ่จะใช้
ในการสร้างข้อความคุณต้องส่งผ่านวัตถุเซสชันในตัวสร้างคลาส MimeMessage ตัวอย่างเช่น:
MimeMessage message=new MimeMessage(session);
เมื่อสร้างวัตถุข้อความแล้วเราจำเป็นต้องจัดเก็บข้อมูลไว้ในนั้น คลาสข้อความใช้อินเทอร์เฟซ javax.mail.Part ในขณะที่ javax.mail.internet MimeMessage ใช้ javax.mail.internet.MimePart คุณสามารถใช้ message.setContent () หรือ mimeMessage.setText () เพื่อจัดเก็บเนื้อหา
วิธีที่ใช้กันทั่วไปของคลาส MimeMessage คือ
วิธี คำอธิบาย โมฆะสาธารณะ setFrom (ที่อยู่ที่อยู่) ใช้เพื่อตั้งค่าฟิลด์จากส่วนหัว โมฆะสาธารณะ addRecipients (ประเภท Message.RecipientType ที่อยู่สตริง) ใช้เพื่อเพิ่มที่อยู่ที่ระบุให้กับประเภทผู้รับ โมฆะสาธารณะ setSubject (หัวข้อสตริง) ใช้เพื่อตั้งค่าฟิลด์ส่วนหัวของหัวเรื่อง โมฆะสาธารณะ setText (ข้อความสตริง) ใช้เพื่อตั้งค่าข้อความเป็นเนื้อหาข้อความโดยใช้ประเภทข้อความ / MIME ธรรมดา
ชั้นที่อยู่
ตอนนี้เรามีวัตถุเซสชันและข้อความ (พร้อมเนื้อหาที่เก็บไว้ในนั้น) เราจำเป็นต้องจัดการจดหมายโดยใช้วัตถุที่อยู่
แอดเดรสเป็นคลาสนามธรรม ดังนั้นคลาสย่อยของjavax.mail.internetส่วนใหญ่จะใช้คลาสInternetAddress
สามารถสร้างที่อยู่ได้โดยเพียงแค่ส่งที่อยู่อีเมล:
Address address = new InternetAddress("[email protected]");
อีกวิธีหนึ่งในการสร้างที่อยู่คือการส่งชื่อพร้อมกับที่อยู่อีเมล:
Address address = new InternetAddress("[email protected]", Manisha);
คุณยังสามารถตั้งค่าฟิลด์ถึง, จาก, CC, BCC ดังต่อไปนี้
message.setFrom(address)
message.addRecipient (ประเภทที่อยู่)
ประเภทแอดเดรสที่กำหนดไว้ล่วงหน้าสามประเภทคืออ็อบเจ็กต์ที่มีค่าเหล่านี้:
Message.RecipientType.TO
Message.RecipientType.CC
Message.RecipientType.BCC
คลาส Authenticator
คลาส Authenticator แสดงถึงอ็อบเจ็กต์ที่รู้วิธีรับการพิสูจน์ตัวตนสำหรับการเชื่อมต่อเครือข่าย โดยปกติแล้วจะดำเนินการโดยแจ้งให้ผู้ใช้ทราบข้อมูล
Authenticatorเป็นคลาสนามธรรม คุณสร้างคลาสย่อยPasswordAuthenticationโดยส่งชื่อผู้ใช้และรหัสผ่านไปยังตัวสร้าง
คุณต้องลงทะเบียน Authenticator กับ Session เมื่อคุณสร้างวัตถุเซสชัน
ต่อไปนี้เป็นตัวอย่างของการใช้Authenticator :
Properties props = new Properties();
//Override props with any customized data
PasswordAuthentication auth = new PasswordAuthentication("manisha", "pswrd")
Session session = Session.getDefaultInstance(props, auth);
ชั้นขนส่ง
คลาสการขนส่งใช้เป็นกลไกการส่งข้อความ โดยปกติคลาสนี้จะใช้โปรโตคอล SMTP เพื่อส่งข้อความ
มันเป็นชั้นนามธรรม
คุณสามารถใช้เวอร์ชันเริ่มต้นของคลาสได้โดยเรียกใช้วิธีการส่งแบบคงที่() :
Transport.send(message);
อีกวิธีหนึ่งในการส่งข้อความคือรับอินสแตนซ์เฉพาะจากเซสชันสำหรับโปรโตคอลของคุณส่งชื่อผู้ใช้และรหัสผ่าน (เว้นว่างหากไม่จำเป็น) ส่งข้อความและปิดการเชื่อมต่อ:
message.saveChanges(); // implicit with send() //Get transport for session Transport transport = session.getTransport("smtp"); //Connect transport.connect(host, username, password); //repeat if necessary transport.sendMessage(message, message.getAllRecipients()); //Done, close the connection transport.close();
คลาสร้านค้า
คลาสนามธรรมที่จำลองที่เก็บข้อความและโปรโตคอลการเข้าถึงสำหรับจัดเก็บและเรียกค้นข้อความ คลาสย่อยให้การใช้งานจริง Storeขยายคลาสบริการซึ่งมีวิธีการทั่วไปมากมายในการตั้งชื่อร้านค้าการเชื่อมต่อกับร้านค้าและการฟังเหตุการณ์การเชื่อมต่อ
ไคลเอนต์สามารถเข้าถึง Message Store ได้โดยการรับ Store object ที่ใช้โปรโตคอลการเข้าถึงฐานข้อมูล ที่เก็บข้อความส่วนใหญ่ต้องการให้ผู้ใช้ได้รับการพิสูจน์ตัวตนก่อนจึงจะอนุญาตให้เข้าถึงได้ วิธีการเชื่อมต่อดำเนินการรับรองความถูกต้องนั้น
Store store = session.getStore("pop3");
store.connect(host, username, password);
คลาสโฟลเดอร์
Folderคือคลาสนามธรรมที่แสดงถึงโฟลเดอร์สำหรับข้อความเมล คลาสย่อยใช้โฟลเดอร์เฉพาะโปรโตคอล โฟลเดอร์สามารถมีโฟลเดอร์ย่อยได้เช่นเดียวกับข้อความดังนั้นจึงมีโครงสร้างแบบลำดับชั้น
หลังจากเชื่อมต่อกับ Store แล้วคุณจะได้รับโฟลเดอร์ซึ่งต้องเปิดก่อนจึงจะสามารถอ่านข้อความจากมันได้
Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
Message message[] = folder.getMessages();
getFolder (ชื่อ String)วิธีการสำหรับวัตถุโฟลเดอร์กลับโฟลเดอร์ย่อยชื่อ ปิดการเชื่อมต่อทั้ง Store และ Folder เมื่ออ่านเมลเสร็จแล้ว
เราสามารถดูความสัมพันธ์ของ Store และ Folder ได้ตามภาพด้านล่าง:

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