Có lẽ việc gửi Email trong các ứng dụng hiện nay đã trở nên rất phổ biến nhưng chỉ trong các ứng dụng Java. Trong bài viết này chúng ta sẽ cùng nhau tìm hiểu cách gửi Mail trong ứng dụng Java sử dụng thư viện JavaMail API và SMTP server của Gmail.
Dependency
JavaMail API không phải là một thành phần cơ bản trong JDK, vì vậy chúng ta cần download chúng từ website JavaMail và import nó vào project để sử dụng.
Hoặc nếu bạn đang sử dụng project maven thì có thể thêm dependency sau:
Để gửi một Email trong Java chúng ta cần thực hiện 3 bước sau:
Khởi tạo javax.mail.Session object.
Khởi tạo javax.mail.internet.MimeMessage object, trong đó các thuộc tính cần thiết như: email người nhận, tiêu đề, tin nhắn và các tập tin đính kèm.
Sử dụng avax.mail.Transport để gửi Email.
Trong một ứng dụng gửi mail sử dụng Gmail của google chúng ta cần phải chuẩn bị các thông tin sau:
Địa chỉ Email – đây là địa chỉ gmail mà bạn sở hữu dùng trong ứng dụng.
Mật khẩu – mật khẩu tài khoản gmail của bạn.
Địa chỉ gmail của người nhận.
Tiêu đề, tin nhắn, tập tin đính kèm.
Một lưu ý là khi sử dụng Gmail các bạn phải bật tính năng “Quyền tuy cập của ứng dụng kém an toàn” trong phần cài đặt bảo mật của Gmail: https://myaccount.google.com/security.
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Properties;
public class Main {
public static voidmain(String[] args) throws MessagingException, UnsupportedEncodingException {
final String fromEmail = "123issuejavamail@gmail.com";
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Properties;
public class Main {
public static void main(String[] args) throws MessagingException, UnsupportedEncodingException {
final String fromEmail = "123issuejavamail@gmail.com";
// Mat khai email cua ban
final String password = "Test123#";
// dia chi email nguoi nhan
final String toEmail = "devjoyvn@gmail.com";
final String subject = "Java Example Test";
final String body = "Hello Admin";
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.gmail.com"); //SMTP Host
props.put("mail.smtp.port", "587"); //TLS Port
props.put("mail.smtp.auth", "true"); //enable authentication
props.put("mail.smtp.starttls.enable", "true"); //enable STARTTLS
Authenticator auth = new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(fromEmail, password);
}
};
Session session = Session.getInstance(props, auth);
MimeMessage msg = new MimeMessage(session);
//set message headers
msg.addHeader("Content-type", "text/HTML; charset=UTF-8");
msg.addHeader("format", "flowed");
msg.addHeader("Content-Transfer-Encoding", "8bit");
msg.setFrom(new InternetAddress(fromEmail, "NoReply-JD"));
msg.setReplyTo(InternetAddress.parse(fromEmail, false));
msg.setSubject(subject, "UTF-8");
msg.setText(body, "UTF-8");
msg.setSentDate(new Date());
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toEmail, false));
Transport.send(msg);
System.out.println("Gui mail thanh cong");
}
}
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Properties;
public class Main {
public static void main(String[] args) throws MessagingException, UnsupportedEncodingException {
final String fromEmail = "123issuejavamail@gmail.com";
// Mat khai email cua ban
final String password = "Test123#";
// dia chi email nguoi nhan
final String toEmail = "devjoyvn@gmail.com";
final String subject = "Java Example Test";
final String body = "Hello Admin";
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.gmail.com"); //SMTP Host
props.put("mail.smtp.port", "587"); //TLS Port
props.put("mail.smtp.auth", "true"); //enable authentication
props.put("mail.smtp.starttls.enable", "true"); //enable STARTTLS
Authenticator auth = new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(fromEmail, password);
}
};
Session session = Session.getInstance(props, auth);
MimeMessage msg = new MimeMessage(session);
//set message headers
msg.addHeader("Content-type", "text/HTML; charset=UTF-8");
msg.addHeader("format", "flowed");
msg.addHeader("Content-Transfer-Encoding", "8bit");
msg.setFrom(new InternetAddress(fromEmail, "NoReply-JD"));
msg.setReplyTo(InternetAddress.parse(fromEmail, false));
msg.setSubject(subject, "UTF-8");
msg.setText(body, "UTF-8");
msg.setSentDate(new Date());
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toEmail, false));
Transport.send(msg);
System.out.println("Gui mail thanh cong");
}
}
Đến đây chạy chương trình, mình đã nhận được một email gửi từ ứng dụng demo trên
Gửi mail với tập tin đính kèm
Để đính kèm các tập tin như file txt, file hình ảnh v.v chúng ta cần sử dụng đến MimeBodyPart để chứa các dữ liệu dạng văn bản, tập tin bên trong. Multipart dùng để đóng gói tất cả các MimeBodyPart đã chuẩn bị từ trước đó.
Trong ví dụ này sẽ gửi một email bao gồm một tin nhắn, một file test.txt và một tệp hình ảnh.
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.util.Properties;
public class Main {
public static voidmain(String[] args) throws MessagingException {
final String fromEmail = "123issuejavamail@gmail.com";
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.util.Properties;
public class Main {
public static void main(String[] args) throws MessagingException {
final String fromEmail = "123issuejavamail@gmail.com";
// Mat khai email cua ban
final String password = "Test123#";
// dia chi email nguoi nhan
final String toEmail = "devjoyvn@gmail.com";
final String subject = "Java Example Test";
final String body = "Hello Admin";
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.gmail.com"); //SMTP Host
props.put("mail.smtp.port", "587"); //TLS Port
props.put("mail.smtp.auth", "true"); //enable authentication
props.put("mail.smtp.starttls.enable", "true"); //enable STARTTLS
Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(fromEmail, password);
}
});
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(fromEmail));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toEmail, false));
message.setSubject(subject);
// Phan 1 gom doan tin nhan
BodyPart messageBodyPart1 = new MimeBodyPart();
messageBodyPart1.setText(body);
// phan 2 chua tap tin txt
MimeBodyPart messageBodyPart2 = new MimeBodyPart();
// Duong dan den file cua ban
String filePath = "test.txt";
DataSource source1 = new FileDataSource(filePath);
messageBodyPart2.setDataHandler(new DataHandler(source1));
messageBodyPart2.setFileName(filePath);
// phan 3 chua tap tin image
MimeBodyPart messageBodyPart3 = new MimeBodyPart();
// Duong dan den file cua ban
String imagePath = "Capture.JPG";
DataSource source2 = new FileDataSource(imagePath);
messageBodyPart3.setDataHandler(new DataHandler(source2));
messageBodyPart3.setFileName(imagePath);
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart1);
multipart.addBodyPart(messageBodyPart2);
multipart.addBodyPart(messageBodyPart3);
message.setContent(multipart);
Transport.send(message);
System.out.println("Gui mail thanh cong");
}
}
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.util.Properties;
public class Main {
public static void main(String[] args) throws MessagingException {
final String fromEmail = "123issuejavamail@gmail.com";
// Mat khai email cua ban
final String password = "Test123#";
// dia chi email nguoi nhan
final String toEmail = "devjoyvn@gmail.com";
final String subject = "Java Example Test";
final String body = "Hello Admin";
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.gmail.com"); //SMTP Host
props.put("mail.smtp.port", "587"); //TLS Port
props.put("mail.smtp.auth", "true"); //enable authentication
props.put("mail.smtp.starttls.enable", "true"); //enable STARTTLS
Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(fromEmail, password);
}
});
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(fromEmail));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toEmail, false));
message.setSubject(subject);
// Phan 1 gom doan tin nhan
BodyPart messageBodyPart1 = new MimeBodyPart();
messageBodyPart1.setText(body);
// phan 2 chua tap tin txt
MimeBodyPart messageBodyPart2 = new MimeBodyPart();
// Duong dan den file cua ban
String filePath = "test.txt";
DataSource source1 = new FileDataSource(filePath);
messageBodyPart2.setDataHandler(new DataHandler(source1));
messageBodyPart2.setFileName(filePath);
// phan 3 chua tap tin image
MimeBodyPart messageBodyPart3 = new MimeBodyPart();
// Duong dan den file cua ban
String imagePath = "Capture.JPG";
DataSource source2 = new FileDataSource(imagePath);
messageBodyPart3.setDataHandler(new DataHandler(source2));
messageBodyPart3.setFileName(imagePath);
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart1);
multipart.addBodyPart(messageBodyPart2);
multipart.addBodyPart(messageBodyPart3);
message.setContent(multipart);
Transport.send(message);
System.out.println("Gui mail thanh cong");
}
}
Kết quả mình nhận một email có nội dung như sau
Gửi mail dạng HTML
Gửi mail dạng HTML khá đơn giản bạn chỉ cần chuẩn bị HTML script và gửi như gửi văn bản thông thường. Nhưng hãy lưu ý điều chỉnh content-type thành text/html.
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.util.Properties;
public class Main {
public static voidmain(String[] args) throws MessagingException {
final String fromEmail = "123issuejavamail@gmail.com";
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.util.Properties;
public class Main {
public static void main(String[] args) throws MessagingException {
final String fromEmail = "123issuejavamail@gmail.com";
// Mat khai email cua ban
final String password = "Test123#";
// dia chi email nguoi nhan
final String toEmail = "devjoyvn@gmail.com";
final String subject = "Java Example Test";
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.gmail.com"); //SMTP Host
props.put("mail.smtp.port", "587"); //TLS Port
props.put("mail.smtp.auth", "true"); //enable authentication
props.put("mail.smtp.starttls.enable", "true"); //enable STARTTLS
Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(fromEmail, password);
}
});
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(fromEmail));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toEmail, false));
message.setSubject(subject);
message.setSubject("HTML Message");
String htmlContent = "<h1>Html Tag</h1>";
message.setContent(htmlContent, "text/html");
Transport.send(message);
System.out.println("Gui mail thanh cong");
}
}
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.util.Properties;
public class Main {
public static void main(String[] args) throws MessagingException {
final String fromEmail = "123issuejavamail@gmail.com";
// Mat khai email cua ban
final String password = "Test123#";
// dia chi email nguoi nhan
final String toEmail = "devjoyvn@gmail.com";
final String subject = "Java Example Test";
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.gmail.com"); //SMTP Host
props.put("mail.smtp.port", "587"); //TLS Port
props.put("mail.smtp.auth", "true"); //enable authentication
props.put("mail.smtp.starttls.enable", "true"); //enable STARTTLS
Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(fromEmail, password);
}
});
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(fromEmail));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toEmail, false));
message.setSubject(subject);
message.setSubject("HTML Message");
String htmlContent = "<h1>Html Tag</h1>";
message.setContent(htmlContent, "text/html");
Transport.send(message);
System.out.println("Gui mail thanh cong");
}
}
Kết quả
Kết bài
Như vậy chúng ta đã tìm hiểu được cách gửi một email trong ứng dụng Java đơn giản thông qua thư viện Java Mail. Trong thực tế các bạn có thể áp dụng gửi email để xác thực đăng ký người dùng, quên mật khẩu, hay đổi mật khẩu. Ngoài ra có thể gửi email để thông báo định kỳ, các cập nhật hoặc các giao dịch xảy ra trên tài khoản của khách hàng.
Necessary cookies help make a website usable by enabling basic functions like page navigation and access to secure areas of the website. The website cannot function properly without these cookies.
We do not use cookies of this type.
Marketing cookies are used to track visitors across websites. The intention is to display ads that are relevant and engaging for the individual user and thereby more valuable for publishers and third party advertisers.
We do not use cookies of this type.
Analytics cookies help website owners to understand how visitors interact with websites by collecting and reporting information anonymously.
We do not use cookies of this type.
Preference cookies enable a website to remember information that changes the way the website behaves or looks, like your preferred language or the region that you are in.
We do not use cookies of this type.
Unclassified cookies are cookies that we are in the process of classifying, together with the providers of individual cookies.
We do not use cookies of this type.
Cookies are small text files that can be used by websites to make a user's experience more efficient. The law states that we can store cookies on your device if they are strictly necessary for the operation of this site. For all other types of cookies we need your permission. This site uses different types of cookies. Some cookies are placed by third party services that appear on our pages.