Hướng dẫn sử dụng Java Commons Email
Công ty Vĩnh Cửu tuyển dụng lập trình viên Java

1- Giới thiệu

Commons Email là một thư viện Java của Apache liên quan tới Email. Trong thực tế để làm việc với Java Email bạn có thể sử dụng JavaMail API đã được tích hợp sẵn trong JDK6. Commons Email đơn giản chỉ là giúp bạn làm việc với JavaMail API dễ dàng hơn, nó không thay thế cho JavaMail API.
Cũng giống như Commons IO không thay thế cho JavaIO mà chỉ bao gồm nhiều class, method tiện ích để bạn làm việc với Java IO dễ dàng hơn, tiết kiệm thời gian code cho bạn.

 

2- Thư viện

Maven:
** pom.xml **
<!-- http://mvnrepository.com/artifact/org.apache.commons/commons-email -->

<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-email</artifactId>
  <version>1.3.2</version>
</dependency>

3- Tạo Project

Tạo một Maven Project dùng cho việc test các ví dụ trong tài liệu này. Bạn có thể tạo một Project thông thường, sau đó download thư viện và khai báo vị trí của chúng theo cách thông thường.
Nếu bạn sử dụng Commons Email trong một project thông thường, bạn cần download các thư viện cần thiết, bạn có thể xem ở phụ lục ở cuối tài liệu.
Đây là hình ảnh Project được tạo ra.
Khai báo các thư viện sẽ sử dụng trong pom.xml
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
    http://maven.apache.org/xsd/maven-4.0.0.xsd">
    
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.o7planning</groupId>
    <artifactId>CommonsEmailTutorial</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <dependencies>
    
      <!-- http://mvnrepository.com/artifact/org.apache.commons/commons-email -->    
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-email</artifactId>
            <version>1.4</version>
        </dependency>
    </dependencies>
    
</project>

4- Ví dụ gửi email đơn giản

Trước hết là một ví dụ gửi Email đơn giản với Commons-Email
Constants.java
package org.o7planning.tutorial.commonsemail;

public class Constants {

 
  public static final String MY_EMAIL = "yourEmail@gmail.com";
 
  public static final String MY_PASSWORD ="your password";

   public static final String FRIEND_EMAIL = "friendEmail@gmail.com";  
}
SimpleTextEmail.java
package org.o7planning.tutorial.commonsemail;

import org.apache.commons.mail.DefaultAuthenticator;
import org.apache.commons.mail.Email;
import org.apache.commons.mail.SimpleEmail;

public class SimpleTextEmail {

   public static void main(String[] args) {
       try {            
           Email email = new SimpleEmail();

           // Cấu hình thông tin Email Server
           email.setHostName("smtp.googlemail.com");
           email.setSmtpPort(465);
           email.setAuthenticator(new DefaultAuthenticator(Constants.MY_EMAIL,
                   Constants.MY_PASSWORD));
           
           // Với gmail cái này là bắt buộc.
           email.setSSLOnConnect(true);
           
           // Người gửi
           email.setFrom(Constants.MY_EMAIL);
           
           // Tiêu đề
           email.setSubject("Test Email");
           
           // Nội dung email
           email.setMsg("This is a test mail ... :-)");
           
           // Người nhận
           email.addTo(Constants.FRIEND_EMAIL);            
           email.send();
           System.out.println("Sent!!");
       } catch (Exception e) {
           e.printStackTrace();
       }
   }
}
Kết quả khi chạy ví dụ trên:

5- Gửi Email có đính kèm

Ví dụ gửi email có đính kèm một file trên ổ cứng.
EmailWithAttachment.java
package org.o7planning.tutorial.commonsemail;

import org.apache.commons.mail.DefaultAuthenticator;
import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.MultiPartEmail;

public class EmailWithAttachment {

   public static void main(String[] args) {
       try {
           // Tạo một đối tượng đính kèm
           EmailAttachment attachment = new EmailAttachment();
           attachment.setPath("C:/mypictures/map-vietnam.png");
           attachment.setDisposition(EmailAttachment.ATTACHMENT);
           attachment.setDescription("Vietnam Map");
           attachment.setName("Map");

           // Tạo đối tượng Email
           MultiPartEmail email = new MultiPartEmail();

           // Cấu hình
           email.setHostName("smtp.googlemail.com");
           email.setSmtpPort(465);
           email.setSSLOnConnect(true);
           email.setAuthenticator(new DefaultAuthenticator(Constants.MY_EMAIL,
                   Constants.MY_PASSWORD));

           email.setFrom(Constants.MY_EMAIL, "TRAN");
           email.addTo(Constants.FRIEND_EMAIL, "Hong");

           email.setSubject("The Map");
           email.setMsg("Here is the map you wanted");

           // Thêm đính kèm
           email.attach(attachment);

           // Gửi email
           email.send();

           System.out.println("Sent!");
       } catch (Exception e) {
           e.printStackTrace();
       }
   }

}
Kết quả:
Một ví dụ khác gửi Email có đính kèm từ một đường dẫn trên mạng
EmailWithAttachment2.java
package org.o7planning.tutorial.commonsemail;

import java.net.URL;

import org.apache.commons.mail.DefaultAuthenticator;
import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.MultiPartEmail;

public class EmailWithAttachment2 {

  public static void main(String[] args) {
      try {
          // Tạo đối tượng đính kèm
          EmailAttachment attachment = new EmailAttachment();
          attachment.setURL(new URL(
                  "http://www.apache.org/images/asf_logo_wide.gif"));
          attachment.setDisposition(EmailAttachment.ATTACHMENT);
          attachment.setDescription("Apache logo");
          attachment.setName("Apache logo");

          // Tạo đối tượng email
          MultiPartEmail email = new MultiPartEmail();
         
          // Cấu hình
          email.setHostName("smtp.googlemail.com");
          email.setSmtpPort(465);
          email.setSSLOnConnect(true);
          email.setAuthenticator(new DefaultAuthenticator(
                  Constants.MY_EMAIL, Constants.MY_PASSWORD));

         
          email.setFrom(Constants.MY_EMAIL, "TRAN");
          email.addTo(Constants.FRIEND_EMAIL, "Hong");

          email.setSubject("The logo");
          email.setMsg("Here is Apache's logo");

          // Thêm đính kèm
          email.attach(attachment);

          // Gửi email
          email.send();
         
          System.out.println("Sent!");
      } catch (Exception e) {
          e.printStackTrace();
      }
  }
}
Kết quả chạy ví dụ:

6- Gửi Email có định dạng HTML

SendHtmlEmail.java
package org.o7planning.tutorial.commonsemail;

import java.net.URL;

import org.apache.commons.mail.DefaultAuthenticator;
import org.apache.commons.mail.HtmlEmail;

public class SendHtmlEmail {
   
   public static void main(String[] args) {
       try {
           // Tạo đối tượng Email
           HtmlEmail email = new HtmlEmail();
           
           
           // Cấu hình
           email.setHostName("smtp.googlemail.com");
           email.setSmtpPort(465);
           email.setAuthenticator(new DefaultAuthenticator(
                   Constants.MY_EMAIL,Constants.MY_PASSWORD));
           email.setSSLOnConnect(true);
           email.setFrom(Constants.MY_EMAIL, "TRAN");

           
           // Người nhận
           email.addTo(Constants.FRIEND_EMAIL);
           
           // Tiêu đề
           email.setSubject("Test Sending HTML formatted email");

           // Nhúng image và lấy ra ID của nội dung (Content-ID)
           URL url = new URL("http://www.apache.org/images/asf_logo_wide.gif");
           String cid = email.embed(url, "Apache logo");

           // Sét nội dung email định dạng HTML.
           email.setHtmlMsg("<html><h2>The apache logo</h2>  <img src=\"cid:"
                   + cid + "\"></html>");

           // Thiết lập các thông báo thay thế
           // (Trong trường hợp chương trình đọc mail của người nhận ko hỗ trợ đọc HTML Email)
           email.setTextMsg("Your email client does not support HTML messages");

           // Gửi email
           email.send();

           System.out.println("Sent!!");
           
       } catch (Exception e) {
           e.printStackTrace();
       }
   }
}

7- Gửi Email định dạng HTML nhúng thêm ảnh

SendHtmlEmbedImageEmail.java
package org.o7planning.tutorial.commonsemail;

import java.net.URL;

import org.apache.commons.mail.DefaultAuthenticator;
import org.apache.commons.mail.ImageHtmlEmail;
import org.apache.commons.mail.resolver.DataSourceUrlResolver;

public class SendHtmlEmbedImageEmail {
   public static void main(String[] args) {
       try {
           // Mẫu  nội dung Email gửi đi.
           // Ở đây Img có đường dẫn tương đối  (**)
           String htmlEmailTemplate = "<h2>Hello!</h2>"
                   +"This is Apache Logo <br/>"
                   +"<img src='proper/commons-email/images/commons-logo.png'/>";            

           // Tạo đối tượng Email.
           ImageHtmlEmail email = new ImageHtmlEmail();
           

           // Cấu hình
           email.setHostName("smtp.googlemail.com");
           email.setSmtpPort(465);
           email.setAuthenticator(new DefaultAuthenticator(
                   Constants.MY_EMAIL, Constants.MY_PASSWORD));
           
           email.setSSLOnConnect(true);
           email.setFrom(Constants.MY_EMAIL, "TRAN");

           email.addTo(Constants.FRIEND_EMAIL);
           email.setSubject("Sending HTML formatted email with embedded images");

           // Định nghĩa URL cơ sở để xác định đúng vị trí nguồn dữ liệu (img,..)
           // (Trong trường hợp nó có đường dẫn tương đối, ví dụ Img trên)
           URL url = new URL("http://commons.apache.org");
                   
           email.setDataSourceResolver(new DataSourceUrlResolver(url) );
           
           // Sét nội dung email
           email.setHtmlMsg(htmlEmailTemplate);

           // Sét đặt nội dung thay thế.
           // (Trong trường hợp chương trình đọc email của người nhận ko hỗ trợ HTML).
           email.setTextMsg("Your email client does not support HTML messages");

           // Gửi email
           email.send();

           System.out.println("Sent!!");
       } catch (Exception e) {
           e.printStackTrace();
       }
   }
}

8- Phụ lục: Download thư viện Commons Email

Nếu bạn sử dụng Commons Email trong một project thông thường bạn cần phải download các thư viện cần thiết. Commons Email dựa trên Email API vì vậy bạn cần download 2 thư viện:
Tiếp theo download thư viện Email API:
Cuối cùng, bạn download được 2 file jar.