JavaMail API - คู่มือฉบับย่อ
JavaMail API จัดเตรียมเฟรมเวิร์กที่ไม่ขึ้นกับแพลตฟอร์มและไม่ขึ้นกับโปรโตคอลเพื่อสร้างแอปพลิเคชันเมลและการส่งข้อความ JavaMail API จัดเตรียมชุดของคลาสนามธรรมที่กำหนดอ็อบเจ็กต์ที่ประกอบด้วยระบบเมล เป็นแพ็คเกจเสริม (ส่วนขยายมาตรฐาน) สำหรับการอ่านเขียนและส่งข้อความอิเล็กทรอนิกส์
JavaMail จัดเตรียมอิลิเมนต์ที่ใช้ในการสร้างอินเตอร์เฟสไปยังระบบการส่งข้อความรวมถึงส่วนประกอบของระบบและส่วนต่อประสาน แม้ว่าข้อกำหนดนี้ไม่ได้กำหนดการใช้งานเฉพาะ แต่ JavaMail มีคลาสต่างๆที่ใช้มาตรฐานการส่งข้อความทางอินเทอร์เน็ต RFC822 และ MIME คลาสเหล่านี้จัดส่งเป็นส่วนหนึ่งของแพ็กเกจคลาส JavaMail
ต่อไปนี้เป็นโปรโตคอลบางส่วนที่รองรับใน JavaMail API:
SMTP: อักษรย่อของ Simple Mail Transfer Protocol. มีกลไกในการส่งอีเมล
POP: อักษรย่อของ Post Office Protocol. POP เป็นกลไกที่คนส่วนใหญ่บนอินเทอร์เน็ตใช้เพื่อรับอีเมล กำหนดการรองรับกล่องจดหมายเดียวสำหรับผู้ใช้แต่ละคน RFC 1939 กำหนดโปรโตคอลนี้
IMAP: อักษรย่อของ Internet Message Access Protocol. เป็นโปรโตคอลขั้นสูงสำหรับการรับข้อความ ให้การสนับสนุนกล่องจดหมายหลายกล่องสำหรับผู้ใช้แต่ละคนนอกจากนี้ผู้ใช้หลายคนสามารถแชร์กล่องจดหมายได้ ถูกกำหนดไว้ใน RFC 2060
MIME: อักษรย่อของ Multipurpose Internet Mail Extensions. . ไม่ใช่โปรโตคอลการโอนอีเมล แต่จะกำหนดเนื้อหาของสิ่งที่ถ่ายโอน: รูปแบบของข้อความไฟล์แนบและอื่น ๆ มีเอกสารต่างๆมากมายที่มีผลที่นี่: RFC 822, RFC 2045, RFC 2046 และ RFC 2047 ในฐานะผู้ใช้ JavaMail API โดยปกติคุณไม่จำเป็นต้องกังวลเกี่ยวกับรูปแบบเหล่านี้ อย่างไรก็ตามรูปแบบเหล่านี้มีอยู่และถูกใช้โดยโปรแกรมของคุณ
NNTP and Others: มีโปรโตคอลมากมายที่จัดหาโดยผู้ให้บริการบุคคลที่สาม บางส่วน ได้แก่ Network News Transfer Protocol (NNTP), Secure Multipurpose Internet Mail Extensions (S / MIME) เป็นต้น
รายละเอียดเหล่านี้จะกล่าวถึงในบทต่อ ๆ ไป
สถาปัตยกรรม
ดังที่กล่าวไว้ข้างต้นแอปพลิเคชัน java ใช้ JavaMail API ในการเขียนส่งและรับอีเมลรูปต่อไปนี้แสดงให้เห็นถึงสถาปัตยกรรมของ JavaMail:
กลไกนามธรรมของ JavaMail API คล้ายกับ J2EE API อื่น ๆ เช่น JDBC, JNDI และ JMS ดังที่เห็นในแผนภาพสถาปัตยกรรมด้านบน JavaMail API แบ่งออกเป็นสองส่วนหลัก:
ส่วนที่ไม่ขึ้นกับแอปพลิเคชัน: ส่วนติดต่อการเขียนโปรแกรมแอปพลิเคชัน (API) ถูกใช้โดยส่วนประกอบของแอปพลิเคชันเพื่อส่งและรับข้อความเมลโดยไม่ขึ้นอยู่กับผู้ให้บริการหรือโปรโตคอล
ส่วนที่ขึ้นอยู่กับบริการ: อินเทอร์เฟซผู้ให้บริการ (SPI) พูดภาษาเฉพาะโปรโตคอลเช่น SMTP, POP, IMAP และ Network News Transfer Protocol (NNTP) ใช้เพื่อเชื่อมต่อผู้ให้บริการอีเมลเข้ากับแพลตฟอร์ม J2EE
ในการส่งอีเมลโดยใช้ Java Application ของคุณนั้นง่ายพอ แต่จะเริ่มต้นด้วยคุณควรมี JavaMail API และ Java Activation Framework (JAF) ติดตั้งบนเครื่องของคุณ
คุณจะต้องใช้ไฟล์ JavaBeans Activation Framework (JAF)ส่วนขยายที่มี แพ็คเกจjavax.activationเฉพาะเมื่อคุณไม่ได้ใช้ Java SE 6 หรือใหม่กว่า
คุณสามารถดาวน์โหลดJavaMailเวอร์ชันล่าสุด(เวอร์ชัน 1.5.0) ได้จากเว็บไซต์มาตรฐานของ Java
คุณสามารถดาวน์โหลดJAFเวอร์ชันล่าสุด(เวอร์ชัน 1.1.1) ได้จากเว็บไซต์มาตรฐานของ Java
ดาวน์โหลดและแตกไฟล์เหล่านี้ในไดเร็กทอรีระดับบนสุดที่สร้างขึ้นใหม่คุณจะพบไฟล์ jar จำนวนหนึ่งสำหรับทั้งสองแอปพลิเคชัน คุณต้องเพิ่มmail.jar และ activation.jar ไฟล์ใน CLASSPATH ของคุณ
เซิร์ฟเวอร์ SMTP
ในการส่งอีเมลคุณต้องมีเซิร์ฟเวอร์ SMTP ที่รับผิดชอบในการส่งอีเมล คุณสามารถใช้หนึ่งในเทคนิคต่อไปนี้เพื่อรับเซิร์ฟเวอร์ SMTP:
ติดตั้งและใช้เซิร์ฟเวอร์ SMTP เช่นเซิร์ฟเวอร์ Postfix (สำหรับ Ubuntu) เซิร์ฟเวอร์ Apache James (Java Apache Mail Enterprise Server) เป็นต้น (หรือ)
ใช้เซิร์ฟเวอร์ที่ให้บริการโดยผู้ให้บริการโฮสต์สำหรับเช่น SMTP ฟรีให้โดยJangoSMTPสถานที่relay.jangosmtp.net (หรือ)
ใช้เซิร์ฟเวอร์ SMTP ที่ บริษัท จัดหาให้เช่น gmail, yahoo เป็นต้น
ตัวอย่างในบทต่อ ๆ ไปเราได้ใช้เซิร์ฟเวอร์ JangoSMTP ฟรีเพื่อส่งอีเมล คุณสามารถสร้างบัญชีโดยไปที่ไซต์นี้และกำหนดค่าที่อยู่อีเมลของคุณ
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]> |
นี่คือตัวอย่างการส่งอีเมลง่ายๆ ที่นี่เราได้ใช้เซิร์ฟเวอร์ JangoSMTP โดยส่งอีเมลไปยังที่อยู่อีเมลปลายทางของเรา การตั้งค่ามีอธิบายไว้ในบทการตั้งค่าสภาพแวดล้อม
ในการส่งอีเมลตามขั้นตอนง่ายๆมีดังนี้:
รับเซสชัน
สร้างวัตถุ MimeMessage เริ่มต้นและตั้งค่าFrom, To, Subjectในข้อความ
ตั้งค่าข้อความจริงเป็น:
message.setText("your text goes here");
ส่งข้อความโดยใช้วัตถุขนส่ง
สร้างคลาส Java
สร้างไฟล์คลาส java SendEmailซึ่งมีเนื้อหาดังนี้:
package com.tutorialspoint;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class SendEmail {
public static void main(String[] args) {
// Recipient's email ID needs to be mentioned.
String to = "[email protected]";
// Sender's email ID needs to be mentioned
String from = "[email protected]";
final String username = "manishaspatil";//change accordingly
final String password = "******";//change accordingly
// Assuming you are sending email through relay.jangosmtp.net
String host = "relay.jangosmtp.net";
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", host);
props.put("mail.smtp.port", "25");
// Get the Session object.
Session session = Session.getInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
try {
// Create a default MimeMessage object.
Message message = new MimeMessage(session);
// Set From: header field of the header.
message.setFrom(new InternetAddress(from));
// Set To: header field of the header.
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(to));
// Set Subject: header field
message.setSubject("Testing Subject");
// Now set the actual message
message.setText("Hello, this is sample for to check send " +
"email using JavaMailAPI ");
// Send message
Transport.send(message);
System.out.println("Sent message successfully....");
} catch (MessagingException e) {
throw new RuntimeException(e);
}
}
}
เนื่องจากเราใช้เซิร์ฟเวอร์ SMTP ที่จัดหาโดยผู้ให้บริการโฮสต์ JangoSMTP เราจึงจำเป็นต้องตรวจสอบชื่อผู้ใช้และรหัสผ่าน javax.mail.PasswordAuthenticationชั้นถูกนำมาใช้ในการตรวจสอบรหัสผ่าน
รวบรวมและเรียกใช้
เมื่อชั้นเรียนของเราพร้อมแล้วให้เรารวบรวมคลาสข้างต้น ฉันได้บันทึกคลาส SendEmail.java ลงในไดเร็กทอรี:/home/manisha/JavaMailAPIExercise. เราต้องการ jars javax.mail.jarและactivation.jarใน classpath ดำเนินการคำสั่งด้านล่างเพื่อรวบรวมคลาส (ทั้งสองไหอยู่ในไดเร็กทอรี / home / manisha /) จากพรอมต์คำสั่ง:
javac -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: SendEmail.java
เมื่อคอมไพล์คลาสแล้วให้รันคำสั่งด้านล่างเพื่อรัน:
java -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: SendEmail
ตรวจสอบผลลัพธ์
คุณควรเห็นข้อความต่อไปนี้บนคอนโซลคำสั่ง:
Sent message successfully....
ในขณะที่ฉันส่งอีเมลไปยังที่อยู่ gmail ของฉันผ่าน JangoSMTP อีเมลต่อไปนี้จะได้รับในกล่องจดหมายของบัญชี gmail:
นี่คือตัวอย่างการส่งอีเมลพร้อมไฟล์แนบจากเครื่องของคุณ ไฟล์บนเครื่องท้องถิ่นคือfile.txtวางไว้ที่/ home / manisha / . ที่นี่เราได้ใช้เซิร์ฟเวอร์ JangoSMTP โดยส่งอีเมลไปยังที่อยู่อีเมลปลายทางของเรา การตั้งค่ามีอธิบายไว้ในบทการตั้งค่าสภาพแวดล้อม
ในการส่งอีเมลพร้อมรูปภาพแบบอินไลน์ให้ทำตามขั้นตอนดังนี้:
รับเซสชัน
สร้างวัตถุ MimeMessage เริ่มต้นและตั้งค่าFrom, To, Subjectในข้อความ
ตั้งค่าข้อความจริงดังนี้:
messageBodyPart.setText("This is message body");
สร้างวัตถุ MimeMultipart เพิ่ม messageBodyPart ด้านบนพร้อมชุดข้อความจริงลงในวัตถุหลายส่วนนี้
จากนั้นเพิ่มไฟล์แนบโดยสร้าง Datahandler ดังนี้:
messageBodyPart = new MimeBodyPart(); String filename = "/home/manisha/file.txt"; DataSource source = new FileDataSource(filename); messageBodyPart.setDataHandler(new DataHandler(source)); messageBodyPart.setFileName(filename); multipart.addBodyPart(messageBodyPart);
ถัดไปตั้งค่าหลายส่วนในข้อความดังนี้:
message.setContent(multipart);
ส่งข้อความโดยใช้วัตถุขนส่ง
สร้างคลาส Java
สร้างไฟล์คลาส java SendAttachmentInEmailซึ่งมีเนื้อหาดังนี้:
package com.tutorialspoint;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
public class SendAttachmentInEmail {
public static void main(String[] args) {
// Recipient's email ID needs to be mentioned.
String to = "[email protected]";
// Sender's email ID needs to be mentioned
String from = "[email protected]";
final String username = "manishaspatil";//change accordingly
final String password = "******";//change accordingly
// Assuming you are sending email through relay.jangosmtp.net
String host = "relay.jangosmtp.net";
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", host);
props.put("mail.smtp.port", "25");
// Get the Session object.
Session session = Session.getInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
try {
// Create a default MimeMessage object.
Message message = new MimeMessage(session);
// Set From: header field of the header.
message.setFrom(new InternetAddress(from));
// Set To: header field of the header.
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(to));
// Set Subject: header field
message.setSubject("Testing Subject");
// Create the message part
BodyPart messageBodyPart = new MimeBodyPart();
// Now set the actual message
messageBodyPart.setText("This is message body");
// Create a multipar message
Multipart multipart = new MimeMultipart();
// Set text message part
multipart.addBodyPart(messageBodyPart);
// Part two is attachment
messageBodyPart = new MimeBodyPart();
String filename = "/home/manisha/file.txt";
DataSource source = new FileDataSource(filename);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(filename);
multipart.addBodyPart(messageBodyPart);
// Send the complete message parts
message.setContent(multipart);
// Send message
Transport.send(message);
System.out.println("Sent message successfully....");
} catch (MessagingException e) {
throw new RuntimeException(e);
}
}
}
เนื่องจากเราใช้เซิร์ฟเวอร์ SMTP ที่จัดหาโดยผู้ให้บริการโฮสต์ JangoSMTP เราจึงจำเป็นต้องตรวจสอบชื่อผู้ใช้และรหัสผ่าน javax.mail.PasswordAuthenticationชั้นถูกนำมาใช้ในการตรวจสอบรหัสผ่าน
รวบรวมและเรียกใช้
เมื่อชั้นเรียนของเราพร้อมแล้วให้เรารวบรวมคลาสข้างต้น ฉันได้บันทึกคลาส SendAttachmentInEmail.java ลงในไดเร็กทอรี:/home/manisha/JavaMailAPIExercise. เราต้องการ jars javax.mail.jarและactivation.jarใน classpath ดำเนินการคำสั่งด้านล่างเพื่อรวบรวมคลาส (ทั้งสองไหอยู่ในไดเร็กทอรี / home / manisha /) จากพรอมต์คำสั่ง:
javac -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: SendAttachmentInEmail.java
เมื่อคอมไพล์คลาสแล้วให้รันคำสั่งด้านล่างเพื่อรัน:
java -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: SendAttachmentInEmail
ตรวจสอบผลลัพธ์
คุณควรเห็นข้อความต่อไปนี้บนคอนโซลคำสั่ง:
Sent message successfully....
ในขณะที่ฉันส่งอีเมลไปยังที่อยู่ gmail ของฉันผ่าน JangoSMTP อีเมลต่อไปนี้จะได้รับในกล่องจดหมายของบัญชี gmail:
นี่คือตัวอย่างการส่งอีเมล HTML จากเครื่องของคุณ ที่นี่เราได้ใช้เซิร์ฟเวอร์ JangoSMTP โดยส่งอีเมลไปยังที่อยู่อีเมลปลายทางของเรา การตั้งค่ามีอธิบายไว้ในบทการตั้งค่าสภาพแวดล้อม
ตัวอย่างนี้คล้ายกับการส่งอีเมลธรรมดามากยกเว้นว่าที่นี่เราใช้เมธอด setContent () เพื่อตั้งค่าเนื้อหาที่มีอาร์กิวเมนต์ที่สองคือ "text / html" เพื่อระบุว่าเนื้อหา HTML รวมอยู่ในข้อความ เมื่อใช้ตัวอย่างนี้คุณสามารถส่งเนื้อหา HTML ได้มากเท่าที่คุณต้องการ
ในการส่งอีเมลที่มีเนื้อหา HTML ให้ทำตามขั้นตอนดังนี้:
รับเซสชัน
สร้างวัตถุ MimeMessage เริ่มต้นและตั้งค่าFrom, To, Subjectในข้อความ
ตั้งค่าข้อความจริงโดยใช้ setContent () วิธีการดังต่อไปนี้:
message.setContent("<h1>This is actual message embedded in HTML tags</h1>", "text/html");
ส่งข้อความโดยใช้วัตถุขนส่ง
สร้างคลาส Java
สร้างไฟล์คลาส java SendHTMLEmailซึ่งมีเนื้อหาดังนี้:
package com.tutorialspoint;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class SendHTMLEmail {
public static void main(String[] args) {
// Recipient's email ID needs to be mentioned.
String to = "[email protected]";
// Sender's email ID needs to be mentioned
String from = "[email protected]";
final String username = "manishaspatil";//change accordingly
final String password = "******";//change accordingly
// Assuming you are sending email through relay.jangosmtp.net
String host = "relay.jangosmtp.net";
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", host);
props.put("mail.smtp.port", "25");
// Get the Session object.
Session session = Session.getInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
try {
// Create a default MimeMessage object.
Message message = new MimeMessage(session);
// Set From: header field of the header.
message.setFrom(new InternetAddress(from));
// Set To: header field of the header.
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(to));
// Set Subject: header field
message.setSubject("Testing Subject");
// Send the actual HTML message, as big as you like
message.setContent(
"<h1>This is actual message embedded in HTML tags</h1>",
"text/html");
// Send message
Transport.send(message);
System.out.println("Sent message successfully....");
} catch (MessagingException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
เนื่องจากเราใช้เซิร์ฟเวอร์ SMTP ที่จัดหาโดยผู้ให้บริการโฮสต์ JangoSMTP เราจึงจำเป็นต้องตรวจสอบชื่อผู้ใช้และรหัสผ่าน javax.mail.PasswordAuthenticationชั้นถูกนำมาใช้ในการตรวจสอบรหัสผ่าน
รวบรวมและเรียกใช้
เมื่อชั้นเรียนของเราพร้อมแล้วให้เรารวบรวมคลาสข้างต้น ฉันได้บันทึกคลาส SendHTMLEmail.java ลงในไดเร็กทอรี:/home/manisha/JavaMailAPIExercise. เราต้องการ jars javax.mail.jarและactivation.jarใน classpath ดำเนินการคำสั่งด้านล่างเพื่อรวบรวมคลาส (ทั้งสองไหอยู่ในไดเร็กทอรี / home / manisha /) จากพรอมต์คำสั่ง:
javac -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: SendHTMLEmail.java
เมื่อคอมไพล์คลาสแล้วให้รันคำสั่งด้านล่างเพื่อรัน:
java -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: SendHTMLEmail
ตรวจสอบผลลัพธ์
คุณควรเห็นข้อความต่อไปนี้บนคอนโซลคำสั่ง:
Sent message successfully....
ในขณะที่ฉันส่งอีเมลไปยังที่อยู่ gmail ของฉันผ่าน JangoSMTP อีเมลต่อไปนี้จะได้รับในกล่องจดหมายของบัญชี gmail:
นี่คือตัวอย่างการส่งอีเมล HTML จากเครื่องของคุณด้วยภาพอินไลน์ ที่นี่เราได้ใช้เซิร์ฟเวอร์ JangoSMTP โดยส่งอีเมลไปยังที่อยู่อีเมลปลายทางของเรา การตั้งค่ามีอธิบายไว้ในบทการตั้งค่าสภาพแวดล้อม
ในการส่งอีเมลพร้อมรูปภาพแบบอินไลน์ให้ทำตามขั้นตอนดังนี้:
รับเซสชัน
สร้างวัตถุ MimeMessage เริ่มต้นและตั้งค่าFrom, To, Subjectในข้อความ
สร้างวัตถุ MimeMultipart
ในตัวอย่างของเราเราจะมีส่วน HTML และรูปภาพในอีเมล ก่อนอื่นให้สร้างเนื้อหา HTML และตั้งค่าในวัตถุหลายส่วนเป็น:
// first part (the html) BodyPart messageBodyPart = new MimeBodyPart(); String htmlText = "<H1>Hello</H1><img src=\"cid:image\">"; messageBodyPart.setContent(htmlText, "text/html"); // add it multipart.addBodyPart(messageBodyPart);
จากนั้นเพิ่มรูปภาพโดยสร้าง Datahandler ดังนี้:
// second part (the image) messageBodyPart = new MimeBodyPart(); DataSource fds = new FileDataSource( "/home/manisha/javamail-mini-logo.png"); messageBodyPart.setDataHandler(new DataHandler(fds)); messageBodyPart.setHeader("Content-ID", "<image>");
ถัดไปตั้งค่าหลายส่วนในข้อความดังนี้:
message.setContent(multipart);
ส่งข้อความโดยใช้วัตถุขนส่ง
สร้างคลาส Java
สร้างไฟล์คลาส java SendInlineImagesInEmailซึ่งมีเนื้อหาดังนี้:
package com.tutorialspoint;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
public class SendInlineImagesInEmail {
public static void main(String[] args) {
// Recipient's email ID needs to be mentioned.
String to = "[email protected]";
// Sender's email ID needs to be mentioned
String from = "[email protected]";
final String username = "manishaspatil";//change accordingly
final String password = "******";//change accordingly
// Assuming you are sending email through relay.jangosmtp.net
String host = "relay.jangosmtp.net";
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", host);
props.put("mail.smtp.port", "25");
Session session = Session.getInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
try {
// Create a default MimeMessage object.
Message message = new MimeMessage(session);
// Set From: header field of the header.
message.setFrom(new InternetAddress(from));
// Set To: header field of the header.
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(to));
// Set Subject: header field
message.setSubject("Testing Subject");
// This mail has 2 part, the BODY and the embedded image
MimeMultipart multipart = new MimeMultipart("related");
// first part (the html)
BodyPart messageBodyPart = new MimeBodyPart();
String htmlText = "<H1>Hello</H1><img src=\"cid:image\">";
messageBodyPart.setContent(htmlText, "text/html");
// add it
multipart.addBodyPart(messageBodyPart);
// second part (the image)
messageBodyPart = new MimeBodyPart();
DataSource fds = new FileDataSource(
"/home/manisha/javamail-mini-logo.png");
messageBodyPart.setDataHandler(new DataHandler(fds));
messageBodyPart.setHeader("Content-ID", "<image>");
// add image to the multipart
multipart.addBodyPart(messageBodyPart);
// put everything together
message.setContent(multipart);
// Send message
Transport.send(message);
System.out.println("Sent message successfully....");
} catch (MessagingException e) {
throw new RuntimeException(e);
}
}
}
เนื่องจากเราใช้เซิร์ฟเวอร์ SMTP ที่จัดหาโดยผู้ให้บริการโฮสต์ JangoSMTP เราจึงจำเป็นต้องตรวจสอบชื่อผู้ใช้และรหัสผ่าน javax.mail.PasswordAuthenticationชั้นถูกนำมาใช้ในการตรวจสอบรหัสผ่าน
รวบรวมและเรียกใช้
เมื่อชั้นเรียนของเราพร้อมแล้วให้เรารวบรวมคลาสข้างต้น ฉันได้บันทึกคลาส SendInlineImagesInEmail.java ลงในไดเร็กทอรี:/home/manisha/JavaMailAPIExercise. เราต้องการ jars javax.mail.jarและactivation.jarใน classpath ดำเนินการคำสั่งด้านล่างเพื่อรวบรวมคลาส (ทั้งสองไหอยู่ในไดเร็กทอรี / home / manisha /) จากพรอมต์คำสั่ง:
javac -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: SendInlineImagesInEmail.java
เมื่อคอมไพล์คลาสแล้วให้รันคำสั่งด้านล่างเพื่อรัน:
java -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: SendInlineImagesInEmail
ตรวจสอบผลลัพธ์
คุณควรเห็นข้อความต่อไปนี้บนคอนโซลคำสั่ง:
Sent message successfully....
ในขณะที่ฉันส่งอีเมลไปยังที่อยู่ gmail ของฉันผ่าน JangoSMTP อีเมลต่อไปนี้จะได้รับในกล่องจดหมายของบัญชี gmail:
มีสองด้านที่ต้องทำความเข้าใจก่อนดำเนินการในบทนี้ พวกเขาเป็นCheck และ Fetch.
Checkการส่งอีเมลใน JavaMail เป็นกระบวนการที่เราเปิดโฟลเดอร์ที่เกี่ยวข้องในกล่องจดหมายและรับแต่ละข้อความ ที่นี่เราจะตรวจสอบส่วนหัวของแต่ละข้อความเช่นจากถึงเรื่อง เนื้อหาไม่ได้อ่าน
Fetchการส่งอีเมลใน JavaMail เป็นกระบวนการที่เราเปิดโฟลเดอร์ที่เกี่ยวข้องในกล่องจดหมายและรับแต่ละข้อความ นอกจากส่วนหัวแล้วเรายังอ่านเนื้อหาโดยรับรู้ประเภทเนื้อหา
ในการตรวจสอบหรือดึงอีเมลโดยใช้ JavaMail API เราต้องใช้เซิร์ฟเวอร์ POP หรือ IMAP ในการตรวจสอบและดึงอีเมลจำเป็นต้องมีชั้นโฟลเดอร์และร้านค้า ที่นี่เราได้ใช้เซิร์ฟเวอร์ POP3 ของ GMAIL (pop.gmail.com) ในบทนี้จะเรียนรู้วิธีตรวจสอบอีเมลโดยใช้ JavaMail API การดึงข้อมูลจะครอบคลุมในบทต่อ ๆ ไป ตรวจสอบอีเมล:
รับเซสชัน
สร้างวัตถุ pop3 Store และเชื่อมต่อกับเซิร์ฟเวอร์ป๊อป
สร้างวัตถุโฟลเดอร์ เปิดโฟลเดอร์ที่เหมาะสมในกล่องจดหมายของคุณ
รับข้อความของคุณ
ปิด Store และ Folder วัตถุ
สร้างคลาส Java
สร้างไฟล์คลาส java CheckingMailsซึ่งมีเนื้อหาดังนี้:
package com.tutorialspoint;
import java.util.Properties;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.Session;
import javax.mail.Store;
public class CheckingMails {
public static void check(String host, String storeType, String user,
String password)
{
try {
//create properties field
Properties properties = new Properties();
properties.put("mail.pop3.host", host);
properties.put("mail.pop3.port", "995");
properties.put("mail.pop3.starttls.enable", "true");
Session emailSession = Session.getDefaultInstance(properties);
//create the POP3 store object and connect with the pop server
Store store = emailSession.getStore("pop3s");
store.connect(host, user, password);
//create the folder object and open it
Folder emailFolder = store.getFolder("INBOX");
emailFolder.open(Folder.READ_ONLY);
// retrieve the messages from the folder in an array and print it
Message[] messages = emailFolder.getMessages();
System.out.println("messages.length---" + messages.length);
for (int i = 0, n = messages.length; i < n; i++) {
Message message = messages[i];
System.out.println("---------------------------------");
System.out.println("Email Number " + (i + 1));
System.out.println("Subject: " + message.getSubject());
System.out.println("From: " + message.getFrom()[0]);
System.out.println("Text: " + message.getContent().toString());
}
//close the store and folder objects
emailFolder.close(false);
store.close();
} catch (NoSuchProviderException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String host = "pop.gmail.com";// change accordingly
String mailStoreType = "pop3";
String username = "[email protected]";// change accordingly
String password = "*****";// change accordingly
check(host, mailStoreType, username, password);
}
}
รวบรวมและเรียกใช้
เมื่อชั้นเรียนของเราพร้อมแล้วให้เรารวบรวมคลาสข้างต้น ฉันได้บันทึกคลาส CheckingMails.java ลงในไดเร็กทอรี:/home/manisha/JavaMailAPIExercise. เราต้องการ jars javax.mail.jarและactivation.jarใน classpath ดำเนินการคำสั่งด้านล่างเพื่อรวบรวมคลาส (ทั้งสองไหอยู่ในไดเร็กทอรี / home / manisha /) จากพรอมต์คำสั่ง:
javac -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: CheckingMails.java
เมื่อคอมไพล์คลาสแล้วให้รันคำสั่งด้านล่างเพื่อรัน:
java -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: CheckingMails
ตรวจสอบผลลัพธ์
คุณควรเห็นข้อความต่อไปนี้บนคอนโซลคำสั่ง:
messages.length---4
---------------------------------
Email Number 1
Subject: Test Mail--Fetch
From: <[email protected]>
Text: javax.mail.internet.MimeMultipart@327a5b7f
---------------------------------
Email Number 2
Subject: testing ----checking simple email
From: <[email protected]>
Text: javax.mail.internet.MimeMultipart@7f0d08bc
---------------------------------
Email Number 3
Subject: Email with attachment
From: <[email protected]>
Text: javax.mail.internet.MimeMultipart@30b8afce
---------------------------------
Email Number 4
Subject: Email with Inline image
From: <[email protected]>
Text: javax.mail.internet.MimeMultipart@2d1e165f
ที่นี่เราได้พิมพ์จำนวนข้อความในกล่องจดหมายซึ่งเป็น 4 ในกรณีนี้ นอกจากนี้เรายังได้พิมพ์หัวเรื่องจากที่อยู่และข้อความสำหรับแต่ละข้อความอีเมล
ในบทที่แล้วเราได้เรียนรู้วิธีตรวจสอบอีเมล ตอนนี้ให้เราดูวิธีดึงอีเมลแต่ละฉบับและอ่านเนื้อหา ให้เราเขียนคลาส JavaFetchingEmail ซึ่งจะอ่านอีเมลประเภทต่อไปนี้:
อีเมลธรรมดา
อีเมลพร้อมไฟล์แนบ
ส่งอีเมลพร้อมรูปภาพแบบอินไลน์
ขั้นตอนพื้นฐานตามในโค้ดมีดังนี้:
รับวัตถุเซสชัน
สร้างออบเจ็กต์ที่เก็บ POP3 และเชื่อมต่อกับร้านค้า
สร้างวัตถุโฟลเดอร์และเปิดโฟลเดอร์ที่เหมาะสมในกล่องจดหมายของคุณ
ดึงข้อความ
ปิดโฟลเดอร์และจัดเก็บวัตถุตามลำดับ
สร้างคลาส Java
สร้างไฟล์คลาส java FetchingEmailซึ่งมีเนื้อหาดังต่อไปนี้:
package com.tutorialspoint;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Date;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.NoSuchProviderException;
import javax.mail.Part;
import javax.mail.Session;
import javax.mail.Store;
public class FetchingEmail {
public static void fetch(String pop3Host, String storeType, String user,
String password) {
try {
// create properties field
Properties properties = new Properties();
properties.put("mail.store.protocol", "pop3");
properties.put("mail.pop3.host", pop3Host);
properties.put("mail.pop3.port", "995");
properties.put("mail.pop3.starttls.enable", "true");
Session emailSession = Session.getDefaultInstance(properties);
// emailSession.setDebug(true);
// create the POP3 store object and connect with the pop server
Store store = emailSession.getStore("pop3s");
store.connect(pop3Host, user, password);
// create the folder object and open it
Folder emailFolder = store.getFolder("INBOX");
emailFolder.open(Folder.READ_ONLY);
BufferedReader reader = new BufferedReader(new InputStreamReader(
System.in));
// retrieve the messages from the folder in an array and print it
Message[] messages = emailFolder.getMessages();
System.out.println("messages.length---" + messages.length);
for (int i = 0; i < messages.length; i++) {
Message message = messages[i];
System.out.println("---------------------------------");
writePart(message);
String line = reader.readLine();
if ("YES".equals(line)) {
message.writeTo(System.out);
} else if ("QUIT".equals(line)) {
break;
}
}
// close the store and folder objects
emailFolder.close(false);
store.close();
} catch (NoSuchProviderException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String host = "pop.gmail.com";// change accordingly
String mailStoreType = "pop3";
String username =
"[email protected]";// change accordingly
String password = "*****";// change accordingly
//Call method fetch
fetch(host, mailStoreType, username, password);
}
/*
* This method checks for content-type
* based on which, it processes and
* fetches the content of the message
*/
public static void writePart(Part p) throws Exception {
if (p instanceof Message)
//Call methos writeEnvelope
writeEnvelope((Message) p);
System.out.println("----------------------------");
System.out.println("CONTENT-TYPE: " + p.getContentType());
//check if the content is plain text
if (p.isMimeType("text/plain")) {
System.out.println("This is plain text");
System.out.println("---------------------------");
System.out.println((String) p.getContent());
}
//check if the content has attachment
else if (p.isMimeType("multipart/*")) {
System.out.println("This is a Multipart");
System.out.println("---------------------------");
Multipart mp = (Multipart) p.getContent();
int count = mp.getCount();
for (int i = 0; i < count; i++)
writePart(mp.getBodyPart(i));
}
//check if the content is a nested message
else if (p.isMimeType("message/rfc822")) {
System.out.println("This is a Nested Message");
System.out.println("---------------------------");
writePart((Part) p.getContent());
}
//check if the content is an inline image
else if (p.isMimeType("image/jpeg")) {
System.out.println("--------> image/jpeg");
Object o = p.getContent();
InputStream x = (InputStream) o;
// Construct the required byte array
System.out.println("x.length = " + x.available());
int i = 0;
byte[] bArray = new byte[x.available()];
while ((i = (int) ((InputStream) x).available()) > 0) {
int result = (int) (((InputStream) x).read(bArray));
if (result == -1)
break;
}
FileOutputStream f2 = new FileOutputStream("/tmp/image.jpg");
f2.write(bArray);
}
else if (p.getContentType().contains("image/")) {
System.out.println("content type" + p.getContentType());
File f = new File("image" + new Date().getTime() + ".jpg");
DataOutputStream output = new DataOutputStream(
new BufferedOutputStream(new FileOutputStream(f)));
com.sun.mail.util.BASE64DecoderStream test =
(com.sun.mail.util.BASE64DecoderStream) p
.getContent();
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = test.read(buffer)) != -1) {
output.write(buffer, 0, bytesRead);
}
}
else {
Object o = p.getContent();
if (o instanceof String) {
System.out.println("This is a string");
System.out.println("---------------------------");
System.out.println((String) o);
}
else if (o instanceof InputStream) {
System.out.println("This is just an input stream");
System.out.println("---------------------------");
InputStream is = (InputStream) o;
is = (InputStream) o;
int c;
while ((c = is.read()) != -1)
System.out.write(c);
}
else {
System.out.println("This is an unknown type");
System.out.println("---------------------------");
System.out.println(o.toString());
}
}
}
/*
* This method would print FROM,TO and SUBJECT of the message
*/
public static void writeEnvelope(Message m) throws Exception {
System.out.println("This is the message envelope");
System.out.println("---------------------------");
Address[] a;
// FROM
if ((a = m.getFrom()) != null) {
for (int j = 0; j < a.length; j++)
System.out.println("FROM: " + a[j].toString());
}
// TO
if ((a = m.getRecipients(Message.RecipientType.TO)) != null) {
for (int j = 0; j < a.length; j++)
System.out.println("TO: " + a[j].toString());
}
// SUBJECT
if (m.getSubject() != null)
System.out.println("SUBJECT: " + m.getSubject());
}
}
คุณสามารถตั้งค่าการดีบักได้โดยยกเลิกการใส่เครื่องหมายคำสั่ง emailSession.setDebug (true);
รวบรวมและเรียกใช้
เมื่อชั้นเรียนของเราพร้อมแล้วให้เรารวบรวมคลาสข้างต้น ฉันได้บันทึกคลาส FetchingEmail.java ลงในไดเร็กทอรี:/home/manisha/JavaMailAPIExercise. เราต้องการ jars javax.mail.jarและactivation.jarใน classpath ดำเนินการคำสั่งด้านล่างเพื่อรวบรวมคลาส (ทั้งสองไหอยู่ในไดเร็กทอรี / home / manisha /) จากพรอมต์คำสั่ง:
javac -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: FetchingEmail.java
เมื่อคอมไพล์คลาสแล้วให้รันคำสั่งด้านล่างเพื่อรัน:
java -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: FetchingEmail
ตรวจสอบผลลัพธ์
คุณควรเห็นข้อความต่อไปนี้บนคอนโซลคำสั่ง:
messages.length---3
---------------------------------
This is the message envelope
---------------------------
FROM: XYZ <[email protected]>
TO: ABC <[email protected]>
SUBJECT: Simple Message
----------------------------
CONTENT-TYPE: multipart/alternative; boundary=047d7b343d6ad3e4ea04e8ec6579
This is a Multipart
---------------------------
----------------------------
CONTENT-TYPE: text/plain; charset=ISO-8859-1
This is plain text
---------------------------
Hi am a simple message string....
--
Regards
xyz
This is the message envelope
---------------------------
FROM: XYZ <[email protected]>
TO: ABC <[email protected]>
SUBJECT: Attachement
----------------------------
CONTENT-TYPE: multipart/mixed; boundary=047d7b343d6a99180904e8ec6751
This is a Multipart
---------------------------
----------------------------
CONTENT-TYPE: text/plain; charset=ISO-8859-1
This is plain text
---------------------------
Hi I've an attachment.Please check
--
Regards
XYZ
----------------------------
CONTENT-TYPE: application/octet-stream; name=sample_attachement
This is just an input stream
---------------------------
Submit your Tutorials, White Papers and Articles into our Tutorials Directory. This is a tutorials database where we are keeping all the tutorials shared by the internet community for the benefit of others.
This is the message envelope
---------------------------
FROM: XYZ <[email protected]>
TO: ABC <[email protected]>
SUBJECT: Inline Image
----------------------------
CONTENT-TYPE: multipart/related; boundary=f46d04182582be803504e8ece94b
This is a Multipart
---------------------------
----------------------------
CONTENT-TYPE: text/plain; charset=ISO-8859-1
This is plain text
---------------------------
Hi I've an inline image
[image: Inline image 3]
--
Regards
XYZ
----------------------------
CONTENT-TYPE: image/png; name="javamail-mini-logo.png"
content typeimage/png; name="javamail-mini-logo.png"
คุณจะเห็นว่ามีอีเมลสามฉบับในกล่องจดหมายของเรา ขั้นแรกให้ส่งจดหมายธรรมดาที่มีข้อความว่า "สวัสดีสตริงข้อความธรรมดา .... " เมล์ฉบับที่สองมีไฟล์แนบ เนื้อหาของไฟล์แนบจะพิมพ์ตามที่แสดงด้านบน เมล์ฉบับที่สามมีภาพอินไลน์
เราจะปรับเปลี่ยน CheckingMails.java ของเราจากบทตรวจสอบอีเมล เนื้อหามีดังต่อไปนี้:
package com.tutorialspoint;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Store;
public class CheckingMails {
public static void check(String host, String storeType, String user,
String password)
{
try {
// create properties field
Properties properties = new Properties();
properties.put("mail.pop3s.host", host);
properties.put("mail.pop3s.port", "995");
properties.put("mail.pop3s.starttls.enable", "true");
// Setup authentication, get session
Session emailSession = Session.getInstance(properties,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(
"[email protected]", "manisha123");
}
});
// emailSession.setDebug(true);
// create the POP3 store object and connect with the pop server
Store store = emailSession.getStore("pop3s");
store.connect();
// create the folder object and open it
Folder emailFolder = store.getFolder("INBOX");
emailFolder.open(Folder.READ_ONLY);
// retrieve the messages from the folder in an array and print it
Message[] messages = emailFolder.getMessages();
System.out.println("messages.length---" + messages.length);
for (int i = 0, n = messages.length; i < n; i++) {
Message message = messages[i];
System.out.println("---------------------------------");
System.out.println("Email Number " + (i + 1));
System.out.println("Subject: " + message.getSubject());
System.out.println("From: " + message.getFrom()[0]);
System.out.println("Text: " + message.getContent().toString());
}
// close the store and folder objects
emailFolder.close(false);
store.close();
} catch (NoSuchProviderException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String host = "pop.gmail.com";// change accordingly
String mailStoreType = "pop3";
String username = "[email protected]";// change accordingly
String password = "*****";// change accordingly
check(host, mailStoreType, username, password);
}
}
คุณสามารถตั้งค่าการดีบักได้โดยยกเลิกการใส่เครื่องหมายคำสั่ง emailSession.setDebug (true);
รวบรวมและเรียกใช้
เมื่อชั้นเรียนของเราพร้อมแล้วให้เรารวบรวมคลาสข้างต้น ฉันได้บันทึกคลาส CheckingMails.java ลงในไดเร็กทอรี:/home/manisha/JavaMailAPIExercise. เราต้องการ jars javax.mail.jarและactivation.jarใน classpath ดำเนินการคำสั่งด้านล่างเพื่อรวบรวมคลาส (ทั้งสองไหอยู่ในไดเร็กทอรี / home / manisha /) จากพรอมต์คำสั่ง:
javac -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: CheckingMails.java
เมื่อคอมไพล์คลาสแล้วให้รันคำสั่งด้านล่างเพื่อรัน:
java -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: CheckingMails
ตรวจสอบผลลัพธ์
คุณสามารถเห็นข้อความที่คล้ายกันดังต่อไปนี้บนคอนโซลคำสั่ง:
messages.length---3
---------------------------------
Email Number 1
Subject: Today is a nice day
From: XYZ <[email protected]>
Text: javax.mail.internet.MimeMultipart@45f676cb
---------------------------------
Email Number 2
Subject: hiiii....
From: XYZ <[email protected]>
Text: javax.mail.internet.MimeMultipart@37f12d4f
---------------------------------
Email Number 3
Subject: helloo
From: XYZ <[email protected]>
Text: javax.mail.internet.MimeMultipart@3ad5ba3a
ในบทนี้เราจะดูวิธีตอบกลับอีเมลโดยใช้ JavaMail API ขั้นตอนพื้นฐานในโปรแกรมด้านล่างมีดังนี้:
รับวัตถุเซสชันพร้อมรายละเอียดเซิร์ฟเวอร์ POP และ SMTP ในคุณสมบัติ เราต้องการรายละเอียด POP เพื่อดึงข้อความและรายละเอียด SMTP เพื่อส่งข้อความ
สร้างออบเจ็กต์ที่เก็บ POP3 และเชื่อมต่อกับร้านค้า
สร้างวัตถุโฟลเดอร์และเปิดโฟลเดอร์ที่เหมาะสมในกล่องจดหมายของคุณ
ดึงข้อความ
อ่านข้อความซ้ำแล้วพิมพ์ "Y" หรือ "y" หากต้องการตอบกลับ
รับข้อมูลทั้งหมด (ถึงจากหัวเรื่องเนื้อหา) ของข้อความ
สร้างข้อความตอบกลับโดยใช้เมธอด Message.reply () วิธีนี้กำหนดค่าข้อความใหม่ด้วยผู้รับและหัวเรื่องที่เหมาะสม เมธอดใช้พารามิเตอร์บูลีนเพื่อระบุว่าจะตอบกลับเฉพาะผู้ส่ง (เท็จ) หรือตอบกลับทั้งหมด (จริง)
ตั้งค่าจากข้อความและตอบกลับในข้อความและส่งผ่านอินสแตนซ์ของวัตถุการขนส่ง
ปิดการขนส่งโฟลเดอร์และจัดเก็บวัตถุตามลำดับ
ที่นี่เราได้ใช้เซิร์ฟเวอร์ JangoSMTP โดยส่งอีเมลไปยังที่อยู่อีเมลปลายทางของเรา การตั้งค่ามีอธิบายไว้ใน บทการ ตั้งค่าสภาพแวดล้อม
สร้างคลาส Java
สร้างไฟล์คลาส java ReplyToEmailซึ่งมีเนื้อหาดังนี้:
package com.tutorialspoint;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Date;
import java.util.Properties;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class ReplyToEmail {
public static void main(String args[])
{
Date date = null;
Properties properties = new Properties();
properties.put("mail.store.protocol", "pop3");
properties.put("mail.pop3s.host", "pop.gmail.com");
properties.put("mail.pop3s.port", "995");
properties.put("mail.pop3.starttls.enable", "true");
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.starttls.enable", "true");
properties.put("mail.smtp.host", "relay.jangosmtp.net");
properties.put("mail.smtp.port", "25");
Session session = Session.getDefaultInstance(properties);
// session.setDebug(true);
try
{
// Get a Store object and connect to the current host
Store store = session.getStore("pop3s");
store.connect("pop.gmail.com", "[email protected]",
"*****");//change the user and password accordingly
Folder folder = store.getFolder("inbox");
if (!folder.exists()) {
System.out.println("inbox not found");
System.exit(0);
}
folder.open(Folder.READ_ONLY);
BufferedReader reader = new BufferedReader(new InputStreamReader(
System.in));
Message[] messages = folder.getMessages();
if (messages.length != 0) {
for (int i = 0, n = messages.length; i < n; i++) {
Message message = messages[i];
date = message.getSentDate();
// Get all the information from the message
String from = InternetAddress.toString(message.getFrom());
if (from != null) {
System.out.println("From: " + from);
}
String replyTo = InternetAddress.toString(message
.getReplyTo());
if (replyTo != null) {
System.out.println("Reply-to: " + replyTo);
}
String to = InternetAddress.toString(message
.getRecipients(Message.RecipientType.TO));
if (to != null) {
System.out.println("To: " + to);
}
String subject = message.getSubject();
if (subject != null) {
System.out.println("Subject: " + subject);
}
Date sent = message.getSentDate();
if (sent != null) {
System.out.println("Sent: " + sent);
}
System.out.print("Do you want to reply [y/n] : ");
String ans = reader.readLine();
if ("Y".equals(ans) || "y".equals(ans)) {
Message replyMessage = new MimeMessage(session);
replyMessage = (MimeMessage) message.reply(false);
replyMessage.setFrom(new InternetAddress(to));
replyMessage.setText("Thanks");
replyMessage.setReplyTo(message.getReplyTo());
// Send the message by authenticating the SMTP server
// Create a Transport instance and call the sendMessage
Transport t = session.getTransport("smtp");
try {
//connect to the SMTP server using transport instance
//change the user and password accordingly
t.connect("abc", "****");
t.sendMessage(replyMessage,
replyMessage.getAllRecipients());
} finally {
t.close();
}
System.out.println("message replied successfully ....");
// close the store and folder objects
folder.close(false);
store.close();
} else if ("n".equals(ans)) {
break;
}
}//end of for loop
} else {
System.out.println("There is no msg....");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
คุณสามารถตั้งค่าการดีบักได้โดยยกเลิกการใส่เครื่องหมายคำสั่ง session.setDebug (true);
รวบรวมและเรียกใช้
เมื่อชั้นเรียนของเราพร้อมแล้วให้เรารวบรวมคลาสข้างต้น ฉันได้บันทึกคลาส ReplyToEmail.java ลงในไดเร็กทอรี:/home/manisha/JavaMailAPIExercise. เราต้องการ jars javax.mail.jarและactivation.jarใน classpath ดำเนินการคำสั่งด้านล่างเพื่อรวบรวมคลาส (ทั้งสองไหอยู่ในไดเร็กทอรี / home / manisha /) จากพรอมต์คำสั่ง:
javac -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: ReplyToEmail.java
เมื่อคอมไพล์คลาสแล้วให้รันคำสั่งต่อไปนี้เพื่อรัน:
java -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: ReplyToEmail
ตรวจสอบผลลัพธ์
คุณควรเห็นข้อความต่อไปนี้บนคอนโซลคำสั่ง:
From: ABC <[email protected]>
Reply-to: [email protected]
To: XYZ <[email protected]>
Subject: Hi today is a nice day
Sent: Thu Oct 17 15:58:37 IST 2013
Do you want to reply [y/n] : y
message replied successfully ....
ตรวจสอบกล่องจดหมายที่ส่งอีเมล ในกรณีของเราข้อความที่ได้รับมีลักษณะดังนี้:
ในบทนี้เราจะดูวิธีส่งต่ออีเมลโดยใช้ JavaMail API ขั้นตอนพื้นฐานในโปรแกรมด้านล่างมีดังนี้:
รับวัตถุเซสชันพร้อมรายละเอียดเซิร์ฟเวอร์ POP และ SMTP ในคุณสมบัติ เราต้องการรายละเอียด POP เพื่อดึงข้อความและรายละเอียด SMTP เพื่อส่งข้อความ
สร้างออบเจ็กต์ที่เก็บ POP3 และเชื่อมต่อกับร้านค้า
สร้างวัตถุโฟลเดอร์และเปิดโฟลเดอร์ที่เหมาะสมในกล่องจดหมายของคุณ
ดึงข้อความ
ทำซ้ำผ่านข้อความและพิมพ์ "Y" หรือ "y" หากคุณต้องการส่งต่อ
รับข้อมูลทั้งหมด (ถึงจากหัวเรื่องเนื้อหา) ของข้อความ
สร้างข้อความส่งต่อโดยทำงานกับส่วนต่างๆที่ประกอบเป็นข้อความ ส่วนแรกจะเป็นข้อความของข้อความส่วนที่สองคือข้อความที่จะส่งต่อ รวมทั้งสองเป็นหลายส่วน จากนั้นคุณเพิ่มหลายส่วนในข้อความที่ถูกต้องและส่งไป
ปิดการขนส่งโฟลเดอร์และจัดเก็บวัตถุตามลำดับ
ที่นี่เราได้ใช้เซิร์ฟเวอร์ JangoSMTP โดยส่งอีเมลไปยังที่อยู่อีเมลปลายทางของเรา การตั้งค่ามีอธิบายไว้ใน บทการ ตั้งค่าสภาพแวดล้อม
สร้างคลาส Java
สร้างไฟล์คลาส java ForwardEmailซึ่งมีเนื้อหาดังนี้:
package com.tutorialspoint;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Date;
import java.util.Properties;
import javax.mail.BodyPart;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
public class ForwardEmail {
public static void main(String[] args) {
Properties properties = new Properties();
properties.put("mail.store.protocol", "pop3");
properties.put("mail.pop3s.host", "pop.gmail.com");
properties.put("mail.pop3s.port", "995");
properties.put("mail.pop3.starttls.enable", "true");
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.host", "relay.jangosmtp.net");
properties.put("mail.smtp.port", "25");
Session session = Session.getDefaultInstance(properties);
try {
// session.setDebug(true);
// Get a Store object and connect to the current host
Store store = session.getStore("pop3s");
store.connect("pop.gmail.com", "[email protected]",
"*****");//change the user and password accordingly
// Create a Folder object and open the folder
Folder folder = store.getFolder("inbox");
folder.open(Folder.READ_ONLY);
BufferedReader reader = new BufferedReader(new InputStreamReader(
System.in));
Message[] messages = folder.getMessages();
if (messages.length != 0) {
for (int i = 0, n = messages.length; i < n; i++) {
Message message = messages[i];
// Get all the information from the message
String from = InternetAddress.toString(message.getFrom());
if (from != null) {
System.out.println("From: " + from);
}
String replyTo = InternetAddress.toString(message
.getReplyTo());
if (replyTo != null) {
System.out.println("Reply-to: " + replyTo);
}
String to = InternetAddress.toString(message
.getRecipients(Message.RecipientType.TO));
if (to != null) {
System.out.println("To: " + to);
}
String subject = message.getSubject();
if (subject != null) {
System.out.println("Subject: " + subject);
}
Date sent = message.getSentDate();
if (sent != null) {
System.out.println("Sent: " + sent);
}
System.out.print("Do you want to reply [y/n] : ");
String ans = reader.readLine();
if ("Y".equals(ans) || "y".equals(ans)) {
Message forward = new MimeMessage(session);
// Fill in header
forward.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(from));
forward.setSubject("Fwd: " + message.getSubject());
forward.setFrom(new InternetAddress(to));
// Create the message part
MimeBodyPart messageBodyPart = new MimeBodyPart();
// Create a multipart message
Multipart multipart = new MimeMultipart();
// set content
messageBodyPart.setContent(message, "message/rfc822");
// Add part to multi part
multipart.addBodyPart(messageBodyPart);
// Associate multi-part with message
forward.setContent(multipart);
forward.saveChanges();
// Send the message by authenticating the SMTP server
// Create a Transport instance and call the sendMessage
Transport t = session.getTransport("smtp");
try {
//connect to the SMTP server using transport instance
//change the user and password accordingly
t.connect("abc", "*****");
t.sendMessage(forward, forward.getAllRecipients());
} finally {
t.close();
}
System.out.println("message forwarded successfully....");
// close the store and folder objects
folder.close(false);
store.close();
}// end if
}// end for
}// end if
} catch (Exception e) {
e.printStackTrace();
}
}
}
คุณสามารถตั้งค่าการดีบักได้โดยยกเลิกการใส่เครื่องหมายคำสั่ง session.setDebug (true);
รวบรวมและเรียกใช้
เมื่อชั้นเรียนของเราพร้อมแล้วให้เรารวบรวมคลาสข้างต้น ฉันได้บันทึกคลาส ForwardEmail.java ลงในไดเร็กทอรี:/home/manisha/JavaMailAPIExercise. เราต้องการ jars javax.mail.jarและactivation.jarใน classpath ดำเนินการคำสั่งด้านล่างเพื่อรวบรวมคลาส (ทั้งสองไหอยู่ในไดเร็กทอรี / home / manisha /) จากพรอมต์คำสั่ง:
javac -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: ForwardEmail.java
เมื่อคอมไพล์คลาสแล้วให้รันคำสั่งต่อไปนี้เพื่อรัน:
java -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: ForwardEmail
ตรวจสอบผลลัพธ์
คุณควรเห็นข้อความต่อไปนี้บนคอนโซลคำสั่ง:
From: ABC <[email protected]>
Reply-to: [email protected]
To: XYZ <[email protected]>
Subject: Hi today is a nice day
Sent: Thu Oct 17 15:58:37 IST 2013
Do you want to reply [y/n] : y
message forwarded successfully....
ตรวจสอบกล่องจดหมายที่ส่งอีเมล ในกรณีของเราข้อความที่ส่งต่อจะมีลักษณะดังนี้:
ในบทนี้เราจะดูวิธีการลบอีเมลโดยใช้ JavaMail API การลบข้อความเกี่ยวข้องกับการทำงานกับธงที่เกี่ยวข้องกับข้อความ มีแฟล็กที่แตกต่างกันสำหรับสถานะที่แตกต่างกันบางระบบกำหนดและกำหนดโดยผู้ใช้ แฟล็กที่กำหนดไว้ล่วงหน้าถูกกำหนดไว้ในแฟล็กคลาสภายในแฟล็กและแสดงอยู่ด้านล่าง:
Flags.Flag.ANSWERED
Flags.Flag.DELETED
Flags.Flag.DRAFT
Flags.Flag.FLAGGED
Flags.Flag.RECENT
Flags.Flag.SEEN
Flags.Flag.USER
โปรโตคอล POP รองรับการลบข้อความเท่านั้น
ขั้นตอนพื้นฐานตามในโปรแกรมลบคือ:
รับวัตถุเซสชันพร้อมรายละเอียดเซิร์ฟเวอร์ POP และ SMTP ในคุณสมบัติ เราต้องการรายละเอียด POP เพื่อดึงข้อความและรายละเอียด SMTP เพื่อส่งข้อความ
สร้างออบเจ็กต์ที่เก็บ POP3 และเชื่อมต่อกับร้านค้า
สร้างวัตถุโฟลเดอร์และเปิดโฟลเดอร์ที่เหมาะสมในกล่องจดหมายของคุณในโหมด READ_WRITE
ดึงข้อความจากโฟลเดอร์กล่องขาเข้า
วนซ้ำข้อความและพิมพ์ "Y" หรือ "y" หากคุณต้องการลบข้อความโดยเรียกใช้เมธอด setFlag (Flags.Flag.DELETED, true) บนวัตถุข้อความ
ข้อความที่ทำเครื่องหมาย DELETED จะไม่ถูกลบจริงจนกว่าเราจะเรียกเมธอด expunge () บนอ็อบเจ็กต์โฟลเดอร์หรือปิดโฟลเดอร์โดยตั้งค่า expunge เป็น true
ปิด store object
สร้างคลาส Java
สร้างไฟล์คลาส java ForwardEmailซึ่งมีเนื้อหาดังนี้:
package com.tutorialspoint;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Properties;
import javax.mail.Flags;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.Session;
import javax.mail.Store;
public class DeleteEmail {
public static void delete(String pop3Host, String storeType, String user,
String password)
{
try
{
// get the session object
Properties properties = new Properties();
properties.put("mail.store.protocol", "pop3");
properties.put("mail.pop3s.host", pop3Host);
properties.put("mail.pop3s.port", "995");
properties.put("mail.pop3.starttls.enable", "true");
Session emailSession = Session.getDefaultInstance(properties);
// emailSession.setDebug(true);
// create the POP3 store object and connect with the pop server
Store store = emailSession.getStore("pop3s");
store.connect(pop3Host, user, password);
// create the folder object and open it
Folder emailFolder = store.getFolder("INBOX");
emailFolder.open(Folder.READ_WRITE);
BufferedReader reader = new BufferedReader(new InputStreamReader(
System.in));
// retrieve the messages from the folder in an array and print it
Message[] messages = emailFolder.getMessages();
System.out.println("messages.length---" + messages.length);
for (int i = 0; i < messages.length; i++) {
Message message = messages[i];
System.out.println("---------------------------------");
System.out.println("Email Number " + (i + 1));
System.out.println("Subject: " + message.getSubject());
System.out.println("From: " + message.getFrom()[0]);
String subject = message.getSubject();
System.out.print("Do you want to delete this message [y/n] ? ");
String ans = reader.readLine();
if ("Y".equals(ans) || "y".equals(ans)) {
// set the DELETE flag to true
message.setFlag(Flags.Flag.DELETED, true);
System.out.println("Marked DELETE for message: " + subject);
} else if ("n".equals(ans)) {
break;
}
}
// expunges the folder to remove messages which are marked deleted
emailFolder.close(true);
store.close();
} catch (NoSuchProviderException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
} catch (IOException io) {
io.printStackTrace();
}
}
public static void main(String[] args) {
String host = "pop.gmail.com";// change accordingly
String mailStoreType = "pop3";
String username = "[email protected]";// change accordingly
String password = "*****";// change accordingly
delete(host, mailStoreType, username, password);
}
}
คุณสามารถตั้งค่าการดีบักได้โดยยกเลิกการใส่เครื่องหมายคำสั่ง emailSession.setDebug (true);
รวบรวมและเรียกใช้
เมื่อชั้นเรียนของเราพร้อมแล้วให้เรารวบรวมคลาสข้างต้น ฉันได้บันทึกคลาส DeleteEmail.java ลงในไดเร็กทอรี:/home/manisha/JavaMailAPIExercise. เราต้องการ jars javax.mail.jarและactivation.jarใน classpath ดำเนินการคำสั่งด้านล่างเพื่อรวบรวมคลาส (ทั้งสองไหอยู่ในไดเร็กทอรี / home / manisha /) จากพรอมต์คำสั่ง:
javac -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: DeleteEmail.java
เมื่อคอมไพล์คลาสแล้วให้รันคำสั่งต่อไปนี้เพื่อรัน:
java -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: DeleteEmail
ตรวจสอบผลลัพธ์
คุณควรเห็นข้อความต่อไปนี้บนคอนโซลคำสั่ง:
messages.length---1
---------------------------------
Email Number 1
Subject: Testing
From: ABC <[email protected]>
Do you want to delete this message [y/n] ? y
Marked DELETE for message: Testing
ในทุกบทก่อนหน้านี้เราใช้เซิร์ฟเวอร์ JangoSMTP เพื่อส่งอีเมล ในบทนี้เราจะเรียนรู้เกี่ยวกับเซิร์ฟเวอร์ SMTP ที่ Gmail จัดหาให้ Gmail (อื่น ๆ ) เสนอการใช้เซิร์ฟเวอร์ SMTP สาธารณะโดยไม่เสียค่าใช้จ่าย
SMTP ของ Gmail รายละเอียดเซิร์ฟเวอร์สามารถพบได้ที่นี่ ดังที่คุณเห็นในรายละเอียดเราสามารถใช้การเชื่อมต่อ TLS หรือ SSL เพื่อส่งอีเมลผ่านเซิร์ฟเวอร์ SMTP ของ Gmail
ขั้นตอนในการส่งอีเมลโดยใช้เซิร์ฟเวอร์ SMTP ของ Gmail จะคล้ายกับที่อธิบายไว้ในบทการส่งอีเมลยกเว้นว่าเราจะเปลี่ยนเซิร์ฟเวอร์โฮสต์ ตามข้อกำหนดเบื้องต้นที่อยู่อีเมลของผู้ส่งควรเป็นบัญชี gmail ที่ใช้งานได้ ให้เราลองดูตัวอย่าง
สร้างคลาส Java
สร้างไฟล์ Java SendEmailUsingGMailSMTPซึ่งมีเนื้อหาดังต่อไปนี้:
package com.tutorialspoint;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class SendEmailUsingGMailSMTP {
public static void main(String[] args) {
// Recipient's email ID needs to be mentioned.
String to = "[email protected]";//change accordingly
// Sender's email ID needs to be mentioned
String from = "[email protected]";//change accordingly
final String username = "abc";//change accordingly
final String password = "*****";//change accordingly
// Assuming you are sending email through relay.jangosmtp.net
String host = "smtp.gmail.com";
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", host);
props.put("mail.smtp.port", "587");
// Get the Session object.
Session session = Session.getInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
try {
// Create a default MimeMessage object.
Message message = new MimeMessage(session);
// Set From: header field of the header.
message.setFrom(new InternetAddress(from));
// Set To: header field of the header.
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(to));
// Set Subject: header field
message.setSubject("Testing Subject");
// Now set the actual message
message.setText("Hello, this is sample for to check send "
+ "email using JavaMailAPI ");
// Send message
Transport.send(message);
System.out.println("Sent message successfully....");
} catch (MessagingException e) {
throw new RuntimeException(e);
}
}
}
นี่โฮสต์ถูกตั้งค่าเป็นsmtp.gmail.comและพอร์ตถูกตั้งค่าเป็น587 ที่นี่เราได้เปิดใช้งานการเชื่อมต่อ TLS
รวบรวมและเรียกใช้
เมื่อชั้นเรียนของเราพร้อมแล้วให้เรารวบรวมคลาสข้างต้น ฉันได้บันทึกคลาส SendEmailUsingGMailSMTP.java ลงในไดเร็กทอรี:/home/manisha/JavaMailAPIExercise. เราต้องการ jars javax.mail.jarและactivation.jarใน classpath ดำเนินการคำสั่งด้านล่างเพื่อรวบรวมคลาส (ทั้งสองไหอยู่ในไดเร็กทอรี / home / manisha /) จากพรอมต์คำสั่ง:
javac -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: SendEmailUsingGMailSMTP.java
เมื่อคอมไพล์คลาสแล้วให้รันคำสั่งด้านล่างเพื่อรัน:
java -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: SendEmailUsingGMailSMTP
ตรวจสอบผลลัพธ์
คุณควรเห็นข้อความต่อไปนี้บนคอนโซลคำสั่ง:
Sent message successfully....
จนถึงตอนนี้เราทำงานในบทก่อนหน้าของเราเป็นส่วนใหญ่กับโฟลเดอร์ INBOX นี่คือโฟลเดอร์เริ่มต้นที่เมลส่วนใหญ่อยู่ บางระบบอาจเรียกว่า INBOX และบางระบบอาจเรียกด้วยชื่ออื่น แต่คุณสามารถเข้าถึงได้จาก JavaMail API โดยใช้ชื่อ INBOX
JavaMail API แทนโฟลเดอร์เป็นอินสแตนซ์ของคลาส Abstract Folder:
public abstract class Folder extends Object
คลาสนี้ประกาศวิธีการขอโฟลเดอร์ที่ตั้งชื่อจากเซิร์ฟเวอร์ลบข้อความจากโฟลเดอร์ค้นหาข้อความเฉพาะในโฟลเดอร์แสดงรายการข้อความในโฟลเดอร์และอื่น ๆ
การเปิดโฟลเดอร์
เราไม่สามารถสร้างโฟลเดอร์โดยตรงเป็นตัวสร้างเฉพาะในโฟลเดอร์ชั้นการป้องกัน เราสามารถรับโฟลเดอร์ได้จาก:
เซสชัน
ร้านค้า
หรือโฟลเดอร์อื่น
คลาสข้างต้นทั้งหมดมีเมธอด getFolder () ที่คล้ายกันซึ่งมีลายเซ็นคล้ายกัน:
public abstract Folder getFolder(String name) throws MessagingException
วิธีการบางอย่างที่ช่วยในการรับอ็อบเจ็กต์Folderได้แก่ :
วิธี | คำอธิบาย |
---|---|
มีบูลีนอยู่ () | ตรวจสอบว่าโฟลเดอร์นั้นมีอยู่จริงหรือไม่ ใช้วิธีนี้ก่อนรับอ็อบเจกต์ Folder |
โมฆะนามธรรมเปิด (โหมด int) | เมื่อคุณได้รับโฟลเดอร์โฟลเดอร์จะปิด ใช้วิธีนี้เพื่อเปิด โหมดสามารถ Folder.READ_ONLY หรือ Folder.READ_WRITE |
บูลีนนามธรรมisOpen () | วิธีนี้จะคืนค่าจริงถ้าโฟลเดอร์เปิดอยู่เท็จถ้าปิด |
ปิดโมฆะนามธรรม(การขยายบูลีน) | ปิดโฟลเดอร์ ถ้าอาร์กิวเมนต์expungeเป็นจริงข้อความที่ถูกลบในโฟลเดอร์จะถูกลบออกจากไฟล์จริงบนเซิร์ฟเวอร์ ไม่เช่นนั้นข้อความเหล่านี้จะถูกทำเครื่องหมายว่าลบแล้วแต่ยังคงสามารถยกเลิกการลบข้อความได้ |
ข้อมูลโฟลเดอร์พื้นฐาน
ต่อไปนี้เป็นวิธีการบางอย่างในคลาสโฟลเดอร์ซึ่งส่งคืนข้อมูลพื้นฐานเกี่ยวกับโฟลเดอร์:
วิธี | คำอธิบาย |
---|---|
สตริงนามธรรมgetName () | ส่งคืนชื่อของโฟลเดอร์เช่น "TutorialsPoint Mail" |
สตริงนามธรรมgetFullName () | ส่งคืนชื่อลำดับชั้นที่สมบูรณ์จากรากเช่น "books / Manisha / TutorialsPoint Mail" |
ชื่อ URL getURLName () | ส่งคืน URLName ที่แสดงถึงโฟลเดอร์นี้ |
โฟลเดอร์นามธรรมgetParent () | ส่งคืนชื่อของโฟลเดอร์ที่มีโฟลเดอร์นี้คือโฟลเดอร์หลัก เช่น "Manisha" จากตัวอย่าง "TutorialsPoint Mail" ก่อนหน้านี้ |
getType int นามธรรม() | ส่งคืน int ที่ระบุว่าโฟลเดอร์สามารถมีข้อความและ / หรือโฟลเดอร์อื่น ๆ |
int getMode () | จะคืนค่าหนึ่งในสองค่าคงที่ชื่อ Folder.READ_ONLY หรือ Folder.READ_WRITE หรือ -1 เมื่อไม่รู้จักโหมด |
จัดเก็บgetStore () | ส่งคืนอ็อบเจ็กต์ Store ที่เรียกค้นโฟลเดอร์นี้ |
ถ่านนามธรรมgetSeparator () | ส่งคืนอักขระตัวคั่นที่แยกชื่อพา ธ ของโฟลเดอร์นี้ออกจากชื่อของโฟลเดอร์ย่อยทันที |
การจัดการโฟลเดอร์
ต่อไปนี้เป็นวิธีการบางอย่างที่ช่วยจัดการโฟลเดอร์:
วิธี | คำอธิบาย |
---|---|
สร้างบูลีนนามธรรม(ประเภท int) | สิ่งนี้จะสร้างโฟลเดอร์ใหม่ใน Store ของโฟลเดอร์นี้ ประเภทจะอยู่ที่ไหน: Folder.HOLDS_MESSAGES หรือ Folder.HOLDS_FOLDERS ผลตอบแทนที่แท้จริงถ้าโฟลเดอร์จะถูกสร้างขึ้นประสบความสำเร็จผลตอบแทนอื่น ๆที่เป็นเท็จ |
การลบบูลีนนามธรรม(เรียกคืนบูลีน) | การดำเนินการนี้จะลบโฟลเดอร์เฉพาะในกรณีที่ปิดโฟลเดอร์เท่านั้น มิฉะนั้นจะพ่นIllegalStateException ถ้าrecurseเป็นจริงแล้วโฟลเดอร์ย่อยจะถูกลบออก |
นามธรรมบูลrenameTo (ฉ Folder) | สิ่งนี้จะเปลี่ยนชื่อของโฟลเดอร์นี้ ต้องปิดโฟลเดอร์เพื่อเปลี่ยนชื่อ มิฉะนั้น IllegalStateException จะถูกโยนทิ้ง |
การจัดการข้อความในโฟลเดอร์
ต่อไปนี้เป็นวิธีการบางอย่างที่ช่วยจัดการข้อความในโฟลเดอร์:
วิธี | คำอธิบาย |
---|---|
โมฆะนามธรรมappendMessages (ข้อความ [] ข้อความ) | ตามความหมายของชื่อข้อความในอาร์เรย์จะอยู่ที่ท้ายโฟลเดอร์นี้ |
โมฆะcopyMessages (ข้อความ [] ข้อความ, โฟลเดอร์ปลายทาง) | ซึ่งจะคัดลอกข้อความจากโฟลเดอร์นี้ไปยังโฟลเดอร์ที่ระบุซึ่งกำหนดให้เป็นอาร์กิวเมนต์ |
ข้อความนามธรรม [] ล้าง () | หากต้องการลบข้อความออกจากโฟลเดอร์ให้ตั้งค่าแฟล็ก Flags.Flag.DELETED เป็น true หากต้องการลบข้อความที่ถูกลบออกจากโฟลเดอร์คุณต้องเรียกวิธีนี้ |
รายการเนื้อหาของโฟลเดอร์
มีสี่วิธีในการแสดงรายการโฟลเดอร์ที่โฟลเดอร์ประกอบด้วย:
วิธี | คำอธิบาย |
---|---|
โฟลเดอร์ [] รายการ () | สิ่งนี้ส่งคืนอาร์เรย์ที่แสดงรายการโฟลเดอร์ที่โฟลเดอร์นี้มี |
โฟลเดอร์ [] listSubscribed () | สิ่งนี้ส่งคืนอาร์เรย์ที่แสดงรายการโฟลเดอร์ที่สมัครสมาชิกทั้งหมดที่โฟลเดอร์นี้มีอยู่ |
โฟลเดอร์นามธรรม[] รายการ (รูปแบบสตริง) | ซึ่งคล้ายกับวิธีlist ()ยกเว้นว่าจะช่วยให้คุณระบุรูปแบบได้ รูปแบบเป็นสตริงที่ระบุชื่อของโฟลเดอร์ที่ตรงกัน |
โฟลเดอร์ [] listSubscribed (รูปแบบสตริง) | ซึ่งคล้ายกับเมธอด listSubscribed ()ยกเว้นว่าจะอนุญาตให้คุณระบุรูปแบบ รูปแบบเป็นสตริงที่ระบุชื่อของโฟลเดอร์ที่ตรงกัน |
กำลังตรวจสอบเมล
วิธี | คำอธิบาย |
---|---|
นามธรรม int getMessageCount () | วิธีนี้สามารถเรียกใช้ในโฟลเดอร์ที่เปิดหรือปิด อย่างไรก็ตามในกรณีของโฟลเดอร์ปิดวิธีนี้อาจ (หรืออาจไม่) คืนค่า -1 เพื่อระบุว่าจำนวนข้อความที่แน่นอนนั้นไม่สามารถใช้ได้อย่างง่ายดาย |
บูลีนนามธรรมhasNewMessages () | สิ่งนี้จะคืนค่าเป็นจริงหากมีการเพิ่มข้อความใหม่ในโฟลเดอร์ตั้งแต่เปิดครั้งล่าสุด |
int getNewMessageCount () | ส่งคืนจำนวนข้อความใหม่โดยตรวจสอบข้อความในโฟลเดอร์ที่ตั้งค่าสถานะ RECENT |
int getUnreadMessageCount () | สิ่งนี้สามารถเรียกใช้ได้ทั้งในโฟลเดอร์ที่เปิดหรือปิด อย่างไรก็ตามในกรณีของโฟลเดอร์ที่ปิดอาจส่งคืน -1 เพื่อแสดงว่าคำตอบที่แท้จริงจะแพงเกินกว่าจะได้รับ |
รับข้อความจากโฟลเดอร์
คลาสโฟลเดอร์มีสี่วิธีในการดึงข้อความจากโฟลเดอร์ที่เปิดอยู่:
วิธี | คำอธิบาย |
---|---|
ข้อความนามธรรมgetMessage (int messageNumber) | ส่งคืนข้อความที่ n ในโฟลเดอร์ ข้อความแรกในโฟลเดอร์คือหมายเลข 1 |
ข้อความ [] getMessages () | ส่งคืนอาร์เรย์ของวัตถุข้อความที่แสดงข้อความทั้งหมดในโฟลเดอร์นี้ |
ข้อความ [] getMessages (int start, int end) | สิ่งนี้จะส่งคืนอาร์เรย์ของวัตถุข้อความจากโฟลเดอร์โดยเริ่มต้นด้วย start และจบด้วย end, inclusive |
ข้อความ [] getMessages (int [] messageNumbers) | สิ่งนี้ส่งคืนอาร์เรย์ที่มีเฉพาะข้อความที่ระบุโดยตัวเลขในอาร์เรย์messageNumbers |
โมฆะการดึงข้อมูล (ข้อความ [] ข้อความ FetchProfile fp) | ดึงรายการที่ระบุไว้ใน FetchProfile สำหรับข้อความที่กำหนดไว้ล่วงหน้า อาร์กิวเมนต์ FetchProfile ระบุส่วนหัวในข้อความที่จะดึงข้อมูลล่วงหน้า |
กำลังค้นหาโฟลเดอร์
หากเซิร์ฟเวอร์รองรับการค้นหา (เช่นเดียวกับเซิร์ฟเวอร์ IMAP จำนวนมากและเซิร์ฟเวอร์ POP ส่วนใหญ่ไม่ทำ) คุณสามารถค้นหาโฟลเดอร์สำหรับข้อความที่ตรงตามเกณฑ์ที่กำหนดได้โดยง่าย เกณฑ์ถูกเข้ารหัสในวัตถุ SearchTerm ต่อไปนี้เป็นวิธีการค้นหาสองวิธี:
วิธี | คำอธิบาย |
---|---|
ข้อความ [] ค้นหา (คำค้นหา SearchTerm) | ค้นหาโฟลเดอร์นี้เพื่อหาข้อความที่ตรงกับเกณฑ์การค้นหาที่ระบุ ส่งคืนอาร์เรย์ที่มีข้อความที่ตรงกัน ส่งคืนอาร์เรย์ว่างหากไม่พบรายการที่ตรงกัน |
ข้อความ [] ค้นหา (คำค้นหาข้อความข้อความ []) | ค้นหาอาร์เรย์ของข้อความที่กำหนดสำหรับข้อความที่ตรงกับเกณฑ์การค้นหาที่ระบุ ส่งคืนอาร์เรย์ที่มีข้อความที่ตรงกัน ส่งคืนอาร์เรย์ว่างหากไม่พบรายการที่ตรงกัน วัตถุข้อความที่ระบุต้องเป็นของโฟลเดอร์นี้ |
ธง
การแก้ไขแฟล็กมีประโยชน์เมื่อคุณต้องการเปลี่ยนแฟล็กสำหรับชุดข้อความทั้งหมดในโฟลเดอร์ ต่อไปนี้เป็นวิธีการที่มีให้ในคลาสโฟลเดอร์:
วิธี | คำอธิบาย |
---|---|
เป็นโมฆะsetFlags (ข้อความ [] ข้อความแฟล็กค่าสถานะบูลีน) | ตั้งค่าแฟล็กที่ระบุบนข้อความที่ระบุในอาร์เรย์ |
เป็นโมฆะsetFlags (int เริ่มต้น int end แฟล็กแฟล็กค่าบูลีน) | ตั้งค่าแฟล็กที่ระบุบนข้อความที่มีหมายเลขตั้งแต่ต้นจนจบทั้งเริ่มต้นและสิ้นสุดรวม |
เป็นโมฆะsetFlags (int [] messageNumbers แฟล็กแฟล็กค่าบูลีน) | ตั้งค่าแฟล็กที่ระบุบนข้อความที่มีหมายเลขข้อความอยู่ในอาร์เรย์ |
ธงนามธรรมgetPermanentFlags () | ส่งคืนแฟล็กที่โฟลเดอร์นี้รองรับสำหรับข้อความทั้งหมด |
โควต้าใน JavaMail คือจำนวนที่ จำกัด หรือคงที่หรือจำนวนข้อความในที่เก็บอีเมล คำขอบริการเมลแต่ละรายการจะนับรวมในโควต้าการเรียกใช้ JavaMail API บริการอีเมลสามารถใช้เกณฑ์โควต้าต่อไปนี้:
ขนาดสูงสุดของข้อความเมลขาออกรวมถึงไฟล์แนบ
ขนาดสูงสุดของข้อความเมลขาเข้ารวมถึงไฟล์แนบ
ขนาดสูงสุดของข้อความเมื่อผู้ดูแลระบบเป็นผู้รับ
สำหรับการจัดการโควต้า JavaMail มีคลาสดังต่อไปนี้:
คลาส | คำอธิบาย |
---|---|
โควตาชั้นเรียนสาธารณะ | คลาสนี้แสดงถึงชุดโควต้าสำหรับโควต้ารูทที่กำหนด แต่ละโควต้ารูทมีชุดของทรัพยากรซึ่งแสดงโดยคลาส Quota.Resource ทรัพยากรแต่ละรายการมีชื่อ (เช่น "STORAGE") การใช้งานปัจจุบันและขีด จำกัด การใช้งาน นี้มีเพียงวิธีการหนึ่งsetResourceLimit (ชื่อ String จำกัด ยาว) |
โควต้าคลาสคงที่สาธารณะทรัพยากร | แสดงทรัพยากรแต่ละรายการในโควต้ารูท |
อินเทอร์เฟซสาธารณะ QuotaAwareStore | อินเทอร์เฟซที่ใช้งานโดยร้านค้าที่รองรับโควต้า getQuotaและsetQuotaวิธีการสนับสนุนรูปแบบโควต้าที่กำหนดโดยขยาย IMAP โควต้า GmailSSLStore, GmailStore, IMAPSSLStore, IMAPStoreเป็นคลาสการใช้งานที่รู้จักกันดีของอินเทอร์เฟซนี้ |
ให้เราดูและตัวอย่างในส่วนต่อไปนี้ซึ่งตรวจสอบชื่อพื้นที่จัดเก็บอีเมลขีด จำกัด และการใช้งาน
สร้างคลาส Java
สร้างไฟล์คลาส java QuotaExampleซึ่งมีเนื้อหาดังนี้:
package com.tutorialspoint;
import java.util.Properties;
import javax.mail.Quota;
import javax.mail.Session;
import javax.mail.Store;
import com.sun.mail.imap.IMAPStore;
public class QuotaExample
{
public static void main(String[] args)
{
try
{
Properties properties = new Properties();
properties.put("mail.store.protocol", "imaps");
properties.put("mail.imaps.port", "993");
properties.put("mail.imaps.starttls.enable", "true");
Session emailSession = Session.getDefaultInstance(properties);
// emailSession.setDebug(true);
// create the IMAP3 store object and connect with the pop server
Store store = emailSession.getStore("imaps");
//change the user and password accordingly
store.connect("imap.gmail.com", "[email protected]", "*****");
IMAPStore imapStore = (IMAPStore) store;
System.out.println("imapStore ---" + imapStore);
//get quota
Quota[] quotas = imapStore.getQuota("INBOX");
//Iterate through the Quotas
for (Quota quota : quotas) {
System.out.println(String.format("quotaRoot:'%s'",
quota.quotaRoot));
//Iterate through the Quota Resource
for (Quota.Resource resource : quota.resources) {
System.out.println(String.format(
"name:'%s', limit:'%s', usage:'%s'", resource.name,
resource.limit, resource.usage));
}
}
} catch (Exception e)
{
e.printStackTrace();
}
}
}
นี่คือการเชื่อมต่อกับบริการ gmail ผ่านเซิร์ฟเวอร์ IMAP (imap.gmail.com) เนื่องจาก IMAPStore ใช้ QuotaAwareStore เมื่อคุณได้รับ Store object แล้วให้ดึง Quota array มาวนซ้ำและพิมพ์ข้อมูลที่เกี่ยวข้อง
รวบรวมและเรียกใช้
เมื่อชั้นเรียนของเราพร้อมแล้วให้เรารวบรวมคลาสข้างต้น ฉันได้บันทึกคลาส QuotaExample.java ลงในไดเร็กทอรี:/home/manisha/JavaMailAPIExercise. เราต้องการ jars javax.mail.jarและactivation.jarใน classpath ดำเนินการคำสั่งด้านล่างเพื่อรวบรวมคลาส (ทั้งสองไหอยู่ในไดเร็กทอรี / home / manisha /) จากพรอมต์คำสั่ง:
javac -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: QuotaExample.java
เมื่อคอมไพล์คลาสแล้วให้รันคำสั่งด้านล่างเพื่อรัน:
java -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: QuotaExample
ตรวจสอบผลลัพธ์
คุณควรเห็นข้อความที่คล้ายกันบนคอนโซลคำสั่ง:
imapStore ---imaps://abc%[email protected]
quotaRoot:''
name:'STORAGE', limit:'15728640', usage:'513'
ข้อความสามารถตีกลับได้จากหลายสาเหตุ ปัญหานี้จะกล่าวถึงในเชิงลึกที่rfc1211 มีเพียงเซิร์ฟเวอร์เท่านั้นที่สามารถระบุการมีอยู่ของกล่องจดหมายหรือชื่อผู้ใช้เฉพาะได้ เมื่อเซิร์ฟเวอร์ตรวจพบข้อผิดพลาดเซิร์ฟเวอร์จะส่งคืนข้อความที่ระบุสาเหตุของความล้มเหลวไปยังผู้ส่งข้อความต้นฉบับ
มีมาตรฐานอินเทอร์เน็ตจำนวนมากที่ครอบคลุมการแจ้งเตือนสถานะการจัดส่ง แต่เซิร์ฟเวอร์จำนวนมากไม่รองรับมาตรฐานใหม่เหล่านี้แทนที่จะใช้เทคนิคเฉพาะกิจในการส่งคืนข้อความแสดงความล้มเหลวดังกล่าว ดังนั้นจึงเป็นเรื่องยากมากที่จะเชื่อมโยงข้อความตีกลับกับข้อความต้นฉบับที่ทำให้เกิดปัญหา
JavaMail มีการสนับสนุนสำหรับการแยกวิเคราะห์การแจ้งเตือนสถานะการจัดส่ง มีเทคนิคและการวิเคราะห์พฤติกรรมหลายประการสำหรับจัดการกับปัญหานี้ หนึ่งในเทคนิคคือ Variable Envelope Return Paths คุณสามารถกำหนดเส้นทางการส่งกลับในซองจดหมายดังที่แสดงในตัวอย่างด้านล่าง นี่คือที่อยู่สำหรับส่งอีเมลตีกลับ คุณอาจต้องการตั้งค่านี้เป็นที่อยู่ทั่วไปซึ่งแตกต่างจากส่วนหัว From: เพื่อให้คุณสามารถประมวลผลการตีกลับจากระยะไกลได้ ซึ่งทำได้โดยการตั้งค่าคุณสมบัติmail.smtp.fromใน JavaMail
สร้างคลาส Java
สร้างไฟล์คลาส java SendEmailซึ่งมีเนื้อหาดังนี้:
import java.util.Properties;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class SendEmail {
public static void main(String[] args) throws Exception {
String smtpServer = "smtp.gmail.com";
int port = 587;
final String userid = "youraddress";//change accordingly
final String password = "*****";//change accordingly
String contentType = "text/html";
String subject = "test: bounce an email to a different address " +
"from the sender";
String from = "[email protected]";
String to = "[email protected]";//some invalid address
String bounceAddr = "[email protected]";//change accordingly
String body = "Test: get message to bounce to a separate email address";
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", smtpServer);
props.put("mail.smtp.port", "587");
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.from", bounceAddr);
Session mailSession = Session.getInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(userid, password);
}
});
MimeMessage message = new MimeMessage(mailSession);
message.addFrom(InternetAddress.parse(from));
message.setRecipients(Message.RecipientType.TO, to);
message.setSubject(subject);
message.setContent(body, contentType);
Transport transport = mailSession.getTransport();
try {
System.out.println("Sending ....");
transport.connect(smtpServer, port, userid, password);
transport.sendMessage(message,
message.getRecipients(Message.RecipientType.TO));
System.out.println("Sending done ...");
} catch (Exception e) {
System.err.println("Error Sending: ");
e.printStackTrace();
}
transport.close();
}// end function main()
}
ที่นี่เราจะเห็นว่าคุณสมบัติmail.smtp.fromถูกตั้งค่าแตกต่างจากที่อยู่จาก
รวบรวมและเรียกใช้
เมื่อชั้นเรียนของเราพร้อมแล้วให้เรารวบรวมคลาสข้างต้น ฉันได้บันทึกคลาส SendEmail.java ลงในไดเร็กทอรี:/home/manisha/JavaMailAPIExercise. เราต้องการ jars javax.mail.jarและactivation.jarใน classpath ดำเนินการคำสั่งด้านล่างเพื่อรวบรวมคลาส (ทั้งสองไหอยู่ในไดเร็กทอรี / home / manisha /) จากพรอมต์คำสั่ง:
javac -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: SendEmail.java
เมื่อคอมไพล์คลาสแล้วให้รันคำสั่งด้านล่างเพื่อรัน:
java -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: SendEmail
ตรวจสอบผลลัพธ์
คุณควรเห็นข้อความต่อไปนี้บนคอนโซลคำสั่ง:
Sending ....
Sending done ...
SMTP เป็นคำย่อของ Simple Mail Transfer Protocol. เป็นมาตรฐานอินเทอร์เน็ตสำหรับการส่งจดหมายอิเล็กทรอนิกส์ (อีเมล) ผ่านเครือข่าย Internet Protocol (IP) SMTP ใช้พอร์ต TCP 25 การเชื่อมต่อ SMTP ที่ปลอดภัยโดย SSL เป็นที่รู้จักโดย SMTPS ชวเลขแม้ว่า SMTPS จะไม่ใช่โปรโตคอลที่ถูกต้อง
JavaMail API มีแพ็คเกจ com.sun.mail.smtpซึ่งทำหน้าที่เป็นผู้ให้บริการโปรโตคอล SMTP เพื่อเข้าถึงเซิร์ฟเวอร์ SMTP ตารางต่อไปนี้แสดงรายการคลาสที่รวมอยู่ในแพ็คเกจนี้:
คลาส | คำอธิบาย |
---|---|
SMTPMessage | คลาสนี้เป็นความเชี่ยวชาญเฉพาะของคลาส MimeMessage ที่ให้คุณระบุอ็อพชันและพารามิเตอร์ SMTP ต่างๆที่จะใช้เมื่อข้อความนี้ถูกส่งผ่าน SMTP |
SMTPSSL การขนส่ง | คลาสนี้ใช้คลาสนามธรรมการขนส่งโดยใช้ SMTP ผ่าน SSL สำหรับการส่งข้อความและการขนส่ง |
SMTP การขนส่ง | คลาสนี้ใช้คลาสนามธรรมการขนส่งโดยใช้ SMTP สำหรับการส่งข้อความและการขนส่ง |
ตารางต่อไปนี้แสดงรายการข้อยกเว้นที่เกิดขึ้น:
ข้อยกเว้น | คำอธิบาย |
---|---|
SMTPAddressFailedException | ข้อยกเว้นนี้จะเกิดขึ้นเมื่อไม่สามารถส่งข้อความได้ |
SMTPAddressSucceededException | ข้อยกเว้นนี้ถูกผูกมัดกับ SendFailedException เมื่อคุณสมบัติmail.smtp.reportsuccessเป็นจริง |
SMTPSenderFailedException | ข้อยกเว้นนี้จะเกิดขึ้นเมื่อไม่สามารถส่งข้อความได้ |
SMTPSendFailedException | ข้อยกเว้นนี้จะเกิดขึ้นเมื่อไม่สามารถส่งข้อความได้ข้อยกเว้นรวมถึงที่อยู่ของผู้ส่งซึ่งเซิร์ฟเวอร์อีเมลปฏิเสธ |
com.sun.mail.smtpผู้ให้บริการใช้การตรวจสอบสิทธิ์ SMTP เป็นทางเลือก ในการใช้การตรวจสอบสิทธิ์ SMTP คุณจะต้องตั้งค่าคุณสมบัติmail.smtp.authหรือระบุชื่อผู้ใช้และรหัสผ่านสำหรับการขนส่ง SMTP เมื่อเชื่อมต่อกับเซิร์ฟเวอร์ SMTP คุณสามารถทำได้โดยใช้วิธีใดวิธีหนึ่งต่อไปนี้:
ระบุอ็อบเจ็กต์ Authenticator เมื่อสร้างเซสชันเมลของคุณและระบุข้อมูลชื่อผู้ใช้และรหัสผ่านระหว่างการโทรกลับของ Authenticator คุณสมบัติmail.smtp.userสามารถตั้งค่าเพื่อระบุชื่อผู้ใช้เริ่มต้นสำหรับการโทรกลับ แต่ยังคงต้องระบุรหัสผ่านอย่างชัดเจน วิธีนี้ช่วยให้คุณใช้วิธีการส่งแบบคงที่เพื่อส่งข้อความ ตัวอย่างเช่น:
Transport.send(message);
เรียกเมธอด Transport connect อย่างชัดเจนด้วยอาร์กิวเมนต์ชื่อผู้ใช้และรหัสผ่าน ตัวอย่างเช่น:
Transport tr = session.getTransport("smtp");
tr.connect(smtphost, username, password);
msg.saveChanges();
tr.sendMessage(msg, msg.getAllRecipients());
tr.close();
ผู้ให้บริการโปรโตคอล SMTP สนับสนุนคุณสมบัติต่อไปนี้ซึ่งอาจถูกตั้งค่าในวัตถุ JavaMail Session คุณสมบัติจะถูกตั้งค่าเป็นสตริงเสมอ ตัวอย่างเช่น:
props.put("mail.smtp.port", "587");
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
Post Office Protocol (POP) เป็นโปรโตคอลมาตรฐานอินเทอร์เน็ตในชั้นแอปพลิเคชันที่ใช้โดยไคลเอนต์อีเมลภายในเพื่อดึงอีเมลจากเซิร์ฟเวอร์ระยะไกลผ่านการเชื่อมต่อ TCP / IP POP รองรับข้อกำหนดในการดาวน์โหลดและลบอย่างง่ายสำหรับการเข้าถึงกล่องจดหมายระยะไกล เซิร์ฟเวอร์ POP3 รับฟังพอร์ต 110 ที่รู้จักกันดี
แพ็คเกจ com.sun.mail.pop3เป็นผู้ให้บริการโปรโตคอล POP3 สำหรับ JavaMail API ที่ให้การเข้าถึงที่เก็บข้อความ POP3 ตารางด้านล่างแสดงรายการคลาสในแพ็คเกจนี้:
ชื่อ | คำอธิบาย |
---|---|
POP3Folder | โฟลเดอร์ POP3 (เป็นได้เฉพาะ "INBOX") |
POP3Message | ข้อความ POP3 |
POP3SSLStore | ที่เก็บข้อความ POP3 โดยใช้ SSL |
POP3Store | ที่เก็บข้อความ POP3 |
บางจุดที่ควรสังเกตเหนือผู้ให้บริการรายนี้:
ผู้ให้บริการ POP3 รองรับโฟลเดอร์เดียวที่ชื่อ INBOX. เนื่องจากข้อ จำกัด ของโปรโตคอล POP3 จึงไม่อนุญาตให้ใช้ความสามารถของ JavaMail API หลายอย่างเช่นการแจ้งเตือนเหตุการณ์การจัดการโฟลเดอร์การจัดการแฟล็ก ฯลฯ
ผู้ให้บริการที่มีการเข้าถึง POP3 ผ่าน JavaMail APIs โดยใช้ชื่อโปรโตคอลPOP3หรือ URL ของรูปแบบPOP3: // ผู้ใช้: รหัสผ่านโฮสต์ @: พอร์ต / INBOX"
POP3 ไม่รองรับแฟล็กถาวร ตัวอย่างเช่นแฟล็ก Flags.Flag.RECENTจะไม่ถูกตั้งค่าสำหรับข้อความ POP3 มันขึ้นอยู่กับการประยุกต์ใช้เพื่อตรวจสอบว่าข้อความในกล่องจดหมาย POP3 เป็นใหม่
POP3 ไม่รองรับเมธอด Folder.expunge () ในการลบและล้างข้อความให้ตั้งค่าแฟล็ก Flags.Flag.DELETED บนข้อความและปิดโฟลเดอร์โดยใช้เมธอด Folder.close (true)
POP3 ไม่ได้ระบุวันที่ที่ได้รับดังนั้นเมธอด getReceivedDate จะคืนค่า null
เมื่อเข้าถึงส่วนหัวของข้อความ POP3 ผู้ให้บริการ POP3 จะใช้คำสั่ง TOP เพื่อดึงข้อมูลส่วนหัวทั้งหมดซึ่งจะถูกแคชไว้
เมื่อเข้าถึงเนื้อหาของข้อความ POP3 ผู้ให้บริการ POP3 จะใช้คำสั่ง RETR เพื่อดึงข้อความทั้งหมด
POP3Message.invalidateวิธีสามารถนำมาใช้กับข้อมูลที่เก็บไว้ชั่วคราวโมฆะโดยไม่ต้องปิดโฟลเดอร์