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>
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:
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.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.
Untuk custom string HTML desain pada email saya akan membahasnya di tutorial selanjutya.
Terimakasih dan selamat mencoba.. ^-^
nicee
ReplyDelete