openplanning

Hướng dẫn và ví dụ Java Commons Email

  1. Giới thiệu
  2. Thư viện
  3. Chú ý cho Gmail
  4. Ví dụ gửi email đơn giản
  5. Gửi Email có đính kèm
  6. Gửi Email có định dạng HTML
  7. Gửi một Email có định dạng HTML, nhúng thêm ảnh
  8. Phụ lục: Download thư viện Commons Email

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. Chú ý cho Gmail

Nếu muốn bạn gửi email từ ứng dụng Java sử dụng Gmail, bạn cần cho phép:ứng dụng ít bảo mật hơn (Allow less secure apps):
Trên trình duyệt đăng nhập vào Gmail của ban, và truy cập đường dẫn sau:
Bạn sẽ nhận được một cảnh báo của Google:
Một số ứng dụng và thiết bị sử dụng công nghệ đăng nhập ít bảo mật hơn, làm cho tài khoản của bạn dễ bị tổn thương hơn. Bạn có thể tắt quyền (Turn Off) truy cập cho các ứng dụng này mà chúng tôi đề xuất hoặc bật quyền (Turn On) truy cập nếu bạn muốn sử dụng chúng bất chấp rủi ro.

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

Trước hết là một ví dụ gửi một 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 file từ một liên kết (Link)
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 một Email có đị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.

Java cơ bản

Show More