Tự Tạo Phần Mềm Gửi Email Bằng Java Mail
Bạn là một con người ưa tìm tòi cái mới để khẳng định bản thân? Bạn là một fan cứng của phong trào handmade và thích dùng đồ handmade? Hoặc đơn giản là bạn muốn thực tế hóa những gì mà lập trình dạy bạn và không biết cách tạo ra những ứng dụng cụ thể. Vậy còn chần chừ gì nữa, tôi đã đứng đây từ chiều và sẽ chia sẻ với bạn cách tôi tạo ra một sản phẩm, đó là lập trình ứng dụng gửi Email bằng Java.
Trước khi vào bài viết, nếu các bạn có hứng thú với Onepiece và crawl dữ liệu, hãy ủng hộ mình bằng cách đọc bài viết này: Crawl truyện onepiece bằng Java . Cám ơn bạn rất nhiều ạ.
Thư viện Java Mail
Java Mail là một Api của Java cho phép gửi và đọc Email. Ơ, ngắn gọi thể thôi à? Thì nó vốn ngắn gọn vậy mà :v.
Trái tim của Java Mail là hai lớp Javax.mail
và Javax.mail.Activation
Nguyên lý hoạt động
JavaMail hoạt động trên ba giao thức độc lập là SMTP, IMAP, POP3
- POP3 : (Post Office Protocol version 3) được sử dụng để kết nối tới server email và tải email xuống máy tính cá nhân thông qua một ứng dụng email như Outlook, Thunderbird, Windows Mail. Các cổng của POP3 là 110 (Port không mã hóa) và 995 (SSL/TLS port).
- IMAP : (Internet Message Access Protocol), POP3 cũng đều được dùng để kéo emails về emails client, tuy nhiên khác biệt với POP3 là nó chỉ kéo email headers về, nội dung email vẫn còn trên server. Đây là kênh liên lạc 2 chiều, thay đổi trên mail client sẽ được chuyển lên server. Sau này, giao thức này trở nên phổ biến nhờ nhà cung cấp mail lớn nhất thế giới, Gmail, khuyên dùng thay vì POP3. Các cổng của IMAP là 143 (Port không mã hóa) và port 993 (SSL/TLS port)
- SMTP : (Simple Mail Transfer Protocol) là giao thức chuẩn TCP/IP được dùng để truyền tải thư điện tử (e-mail) trên mạng internet. Nó thiết lập kênh kết nối giữa mail client và mail server, và thiết lập kênh liên lạc giữa mail server gửi và mail server nhận. Email sẽ được đẩy từ mail client lên mail server và từ mail server nó sẽ được server này gửi đi đến mail server nhận. Các cổng của SMTP là 25 (port không mã hóa) và 465/587 (SSL/TLS port)
SSL và TLS là cái gì ?
SSL :(Secure Sockets Layer) là công nghệ tiêu chuẩn để giữ an toàn cho kết nối internet và bảo vệ bất kỳ dữ liệu nhạy cảm nào được gửi giữa hai hệ thống, ngăn chặn tội phạm đọc và sửa đổi bất kỳ thông tin nào được truyền, bao gồm cả thông tin cá nhân tiềm năng
TLS : (Transport Layer Security) chỉ là phiên bản cập nhật của SSL và an toàn hơn SSL.
Các bạn có thể tìm hiểu về SSL/TSL tại Bảo mật SSL/TSL là gì? sử dụng như thế nào
Flow của chương trình
Bước 1: Tạo một đối tượng Property có chứa các thông tin như SSL port, host,...
Bước 2: Tạo một Session kết nối đến Gmail (sử dụng PasswordAuthentication).
Bước 3: Truyền thông tin như Subject, nội dung emai, file đính kèm và đối tượng MimeMessage.
Bước 4: Dùng lớp Transport để gửi Email đi.
Thôi, lý thuyết thế đủ rồi, vào code nào.
Cài đặt JavaMail trên Netbean
Bước 1: bạn vào trang này để dowload javaMail
Bước 2 : Sau khi tải xong, ta vào Netbean tạo project và add thư viện jar vừa tải
Thực hành code
GUI:
Tạo class EmailConfig
public class MailConfig {
public static final String HostSend = "smtp.gmail.com";
public static final int SSL_PORT = 465;
public static final int TSL_PORT = 587;
}
Tạo đối tượng Property với các tham số cần thiết
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.host", MailConfig.HostSend);
props.put("mail.smtp.socketFactory.port", MailConfig.SSL_PORT);
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.port", MailConfig.SSL_PORT);
Tiếp theo là tạo một session kết nối đến Gmail
PasswordAuthentication Auth = new PasswordAuthentication(username, pass);
Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator()
{
protected PasswordAuthentication getPasswordAuthentication() {
return Auth;
}
});
Để gửi một đoạn Text và File (nếu có) , ta cần một đối tượng MimeMesage
private void attackEmail(MimeMessage mime, String filePath, String content) {
try {
// tạo một đối tượng BodyPart để ghi nội dung vào body của Email
BodyPart bodyPart = new MimeBodyPart();
bodyPart.setText(content);
// tạo lớp MultyPart để chứa BodyPart
Multipart mtp = new MimeMultipart();
mtp.addBodyPart(bodyPart);
// nếu có File thì tạo thêm một bodyPart khác để chứa file
if (!filePath.equals("")) {
MimeBodyPart bodyPart2 = new MimeBodyPart();
DataSource source = new FileDataSource(filePath);
bodyPart2.setDataHandler(new DataHandler(source));
mtp.addBodyPart(bodyPart2);
}
mime.setContent(mtp);
} catch (MessagingException ex) {
Logger.getLogger(SendMail.class.getName()).log(Level.SEVERE, null, ex);
}
}
Vì gửi Email có tính năng gửi cho nhiều người, và gửi theo 3 thuộc tính : To, cc, Bcc nên ta dùng hàm sau để setting cho MimeMessage
private void setEmailRecipients(MimeMessage mimeMss, InternetAddress[] listAdd,
RecipientType type) {
try {
mimeMss.setRecipients(type, listAdd);
} catch (Exception e) {
}
}
Mình sẽ để link dự án ở đây, anh em click vào để xem chi tiết nhé.
Link : https://github.com/VuaVoDanh729/SendMailJava
Tạm Kết
Như vậy, mình đã hướng dẫn anh em cách tạo ứng dụng gửi Email bằng java đơn giản, hi vọng sau bài viết này, anh em có thể tự viết phần mềm gửi Email cho riêng mình. Hẹn anh em ở bài viết tiếp theo. Cám ơn anh em đã đọc. Thân !