API JavaMail - Lớp cốt lõi
API JavaMail bao gồm một số giao diện và lớp được sử dụng để gửi, đọc và xóa thư e-mail. Mặc dù có nhiều gói trong API JavaMail, sẽ bao gồm hai gói chính được sử dụng trong Java Mail API thường xuyên: javax.mail và javax.mail.internet gói. Các gói này chứa tất cả các lớp lõi JavaMail. Họ đang:
Lớp học | Sự miêu tả |
---|---|
javax.mail.Session | Lớp khóa của API. Một đối tượng đa luồng đại diện cho nhà máy kết nối. |
javax.mail.Message | Một lớp trừu tượng mô hình hóa một thông điệp e-mail. Các lớp con cung cấp các triển khai thực tế. |
javax.mail.Address | Một lớp trừu tượng mô hình hóa các địa chỉ (địa chỉ từ và đến) trong một thông báo. Các lớp con cung cấp các triển khai cụ thể. |
javax.mail.Authenticator | Một lớp trừu tượng được sử dụng để bảo vệ tài nguyên thư trên máy chủ thư. |
javax.mail.Transport | Một lớp trừu tượng mô hình hóa cơ chế truyền tải thông điệp để gửi một thông điệp e-mail. |
javax.mail.Store | Một lớp trừu tượng mô hình hóa một kho lưu trữ thông báo và giao thức truy cập của nó, để lưu trữ và truy xuất thông báo. Một Cửa hàng được chia thành các Thư mục. |
javax.mail.Folder | Một lớp trừu tượng đại diện cho một thư mục thư. Nó có thể chứa các thư mục con. |
javax.mail.internet.MimeMessage | Message là một lớp trừu tượng, do đó phải làm việc với một lớp con; trong hầu hết các trường hợp, bạn sẽ sử dụng MimeMessage. MimeMessage là một thông điệp e-mail hiểu các loại và tiêu đề MIME. |
javax.mail.internet.InternetAddress | Lớp này đại diện cho một địa chỉ email Internet sử dụng cú pháp của RFC822. Cú pháp địa chỉ điển hình có dạng [email protected] hoặc Tên cá nhân <[email protected]> . |
Chúng ta hãy nghiên cứu chi tiết từng lớp này và trong các chương tiếp theo, chúng ta sẽ nghiên cứu các ví dụ sử dụng từng lớp này.
Lớp học
Lớp Session là lớp chính của JavaMail API và nó không phải là lớp con. Các phiên đối tượng đóng vai trò như các nhà máy kết nối cho các JavaMail API, mà xử lý cả hai thiết lập cấu hình và xác thực.
Đối tượng phiên có thể được tạo theo những cách sau:
Bằng cách tra cứu đối tượng được quản lý được lưu trữ trong dịch vụ JNDI
InitialContext ctx = new InitialContext(); Session session = (Session) ctx.lookup("usersMailSession");
usersMailSession là đối tượng tên JNDI được sử dụng làm đối tượng được quản lý cho đối tượng Session. usersMailSession có thể được tạo và định cấu hình với các tham số bắt buộc dưới dạng cặp tên / giá trị, bao gồm thông tin như tên máy chủ thư, tài khoản người dùng gửi thư và các giao thức được hỗ trợ bởi đối tượng Session.
Một phương pháp khác để tạo đối tượng Session dựa trên cách tiếp cận theo chương trình, trong đó bạn có thể sử dụng đối tượng java.util.Properties để ghi đè một số thông tin mặc định, chẳng hạn như tên máy chủ thư, tên người dùng, mật khẩu và các thông tin khác có thể được chia sẻ trên toàn bộ ứng dụng của bạn.
Hàm tạo cho lớp Session là private . Do đó, lớp Session cung cấp hai phương thức (được liệt kê bên dưới) lấy đối tượng Session .
getDefaultInstance(): Có hai phương pháp để lấy đối tượng phiên bằng cách sử dụng phương thức getDefaultInstance (). Nó trả về phiên mặc định.
public static Session getDefaultInstance(Properties props) public static Session getDefaultInstance(Properties props,Authenticator auth)
getInstance(): Có hai phương thức để lấy đối tượng phiên bằng cách sử dụng phương thức getInstance (). Nó trả về phiên mới.
public static Session getInstance(Properties props) public static Session getInstance(Properties props,Authenticator auth)
Lớp tin nhắn
Với đối tượng Session được tạo, bây giờ chúng ta chuyển sang tạo một thông báo sẽ được gửi đi. Loại tin nhắn sẽ là javax.mail.Message .
Thông điệp là một lớp trừu tượng. Do đó, lớp con của nó là lớp javax.mail.internet.MimeMessage hầu hết được sử dụng.
Để tạo thông báo, bạn cần truyền đối tượng phiên trong phương thức khởi tạo lớp MimeMessage. Ví dụ:
MimeMessage message=new MimeMessage(session);
Sau khi đối tượng message được tạo, chúng ta cần lưu trữ thông tin trong đó. Lớp Message thực thi giao diện javax.mail.Part trong khi javax.mail.internet. MimeMessage triển khai javax.mail.internet.MimePart. Bạn có thể sử dụng message.setContent () hoặc mimeMessage.setText () để lưu trữ nội dung.
Các phương thức thường được sử dụng của lớp MimeMessage là
phương pháp Sự miêu tả public void setFrom (Địa chỉ địa chỉ) được sử dụng để đặt trường tiêu đề từ. public void addRecipient (loại Message.RecipientType, địa chỉ chuỗi) được sử dụng để thêm địa chỉ đã cho vào kiểu người nhận. public void setSubject (Chủ đề chuỗi) được sử dụng để đặt trường tiêu đề chủ đề. public void setText (String textmessage) được sử dụng để đặt văn bản làm nội dung tin nhắn bằng kiểu MIME văn bản / thuần túy.
Lớp địa chỉ
Bây giờ chúng ta có các đối tượng Session và Message (với nội dung được lưu trữ trong đó), chúng ta cần giải quyết bức thư bằng cách sử dụng đối tượng Address .
Địa chỉ là một lớp trừu tượng. Do đó, lớp con của nó là lớp javax.mail.internet.InternetAddress chủ yếu được sử dụng.
Địa chỉ có thể được tạo bằng cách chuyển địa chỉ email:
Address address = new InternetAddress("[email protected]");
Một cách khác để tạo Địa chỉ là chuyển tên cùng với địa chỉ email:
Address address = new InternetAddress("[email protected]", Manisha);
Bạn cũng có thể đặt các trường Đến, Từ, CC, BCC như bên dưới
message.setFrom(address)
message.addRecipient (loại, địa chỉ)
Ba kiểu địa chỉ được xác định trước là các đối tượng có một trong các giá trị sau:
Message.RecipientType.TO
Message.RecipientType.CC
Message.RecipientType.BCC
Lớp Authenticator
Lớp Authenticator đại diện cho một đối tượng biết cách lấy xác thực cho kết nối mạng. Thông thường, nó sẽ thực hiện việc này bằng cách nhắc người dùng nhập thông tin.
Authenticator là một lớp trừu tượng. Bạn tạo một lớp con PasswordAuthentication , chuyển tên người dùng và mật khẩu đến phương thức khởi tạo của nó.
Bạn phải đăng ký Trình xác thực với Phiên khi bạn tạo đối tượng phiên.
Sau đây là một ví dụ về việc sử dụng Authenticator :
Properties props = new Properties();
//Override props with any customized data
PasswordAuthentication auth = new PasswordAuthentication("manisha", "pswrd")
Session session = Session.getDefaultInstance(props, auth);
Hạng giao thông
Lớp truyền tải được sử dụng như một cơ chế vận chuyển thông điệp. Lớp này thường sử dụng giao thức SMTP để gửi tin nhắn.
Nó là một lớp trừu tượng.
Bạn có thể sử dụng phiên bản mặc định của lớp bằng cách gọi phương thức static send () :
Transport.send(message);
Cách khác để gửi tin nhắn là lấy một phiên bản cụ thể từ phiên cho giao thức của bạn, chuyển tên người dùng và mật khẩu (trống nếu không cần thiết), gửi tin nhắn và đóng kết nối:
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();
Lớp cửa hàng
Một lớp trừu tượng mô hình hóa một kho lưu trữ thông báo và giao thức truy cập của nó, để lưu trữ và truy xuất thông báo. Các lớp con cung cấp các triển khai thực tế. Store mở rộng lớp Dịch vụ , lớp này cung cấp nhiều phương pháp phổ biến để đặt tên cửa hàng, kết nối với cửa hàng và lắng nghe các sự kiện kết nối.
Khách hàng có quyền truy cập vào Message Store bằng cách lấy một đối tượng Store thực hiện giao thức truy cập cơ sở dữ liệu. Hầu hết các cửa hàng tin nhắn yêu cầu người dùng phải được xác thực trước khi họ cho phép truy cập. Phương thức kết nối thực hiện xác thực đó.
Store store = session.getStore("pop3");
store.connect(host, username, password);
Lớp thư mục
Thư mục là một lớp trừu tượng đại diện cho một thư mục chứa thư. Các lớp con thực hiện các Thư mục cụ thể của giao thức. Các thư mục có thể chứa các thư mục con cũng như các thông báo, do đó cung cấp một cấu trúc phân cấp.
Sau khi kết nối với Cửa hàng, bạn có thể nhận được một Thư mục, thư mục này phải được mở trước khi bạn có thể đọc thư từ đó.
Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
Message message[] = folder.getMessages();
Phương thức getFolder (Tên chuỗi) cho một đối tượng Thư mục trả về thư mục con được đặt tên. Đóng cả kết nối Store và Folder sau khi đọc xong thư.
Chúng ta có thể thấy mối quan hệ giữa Cửa hàng và Thư mục trong hình ảnh bên dưới:
Như chúng ta có thể thấy, đối với mỗi tài khoản người dùng, máy chủ có một nơi lưu trữ các thư của người dùng. Kho lưu trữ được chia thành các thư mục và thư mục “hộp thư đến” là thư mục chủ yếu chứa các tin nhắn e-mail. Một thư mục có thể chứa cả thư và thư mục con.