Javamail API ใช้คลาส Javax.mail.message เพื่อแสดงข้อความ คลาสข้อความเป็นคลาสที่เป็นนามธรรมดังนั้นเราจำเป็นต้องใช้คลาส subclass javax.mail.internet.mimemessage เพื่อสร้างวัตถุอินสแตนซ์ของคลาสข้อความ หากเราสร้างข้อความง่าย ๆ คลาส MimeMessage สามารถตอบสนองความต้องการของเราได้ อย่างไรก็ตามหากเราจำเป็นต้องสร้างอีเมลที่ซับซ้อนที่มีทรัพยากรหรือไฟล์แนบที่ฝังอยู่เราจำเป็นต้องใช้คลาสเช่น mimeMessage, javax.mail.internet.mimebodypart และ javax.mail.internet.mimeMultipart ใน Javamail API
1. คลาส mimeMessage แสดงถึงอีเมลทั้งหมด
2. คลาส mimebodypart แสดงถึงข้อความ MIME ของอีเมล
3. คลาส MimemUltipart แสดงถึงข้อความ MIME รวมที่ประกอบด้วยข้อความ MIME หลายข้อความ
ความสัมพันธ์ในการทำงานของคลาสทั้งสามนี้แสดงในรูปด้านล่าง:
แม้ว่านักพัฒนาแอปพลิเคชันมักจะต้องใช้สามคลาสหลัก: mimeMessage, mimebodypart และ mimemultipart เมื่อสร้างเนื้อหาอีเมลโดยใช้ Javamailapi แต่ก็จำเป็นต้องเข้าใจความสัมพันธ์ในชั้นเรียนของพวกเขา รูปต่อไปนี้แสดงรายการความสัมพันธ์การสืบทอดและวิธีการทั่วไปของทั้งสามคลาสนี้
ถัดไปใช้คลาส javax.mail.internet.mimemessage เพื่อสร้างข้อความง่าย ๆ
นำเข้า java.util.date; นำเข้า java.util.properties; นำเข้า Javax.mail.message; นำเข้า Javax.mail.session; นำเข้า Javax.mail.internet.internetaddress; นำเข้า Javax.mail.internet.mimeSyage; args) โยนข้อยกเว้น {สตริงจาก = "[email protected]"; String to = "[email protected]"; String subject = "test"; สตริงตัว = "ทดสอบ !!!"; // สร้างเซสชันอินสแตนซ์ออบเจ็กต์เซสชันเซสชัน = session.getDefaultInstance (คุณสมบัติใหม่ ()); // สร้างอินสแตนซ์อินสแตนซ์ mimeMessage msg = new mimeMessage (เซสชัน); // ตั้งค่าผู้ส่ง msg.setFrom (ใหม่ InternetAddress (จาก)); // ตั้งค่าผู้รับ msg.setRecipients (message.recipientType.to, internetaddress.parse (ถึง)); // ตั้งค่าวันที่ส่ง MSG.SetSentDate (วันที่ใหม่ ()); // ตั้งค่าอีเมลหัวเรื่อง msg.setsubject (หัวเรื่อง); // ตั้งค่าเนื้อหาอีเมลของเนื้อหาข้อความธรรมดา msg.settext (body); // บันทึกและสร้างเนื้อหาอีเมลสุดท้าย msg.savechanges (); // เขียนเนื้อหาของวัตถุ mimeMessage ไปยังไฟล์ msg.writeto (ใหม่ fileOutputStream ("c: //test.eml")); -เราใช้ไคลเอนต์อีเมล (โดยใช้ Foxmail ที่นี่) เพื่อเปิดไฟล์ test.eml ภายใต้ไดรฟ์ C และคุณสามารถดูข้อมูลต่อไปนี้ซึ่งระบุว่าอีเมลของเราถูกสร้างขึ้นสำเร็จ
นี่คือคำอธิบายสั้น ๆ ของบางชั้นเรียนที่ปรากฏด้านบน
1. คลาส MIMEMESSAGE: ข้างต้นแนะนำว่า MIMEMESSAGE เป็นคลาสการใช้งานที่เป็นรูปธรรมของคลาสข้อความซึ่งใช้เพื่อสร้างวัตถุอินสแตนซ์ของคลาสข้อความ ที่นี่ตัวสร้างผ่านวัตถุเซสชันเป็นพารามิเตอร์
2. คลาสเซสชัน: วัตถุนี้ใช้เพื่อรวบรวมข้อมูลการเชื่อมต่อเครือข่ายระหว่างไคลเอนต์และเซิร์ฟเวอร์เมลและกำหนดข้อมูลสภาพแวดล้อมที่จำเป็นในการกำหนดโปรแกรมอีเมลทั้งหมด ข้อมูลนี้ถูกเก็บไว้ในวัตถุเซสชันเป็นแอตทริบิวต์ของวัตถุเซสชัน วัตถุเซสชันใช้วัตถุ java.util.properties เพื่อรับเซิร์ฟเวอร์เมลชื่อผู้ใช้ข้อมูลรหัสผ่านและข้อมูลที่ใช้ร่วมกันซึ่งแอปพลิเคชันทั้งหมดจำเป็นต้องใช้ เนื่องจากตัวสร้างของคลาสเซสชันเป็นส่วนตัวเราจึงใช้วิธีการคงที่โรงงานของ getDefaultInstance () ที่จัดทำโดยคลาสเซสชันเพื่อรับวัตถุเซสชันเริ่มต้น;
3. คลาส Properties: คลาสนี้แสดงถึงชุดคุณสมบัติแบบถาวรซึ่งใช้ในการจัดเก็บข้อมูลของคู่ค่าคีย์เป็นพารามิเตอร์เพื่อสร้างวัตถุเซสชัน ที่นี่ชุดว่างถูกสร้างขึ้นเป็นพารามิเตอร์
4. คลาส InternetAddress: คลาสนี้เป็นคลาสย่อยของคลาสที่อยู่คลาสนามธรรมซึ่งใช้เพื่อสร้างที่อยู่อีเมล
5. คลาสผู้รับ: คลาสนี้เป็นคลาสภายในของคลาสข้อความ คลาสนี้มี 3 ตัวแปรคงที่ เพื่อแสดงถึงผู้รับ CC แสดงถึงผู้ส่ง CC (ผู้รับรู้ว่าผู้ส่ง CC) และ BCC แสดงถึงผู้ส่งความลับของผู้ส่ง (ผู้รับไม่ทราบผู้ส่งความลับของผู้ส่ง)
อีเมลข้างต้นมีข้อความง่ายๆเท่านั้น บางครั้งเราจำเป็นต้องใช้ไฟล์ HTML เพื่อเสริมสร้างเนื้อหาอีเมลของเราเช่นการใช้แท็ก HTML เพื่อพิมพ์เนื้อหาอีเมลและใช้แท็ก HTML เพื่อแนะนำรูปภาพหรือเสียงบางส่วนในร่างกายอีเมล รหัสต่อไปนี้สร้างอีเมลที่มีรูปแบบ HTML
นำเข้า java.util.date; นำเข้า java.util.properties; นำเข้า Javax.mail.message; นำเข้า Javax.mail.session; นำเข้า Javax.mail.internet.internetaddress; นำเข้า Javax.mail.internet.mimemesage; หลัก (สตริง [] args) โยนข้อยกเว้น {สตริงจาก = "[email protected]"; String to = "[email protected]"; String subject = "test"; String Body = "<H4> ยินดีต้อนรับสู่การอ่านอีเมลนี้ </h4>"; // สร้างเซสชันอินสแตนซ์ออบเจ็กต์เซสชันเซสชัน = session.getDefaultInstance (คุณสมบัติใหม่ ()); // สร้างอินสแตนซ์อินสแตนซ์ mimeMessage msg = new mimeMessage (เซสชัน); // ตั้งค่าผู้ส่ง msg.setFrom (ใหม่ InternetAddress (จาก)); // ตั้งค่าผู้รับ msg.setRecipients (message.recipientType.to, internetaddress.parse (ถึง)); // ตั้งค่าวันที่ส่ง MSG.SetSentDate (วันที่ใหม่ ()); // ตั้งค่า MAIL หัวเรื่อง msg.setsubject (หัวเรื่อง); // ตั้งค่า HTML Format Email Body Body.setContent (Body, "ข้อความ/html; charset = gb2312"); // บันทึกและสร้างเนื้อหาเมลสุดท้าย msg.savechanges (); // เขียนเนื้อหาของวัตถุ mimeMessage ไปยังไฟล์ msg.writeto (ใหม่ fileOutputStream ("c: //test.eml")); -เราจะใช้ foxmail เพื่อเปิด test.eml และหน้าจอต่อไปนี้
ความแตกต่างจากรหัสก่อนหน้าคือเมื่อเราตั้งค่าเนื้อหาอีเมลเราใช้เมธอด setContent แทนเมธอด SetText และระบุประเภท MIME ของร่างกายอีเมลเป็นข้อความ/HTML
ตอนนี้เราได้เรียนรู้ที่จะสร้างอีเมลด้วยแท็ก HTML แต่บางครั้งเราอาจต้องแทรกภาพบางส่วนลงในอีเมลเพื่อแสดงความหมายของเราอย่างสังหรณ์ใจมากขึ้น จากนั้นเราจำเป็นต้องใช้คลาส MimeMultipart และคลาส mimebodypart
นำเข้า Java.io.FileOutputStream; นำเข้า Java.util.properties; นำเข้า Javax.activation.datahandler; นำเข้า Javax.activation.filedatasource; นำเข้า Javax.mail.message นำเข้า Javax.mail.session; javax.mail.internet.mimemessage; นำเข้า Javax.mail.internet.mimemuLtipart; คลาสสาธารณะ PictureMessage {โมฆะคงที่สาธารณะหลัก (สตริง [] args) โยนข้อยกเว้น {สตริงจาก = "[email protected]"; // สตริงที่อยู่ของผู้รับหัวข้อ = "อีเมล html"; String body = "<a href = http: //www.cnblogs.com>" + "ยินดีต้อนรับสู่สวนบล็อก </a> </br>" + "<img src =/" c: //dog.jpg/ ">"; เซสชันเซสชัน = เซสชัน GetDefaultInstance (คุณสมบัติใหม่ ()); // สร้างวัตถุ mimeMessage และตั้งค่าฟิลด์ส่วนหัวข้อความต่างๆข้อความ mimeMessage = new mimeMessage (เซสชัน); Message.setFrom (InternetAddress ใหม่ (จาก)); message.setRecipients (message.recipientType.to, internetaddress.parse (ถึง)); message.setsubject (หัวเรื่อง); // สร้างวัตถุ mimemuLeipart ที่มีชนิดย่อย "เกี่ยวข้อง" mimemultipart multipart = new mimemultipart ("เกี่ยวข้อง"); /** สร้างวัตถุ mimebodypart ที่เป็นตัวแทนของร่างกาย HTML และเพิ่มลงในวัตถุ mimemultipart ที่สร้างขึ้นก่อนหน้านี้*/ mimebodypart htmlbodypart = new MimeBodyPart (); htmlbodypart.setContent (body, "text/html; charset = gb2312"); multipart.addbodypart (htmlbodypart); /** สร้างวัตถุ mimebodypart ที่แสดงถึงเนื้อหาของภาพและเพิ่มลงในวัตถุ mimeMultipart ที่สร้างขึ้นก่อนหน้านี้*/ mimebodypart gifbodypart = new MimeBodyPart (); FileDataSource FDS = New FileDataSource ("C: //dog.jpg"); gifbodypart.setFilename (fds.getName ()); gifbodypart.setDatahandler (ใหม่ Datahandler (FDS)); multipart.addbodypart (gifbodypart); /** ตั้งค่าวัตถุ MimemUltipart เป็นเนื้อหาของข้อความทั้งหมดให้ความสนใจกับการเรียกใช้วิธีการ SaveChanges สำหรับการอัปเดต*/ message.setContent (Multipart); message.savechanges (); // เขียนเนื้อหาของวัตถุ mimeMessage ไปยัง file message.writeto (ใหม่ fileOutputStream ("c: //picturemessage.eml")); -รหัสดูเหมือนจะซับซ้อนเล็กน้อย คุณสามารถดูแผนภาพความสัมพันธ์ของ mimemessage ที่กล่าวถึงข้างต้น, mimemuLeipart และ mimebodypart สิ่งนี้จะทำให้เข้าใจรหัสข้างต้นได้ง่ายขึ้น เราเปิด picturemessage.eml และดูข้อมูลต่อไปนี้ซึ่งแสดงให้เห็นว่าเราได้สร้างอีเมลด้วยรูปภาพสำเร็จและรูปภาพจะรวมอยู่ในอีเมลในรูปแบบของไฟล์แนบ
MIMEMULTIPART มีสองตัวสร้าง
Public Mimemultipart () Public MimeMultipart (สายย่อยสตริง)
อันแรกคือไม่มีพารามิเตอร์และวัตถุอินสแตนซ์เริ่มต้นมีประเภท MIME ผสม อันที่สองกำหนดประเภทเพื่อสร้างวัตถุอินสแตนซ์ของคลาส mimemultipart มีสามประเภทที่ใช้กันทั่วไป: ผสมเกี่ยวข้องและทางเลือก ความสัมพันธ์แบบผสมผสานของสามประเภทในละครใบ้มีดังนี้:
ตอนนี้เราใช้ความสัมพันธ์แบบผสมผสานที่แสดงด้านบนเพื่อสร้างข้อความด้วยไฟล์แนบและทรัพยากรที่ฝังตัวในร่างกาย
นำเข้า Java.io.FileOutputStream; นำเข้า Java.util.properties; นำเข้า Javax.activation.datahandler; นำเข้า Javax.activation.filedatasource; นำเข้า Javax.mail.message นำเข้า Javax.mail.session; javax.mail.internet.mimeMessage; นำเข้า Javax.mail.internet.mimeMultipart; คลาสสาธารณะที่ซับซ้อน {โมฆะคงที่สาธารณะหลัก (สตริง [] args) โยนข้อยกเว้น {เซสชัน = เซสชัน. getDefaultInstance (คุณสมบัติใหม่ (); ข้อความ mimemessage = createMessage (เซสชัน); message.writeto (ใหม่ fileOutputStream ("c: //complexmessage.eml")); } public Static mimeMessage createMessage (เซสชันเซสชัน) โยนข้อยกเว้น {สตริงจาก = "[email protected]"; // สตริงที่อยู่ผู้ส่งไปที่ = "[email protected]"; // สตริงที่อยู่ของผู้รับหัวข้อ = "อีเมล html"; // อีเมลหัวเรื่องสตริง = "<a href = http: //www.cnblogs.com>" + "ยินดีต้อนรับสู่บล็อกพาร์ค </a> </br>" + "<img src =/" c: //dog.jpg/ ">"; ข้อความ mimemessage = mememessage ใหม่ (เซสชัน); Message.setFrom (InternetAddress ใหม่ (จาก)); message.setRecipients (message.recipientType.to, internetaddress.parse (ถึง)); message.setsubject (หัวเรื่อง); // สร้างวัตถุ mimebodypart แต่ละรายการที่แสดงถึงเนื้อหาข้อความและสิ่งที่แนบมา mimebodypart contentPart = createContent (body, "c: //dog.jpg"); // ไฟล์แนบต่อไปนี้สามารถเป็นวิดีโอหรือเสียง mimebodypart attachpart1 = createattachment ("c: //music.mp3"); mimebodypart attachpart2 = createattachment ("c: //video.avi"); // สร้างวัตถุ mimemuLtipart สำหรับการรวมตัวข้อความและสิ่งที่แนบมา mimeMultipart allmultipart = new MimeMultipart ("Mixed"); allmultipart.addbodypart (ContentPart); allmultipart.addbodypart (attachpart1); allmultipart.addbodypart (attachpart2); // ตั้งค่าเนื้อหาอีเมลทั้งหมดเป็น message message messive Mimememultipart ขั้นสุดท้าย setContent (allmultipart); message.savechanges (); ส่งคืนข้อความ; } สาธารณะ mimebodypart createContent (สตริงตัว, ชื่อไฟล์สตริง) พ่นข้อยกเว้น { /** สร้างวัตถุ mimeMultipart ที่เป็นตัวแทนของข้อความ MIME รวมและวัตถุ mimebodypart ที่วัตถุ mimeMultipart ถูกบันทึก* / mimebodypart mimemultipart contentMultipart = new mimemultipart ("เกี่ยวข้อง"); /** สร้างวัตถุ mimebodypart เพื่อบันทึกตัว HTML และบันทึกลงใน mimemultipart*/ mimebodypart htmlbodypart = mimebodypart ใหม่ (); htmlbodypart.setContent (body, "text/html; charset = gb2312"); contentMultipart.addbodypart (htmlbodypart); /** สร้างวัตถุ mimebodypart เพื่อบันทึกรูปภาพและบันทึกลงใน mimeMultipart*/ mimebodypart gifbodypart = mimebodypart ใหม่ (); FileDataSource FDS = ใหม่ FileDataSource (ชื่อไฟล์); gifbodypart.setDatahandler (ใหม่ Datahandler (FDS)); contentMultipart.addbodypart (gifbodypart); // บันทึกวัตถุ mimemultipart ไปยัง mimebodypart object contentPart.setContent (ContentMultipart); ส่งคืน ContentPart; } สาธารณะ mimebodypart createattachment (ชื่อไฟล์สตริง) พ่นข้อยกเว้น {// สร้างวัตถุ mimebodypart ที่บันทึกไฟล์แนบและเพิ่มเนื้อหาไฟล์แนบและข้อมูลที่สอดคล้องกัน FileDataSource FDS = ใหม่ FileDataSource (ชื่อไฟล์); attachpart.setDatahandler (ใหม่ Datahandler (FDS)); attachpart.setFilename (fds.getName ()); return attachpart; -เปิดไฟล์ emplexmessage.eml และคุณสามารถดูเนื้อหาต่อไปนี้:
ตอนนี้เราได้เรียนรู้วิธีสร้างอีเมลข้อความธรรมดาอีเมลที่มีรูปแบบ HTML และอีเมลที่มีรูปภาพและไฟล์แนบที่ฝังอยู่ บทความถัดไปจะแนะนำวิธีการส่งอีเมล Javamail เริ่มต้นใช้งานบทความที่สามส่งอีเมล
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น