[Lập trình JSP – Servlet] Bài 10: Xây dựng chức năng gởi mail

Lập trình JSP – Servlet cho phép các nhà phát triển phần mềm xây dựng nội dung động cho website sử dụng nền tảng Java. Tiếp ngay sau đây sẽ là phần hướng dẫn xây dựng chức năng gởi mail trong loạt video hướng dẫn xây dựng website bán hàng bằng JSP – Servlet mong các bạn chú ý đón xem.

Cùng với sự phát triển của mạng lướt Internet thì việc trao đổi thông tin liên lạc ngày dễ dàng hơn, và đa số lập trình viên sẽ tận dụng ưu điểm của gởi email để ứng dụng vào website với mục đích có thể tạo hoạt động kinh doanh tốt hơn. Bài viết này mình sẽ trình bày chức năng gởi mail trong Java trong JSP – Servlet.

Sử dụng email nhằm mục đích gửi thư đến người dùng như tin tức khuyến mại, tin tức hay thông tin tài khoản vừa tiết kiệm chi phí lại nhanh và thuận tiện. Gởi mail trong Java cũng khá đơn giản với thư viện Java Mail được cung cấp sẵn, thư viện Java Mail nhằm hỗ trợ việc gửi và nhận email thông qua các thư viện API được cung cấp cho người dùng, Java Mail bao gồm POP3, SMTP hoặc IMAP với các thư viện tương ứng.

– SMTP (Simple Mail Transfer Protocol) là giao thức được sử dụng để gửi thư điện tử trên Internet.

– POP3 (Post Office Protocol phiên bản 3) là giao thức được sử dụng để nhận thư điện tử từ các máy chủ.

– IMAP (Internet Message Access Protocol) là giao thức chuẩn để nhận thư điện tử từ máy chủ. IMAP cho phép người dùng lựa chọn e-mail thông báo rằng nó sẽ mất, làm một thư mục trên máy chủ, tìm kiếm e-mail cụ thể, thậm chí xóa tin nhắn e-mail trên máy chủ.

Các thuộc tính trong Java Mail:

– Session: đại diện cho một lần gửi nhận mail

– Message: đưa ra các phương thức hỗ trợ việc gửi nhận mail. Các thành phần message cơ bản bao gồm địa chỉ người gửi và địa chỉ người nhận, tiêu đề mail (subject) và nội dung (body)

– Transport: hỗ trợ việc gửi nhận mail qua Internet

– Message: lớp trừu tượng để tạo ra các interface trong việc tạo ra các thành phần nội dung của mail

– Address: Internet Address là đối tượng thực thi tạo các địa chỉ cho việc gửi nhận email trên Internet.

– Transport: gửi message trên Internet thông qua thông tin được xác định trên session

– Authenticator: xác định các thành phần có liên quan trong việc xác thực tài khoản

Code gởi mail trong Java:

Để gởi mail trong Java bạn có thể áp đụng đoạn mã sau đây, đối với tất cả website từ bán hàng, tin tức, quảng cáo đều có thể sử dụng đoạn mã dưới để thực hiện chức năng gởi mail. Gmail là tài khoản được sử dụng rộng rãi hiện nay nên cũng là lợi thế khi bạn sử dụng gởi mail thông qua Gmail.

Bạn có thể xem video sau đây về xây dựng chức năng gởi mail trong lập trình JSP – Servlet:

Hoặc bạn có thể tải mã nguồn cho bài viết lập trình JSP – Servlet xây dựng chức năng gởi mail tại đường dẫn sau:

Download link Google Drive

Download link Vipshare

Download link Mshare

Xem thêm một số bài viết liên quan lập trình JSP – Servlet:

Video hướng dẫn xây dựng website bán hàng sử dụng JSP – Servlet:
Bài 4: Hiển thị danh mục sản phẩm
Bài 5: Hiển thị sản phẩm theo danh mục
Bài 6: Hiển thị thông tin chi tiết sản phẩm
Bài 7: Xây dựng chức năng đăng nhập, đăng ký thành viên
Bài 9: Xây dựng chức năng thanh toán đơn hàng

Lời kết: Như vậy chúng ta vừa tìm hiểu về hướng dẫn xây dựng chức năng gởi mail trong loạt bài xây dựng website bán hàng bằng JSP – Servlet. Ngoài ra, các bạn có thể xem thêm các bài viết khác trong chuyên mục lập trình JSP – Servlet để có thể tự xây dựng hoàn chỉnh một website cho riêng mình.

(Tác giả: Tùng Dương)

14 thoughts on “[Lập trình JSP – Servlet] Bài 10: Xây dựng chức năng gởi mail

    1. Chào bạn, chức năng gởi mail thì bạn sử dụng phương thức gởi mail mà mình đã trình bày là có thể gởi được mail rồi. bạn chỉ cần điền địa chỉ mail nhậjn, nội dung… là được.

  1. ý mình là lúc chỉnh sửa thông tin cá nhân ấy thì mình phải gửi mail là đã chỉnh sửa ấy… cái đó là như thế nào mình mò từ hôm qa tới giờ chưa ra ==!

    1. Chào bạn,

      Nếu như bạn muôn gởi mail khi chỉnh sửa thông tin cá nhân thì bạn chỉ cần biết địa chỉ mail của người bạn muốn gởi để truyền vào phương thức gởi mail.

      Chúc bạn một ngày vui!

  2. Trần Thị Kim Ngân

    - Edit

    Reply

    Ad ơi cho em hỏi sau em gửi mail có nội dung tiếng việt nó bị lỗi font vậy ad. Em đã set utf-8 hết nó vẫn bị lỗi. Em xin cảm ơn Ad

  3. Exception in thread “main” java.lang.NoClassDefFoundError: javax/activation/DataSource
    at tools.SendMail.sendMail(SendMail.java:28)
    at tools.SendMail.main(SendMail.java:42)
    Caused by: java.lang.ClassNotFoundException: javax.activation.DataSource
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
    at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
    … 2 more

    a ơi e chạy cái SendMail.java nó bị lỗi thế này, em có tìm hiểu qua hình như do e dùng java 10 còn a dùng java cũ hơn, nhưng mà e chưa biết cách khắc phục

  4. javax.mail.SendFailedException: Sending failed;
    false
    nested exception is:
    javax.mail.MessagingException: 530 5.7.0 Must issue a STARTTLS command first. r8sm3005359pgr.48 – gsmtp

    at javax.mail.Transport.send0(Transport.java:219)
    at javax.mail.Transport.send(Transport.java:81)
    at service.sendmail.sendMail(sendmail.java:43)
    at service.sendmail.main(sendmail.java:52)
    ————————————————————————–

    Lỗi gửi mail admin ơi….làm đi làm lại mà vẫn không được

    1. mình check lại vẫn gửi bình thường nha bạn.
      Bạn xác thực mail gửi có đúng thông tin không nha!

  5. javax.mail.MessagingException: Can’t send command to SMTP host;
    nested exception is:
    javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    false
    at com.sun.mail.smtp.SMTPTransport.sendCommand(SMTPTransport.java:1717)
    at com.sun.mail.smtp.SMTPTransport.sendCommand(SMTPTransport.java:1704)
    at com.sun.mail.smtp.SMTPTransport.ehlo(SMTPTransport.java:1088)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:468)
    at javax.mail.Service.connect(Service.java:313)
    at javax.mail.Service.connect(Service.java:172)
    at javax.mail.Service.connect(Service.java:121)
    at javax.mail.Transport.send0(Transport.java:190)
    at javax.mail.Transport.send(Transport.java:120)
    at tools.SendMail.sendMail(SendMail.java:34)
    at tools.SendMail.main(SendMail.java:43)
    Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.ssl.Alerts.getSSLException(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.fatal(Unknown Source)
    at sun.security.ssl.Handshaker.fatalSE(Unknown Source)
    at sun.security.ssl.Handshaker.fatalSE(Unknown Source)
    at sun.security.ssl.ClientHandshaker.serverCertificate(Unknown Source)
    at sun.security.ssl.ClientHandshaker.processMessage(Unknown Source)
    at sun.security.ssl.Handshaker.processLoop(Unknown Source)
    at sun.security.ssl.Handshaker.process_record(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.writeRecord(Unknown Source)
    at sun.security.ssl.AppOutputStream.write(Unknown Source)
    at com.sun.mail.util.TraceOutputStream.write(TraceOutputStream.java:110)
    at java.io.BufferedOutputStream.flushBuffer(Unknown Source)
    at java.io.BufferedOutputStream.flush(Unknown Source)
    at com.sun.mail.smtp.SMTPTransport.sendCommand(SMTPTransport.java:1715)
    … 10 more
    Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.validator.PKIXValidator.doBuild(Unknown Source)
    at sun.security.validator.PKIXValidator.engineValidate(Unknown Source)
    at sun.security.validator.Validator.validate(Unknown Source)
    at sun.security.ssl.X509TrustManagerImpl.validate(Unknown Source)
    at sun.security.ssl.X509TrustManagerImpl.checkTrusted(Unknown Source)
    at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source)
    … 22 more
    Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.provider.certpath.SunCertPathBuilder.build(Unknown Source)
    at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(Unknown Source)
    at java.security.cert.CertPathBuilder.build(Unknown Source)
    … 28 more

  6. javax.mail.MessagingException: Can’t send command to SMTP host;
    nested exception is:
    javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    false
    at com.sun.mail.smtp.SMTPTransport.sendCommand(SMTPTransport.java:1717)
    at com.sun.mail.smtp.SMTPTransport.sendCommand(SMTPTransport.java:1704)
    at com.sun.mail.smtp.SMTPTransport.ehlo(SMTPTransport.java:1088)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:468)
    at javax.mail.Service.connect(Service.java:313)
    at javax.mail.Service.connect(Service.java:172)
    at javax.mail.Service.connect(Service.java:121)
    at javax.mail.Transport.send0(Transport.java:190)
    at javax.mail.Transport.send(Transport.java:120)
    at tools.SendMail.sendMail(SendMail.java:34)
    at tools.SendMail.main(SendMail.java:43)
    Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.ssl.Alerts.getSSLException(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.fatal(Unknown Source)
    at sun.security.ssl.Handshaker.fatalSE(Unknown Source)
    at sun.security.ssl.Handshaker.fatalSE(Unknown Source)
    at sun.security.ssl.ClientHandshaker.serverCertificate(Unknown Source)
    at sun.security.ssl.ClientHandshaker.processMessage(Unknown Source)
    at sun.security.ssl.Handshaker.processLoop(Unknown Source)
    at sun.security.ssl.Handshaker.process_record(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.writeRecord(Unknown Source)
    at sun.security.ssl.AppOutputStream.write(Unknown Source)
    at com.sun.mail.util.TraceOutputStream.write(TraceOutputStream.java:110)
    at java.io.BufferedOutputStream.flushBuffer(Unknown Source)
    at java.io.BufferedOutputStream.flush(Unknown Source)
    at com.sun.mail.smtp.SMTPTransport.sendCommand(SMTPTransport.java:1715)
    … 10 more
    Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.validator.PKIXValidator.doBuild(Unknown Source)
    at sun.security.validator.PKIXValidator.engineValidate(Unknown Source)
    at sun.security.validator.Validator.validate(Unknown Source)
    at sun.security.ssl.X509TrustManagerImpl.validate(Unknown Source)
    at sun.security.ssl.X509TrustManagerImpl.checkTrusted(Unknown Source)
    at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source)
    … 22 more
    Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.provider.certpath.SunCertPathBuilder.build(Unknown Source)
    at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(Unknown Source)
    at java.security.cert.CertPathBuilder.build(Unknown Source)
    … 28 more
    Ad ơi e làm tương tự mà nó báo lỗi ntn thì sửa s ạ ???

Bình luận

Loading...