Bạn có thể sử dụng các lớp trong package javax.mail.* để gửi email. Với cách này bạn có thể xem những bài viết sau để thực hiện gửi email trong Java.
http://www.mkyong.com/java/javamail-api-sending-email-via-gmail-smtp-example/
Trong thực tế, bạn có thể viết 1 chương trình gửi và nhận email để phục vụ việc liên lạc của mình khi chán việc phải vào Web Browser để làm việc đó.
Tuy nhiên, đối với lập trình viên, những người viết code và làm ứng dụng thì việc gửi mail sẽ được sử dụng không phải là việc viết chương trình gửi mail cho ai đó mà là viết chương trình gửi mail cho chính bản thân mình khi phải kiểm soát lỗi và theo dõi logs của cả hệ thống khi có điều gì đó bất thường xảy ra.
Bạn không thể ngồi hàng giờ, hàng ngày, hàng tháng để đợi ứng dụng chạy và phát sinh ra Exceptions rồi xử lý nó hay bạn không thể bị động khi ứng dụng bán cho khách hàng bị lỗi và gây ra treo hệ thống. Chúng ta cần 1 giải pháp để cập nhật, theo dõi, xử lý sự cố 1 cách nhanh nhất. Đó là sử dụng gửi Email khi có lỗi xảy ra. Tôi có Smartphone, laptop, tôi có thể biết được ứng dụng nào đang bị lỗi, hệ thống có vấn đề gì không và tôi có thể khắc phục nó dễ dàng và nhanh nhất mà không bị thụ động về thời gian. Đây là cách tôi vẫn thường hay sử dụng khi làm việc, rất tiện lợi.
Để gửi mail, bạn có thể tải về và sử dụng thư viện này để viết các đoạn mã phục vụ cho việc gửi email.
Tùy theo cách làm và cách thiết kế của mỗi người mà ta sẽ triển khai tính năng gửi email này.
Tôi cần 1 SMTP Server để có thể gửi email. Nếu bạn chưa biết phải dùng SMTP Server nào, tôi đơn cử trang web sau, nó có mọi thông tin mà bạn cần: http://www.arclab.com/products/amlc/list-of-smtp-and-pop3-servers-mailserver-list.html
Để đơn giản hóa và tránh phức tạp, tôi thiết kế 1 class tiện ích chứa phương thức gửi email và class này được hardcode với các thông tin mặc định. Bạn có thể thiết kế lại tùy theo mục đích sử dụng của mình.
Class SendMailRunner.java
import com.jscape.inet.mime.MimeException; import com.jscape.inet.smtp.SmtpException; /** * * @author Code4LifeVn */ public class SendMailRunner { public static void main(String[] args) throws SmtpException, MimeException { SmtpSsl s = new SmtpSsl("smtp.gmail.com", 465); s.connect(); s.login("code4lifevn@gmail.com", "xxxxxx"); s.send("code4lifevn@gmail.com", "dia_chi_email_nhan@gmail.com", "TEST", "hello"); s.disconnect(); System.out.println("Sent!"); } }
OK, mọi việc hoàn thành, chạy thành công và đã gửi được mail. Bây giờ tôi cần thực hiện việc gửi mail này mỗi khi ứng dụng của tôi phát sinh ra Exceptions. Tôi giả 1 loạt các Exceptions và sửa lại 1 chút lớp SendMailRunner như sau:
Class SendMailRunner.java
import com.jscape.inet.mime.MimeException; import com.jscape.inet.smtp.SmtpException; import com.jscape.inet.smtpssl.SmtpSsl; import java.text.SimpleDateFormat; import java.util.Date; /** * * @author Code4LifeVn */ public class SendMailRunner { public static void main(String[] args) throws SmtpException, MimeException { SmtpSsl s = new SmtpSsl("smtp.gmail.com", 465); s.connect(); s.login("code4lifevn@gmail.com", "xxxxxx"); int i = 0; while (i < 100) { if (i % 5 == 0) { try { throw new NullPointerException(); } catch (Exception ex) { StringBuilder str = new StringBuilder(); for (StackTraceElement string : ex.getStackTrace()) { str.append(" Class: ").append(string.getClassName()) .append(" File Name: ").append(string.getFileName()) .append(" Line Number: ").append(string.getLineNumber()) .append(" Method: ").append(string.getMethodName()); } s.send("code4lifevn@gmail.com", "dia_chi_email_nhan_logs@gmail.com", "Loi cmnr...WTF: " + new SimpleDateFormat("dd/MM/yyyy hh:mm:ss").format(new Date()), str.toString()); System.out.println("Sent!"); } } i++; } System.out.println("END"); s.disconnect(); } }
Do giả Exception và làm demo nên bước lấy trace hơi loằng ngoằng. Nếu bạn bắt Exceptions cụ thể thì không cần phải làm việc phân tích lấy trace này.
OK, và đây là kết quả mỗi khi ứng dụng gây ra Exceptions:
Hy vọng qua bài viết này, bạn có thể sử dụng email để bắt exception thay vì ngồi chờ đợi nó. Thỉnh thoảng đổi gió tí ^^
OK, và đây là kết quả mỗi khi ứng dụng gây ra Exceptions:
Hy vọng qua bài viết này, bạn có thể sử dụng email để bắt exception thay vì ngồi chờ đợi nó. Thỉnh thoảng đổi gió tí ^^
tks anh rất nhiều
Trả lờiXóaBị lỗi tiếng việt khi gửi ,bác đỗ mạnh giúp em với !
Trả lờiXóabaoquoc : Đây là 1 thiếu xót của mình khi viết tutorial này. Bạn có thể khắc phục việc gửi mail Unicode như sau:
Trả lờiXóa============================================================
public static void main(String[] args) throws SmtpException, MimeException {
SmtpSsl s = new SmtpSsl("smtp.gmail.com", 465);
s.connect();
s.login("code4lifevn@gmail.com", "xxxxxx");
EmailMessage msg = new EmailMessage("code4lifevn@gmail.com", "meohoang911@gmail.com", "TEST", "Xin chào");
msg.setContentType("text/plain", "UTF-8");
s.send(msg);
s.disconnect();
System.out.println("Sent!");
}
===========================================================
Nếu bạn muốn gửi cả 1 biểu mẫu HTML, bạn có thể sửa lại tham số setContentType("text/html", "UTF-8). Nếu trong trường hợp debug và dùng mail để nhận exception thì không cần thiết phải đặt Unicode ^^. Quan tâm exception nó là gì là được. Bạn sửa lại nhé
cảm ơn bác nhé !
Trả lờiXóaÀ bác ơi nội dung thì ok rồi nhưng tiêu đề của mail thì vẫn bị lỗi ,bác test lại dùm em với ạ ,em xin cảm ơn !
Trả lờiXóaBạn test lại xem :)
Trả lờiXóa===================================================
public static void main(String[] args) throws SmtpException, MimeException {
SmtpSsl s = new SmtpSsl("smtp.gmail.com", 465);
s.connect();
s.login("code4lifevn@gmail.com", "xxxxxx");
EmailMessage msg = new EmailMessage("code4lifevn@gmail.com", "meohoang911@gmail.com");
// => Set Content Type
msg.setContentType("text/plain", "UTF-8");
// => Tiêu đề mail
msg.setSubject("Tiêu đề mail", "UTF-8");
// => Nội dung
msg.setBody("Nội dung Mail Message");
// => Send mail
s.send(msg);
s.disconnect();
System.out.println("Sent!");
}
lỗi bác ạ ,hình như hàm EmailMessage nó phải có 4 đối số .
Trả lờiXóaVẫn giữ nguyên 4 tham số ở hàm EmailMesssage ,thêm dòng msg.setSubject("Tiêu đề mail", "UTF-8"); là được :D
Trả lờiXóacảm ơn bác nhé !
Nó có nạp chồng bạn nhé, bạn xem kỹ lại ^^
Trả lờiXóai'm searching this. Thank you "gay" :3
Trả lờiXóa