How to send email with java spring

Hallo guys, sedikit menjelaskan tentang kebutuhan email pada era ini. Email adalah sesuatu yang penting untuk menunjang pekerjaan Anda apalagi sebuah email sekarang bisa Anda akses melalui ponsel yang Anda miliki.

Pada tutorial ini adalah tentang mengirim E-mail menggunakan REST API yang dikembangkan melalui Spring boot.Tutorial ini menggunakan Server SMTP Gmail. Baiklah kita akan mempraktikan secara langsung cara mengirim email menggunakan java spring.

Technologies Stack yang diperlukan
·       Spring Tool Suite (STS)
·       Spring Boot
·       REST APIs
·       Maven
·       Java 8

Buatlah sebuah project spring baru:




Kemudian pada pom.xml tambahkan dependency berikut ini :

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-mail</artifactId>
</dependency> 

setelah menambahkan depedency di atas langsung saja kita mulai project. Berikut ini susunanan folder project untuk mengirim email di java spring :


Sedikit penjelasan tentang class yang akan di buat :
  • User.java - Kelas ini berisi E-mail pengguna tempat surat akan dikirim.
  • RegistrationController.java - Kelas ini berisi API untuk mengirim surat dengan lampiran serta tanpa lampiran
  • MailService.java - Kelas ini berisi dua fungsi untuk pengiriman email. Salah satunya adalah Surat Sederhana dan lainnya adalah surat yang berisi lampiran.
Application.properties

Tambahkan konfigurasi pada file application.properties anda :


 #https://myaccount.google.com/lesssecureapps

spring.mail.host = smtp.gmail.com

#sender's email & password
spring.mail.username=dedyindraXXX@gmail.com
spring.mail.password=XXXXXXX

#Below Properties are needed for maintaining the session.
#Two Step verification should not be enabled for gmail.

spring.mail.properties.mail.smtp.auth = true
spring.mail.properties.mail.smtp.socketFactory.port = 465
spring.mail.properties.mail.smtp.socketFactory.class = javax.net.ssl.SSLSocketFactory
spring.mail.properties.mail.smtp.socketFactory.fallback = false

Pastikan alamat email pengirim suda di setting less secure App dan juga mengaktifkan two-step verification. Apabila anda belum mengaktifkan less secure apps access di email anda silahkan lihat tutorial nya di sini

Jika sudah mengaktifkan less secure Apps access kita lanjut ke tahap berikutnya:

User.java

Kelas ini berisi alamat email dimana surat akan dikirim:

package com.mail.demo.model;

import org.springframework.stereotype.Component;

@Component
public class User {

   private String firstName;
   private String lastName;
   private String emailAddress;

   public String getFirstName() {
      return firstName;
   }

   public void setFirstName(String firstName) {
      this.firstName = firstName;
   }
   public String getLastName() {
      return lastName;
   }

   public void setLastName(String lastName) {
      this.lastName = lastName;
   }

   public String getEmailAddress() {
      return emailAddress;
   }

   public void setEmailAddress(String emailAddress) {
      this.emailAddress = emailAddress;
   }

}



MailService.java

Kelas ini terdapat 2 fungsi untuk mengirim email menggunakan text dan mengirim email menggunakan attachment / lampiran

Keterangan :
Sebenarnya, Java menyediakan dua kelas untuk mengirim surat. Jika Anda ingin mengirim surat sederhana tanpa lampiran maka objek dari SimpleMailMessage digunakan jika tidak, Obyek MimeMessage digunakan.

package com.mail.demo.service;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.MailException;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;

import com.mail.demo.model.User;

@Service
public class MailService {

   private JavaMailSender javaMailSender;

   @Autowired
   public MailService(JavaMailSender javaMailSender) {
      this.javaMailSender = javaMailSender;
   }

   public void sendEmail(User user) throws MailException {

      SimpleMailMessage mail = new SimpleMailMessage();
      
      mail.setTo(user.getEmailAddress());
      mail.setSubject("Testing Mail API");
      mail.setText("Hurray ! You have done that dude...");

      javaMailSender.send(mail);
   }

   public void sendEmailWithAttachment(User user) throws MailException, MessagingException {

      MimeMessage message = javaMailSender.createMimeMessage();

      MimeMessageHelper helper = new MimeMessageHelper(message, true);

      helper.setTo(user.getEmailAddress());
      helper.setSubject("Testing Mail API with Attachment");
      helper.setText("Please find the attached document below.");

      
      ClassPathResource classPathResource = new ClassPathResource("Attachment.pdf");
      helper.addAttachment(classPathResource.getFilename(), classPathResource);

      javaMailSender.send(message);
   }

}


ClassPathResource Class digunakan untuk melampirkan file ke Program Java. Pastikan Anda menambahkan file lampiran ke src -> resources. File itu akan dikirim sebagai lampiran ke  email masing-masing.

RegistrationController.java


Class controller ini berisi API untuk mengirim email.
package com.mail.demo.controller;

import javax.mail.MessagingException;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.MailException;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.mail.demo.model.User;
import com.mail.demo.service.MailService;

@RestController
public class RegistrationController {

   @Autowired
   private MailService notificationService;

   @Autowired
   private User user;

   @RequestMapping("send-mail")
   public String send() {

      user.setFirstName("Mukul");
      user.setLastName("Jaiswal");
 // alamat penerima email
      user.setEmailAddress("dedyindra**@gmail.com"); //Receiver's email address

      try {
         notificationService.sendEmail(user);
      } catch (MailException mailException) {
         System.out.println(mailException);
      }
      return "Congratulations! Your mail has been send to the user.";
   }

   @RequestMapping("send-mail-attachment")
   public String sendWithAttachment() throws MessagingException {


      user.setFirstName("Mukul");
      user.setLastName("Jaiswal");
      user.setEmailAddress("dedyindra**@gmail.com"); //Receiver's email address

      try {
         notificationService.sendEmailWithAttachment(user);
      } catch (MailException mailException) {
         System.out.println(mailException);
      }
      return "Congratulations! Your mail has been send to the user.";
   }
}

kemudian setelah mengikuti step di atas , selanjutnya API dapat di akses menggunakan Url :

1.     Untuk mengirim email via text :
Htttp://localhost:8080/send-mail

2.     Untuk mengirim email via lampiran :
Http://localhost:8080/send-mail-attachment


silahkan anda uji coba di postman.

   
Gambar di bawah ini adalah hasil dari pengiriman email setelah mnegakses url di atas. maka email akan terkirim ke akun kita.




Untuk custom string HTML desain pada email saya akan membahasnya di tutorial selanjutya.
Terimakasih dan selamat mencoba..  ^-^


1 Response to "How to send email with java spring"

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel