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.mailJavax.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 !