Pada tutorial kali ini kita akan coba mengirim email dan verifikasi lewat email. Kita akan menggunakan konsep register akun implementasinya.
Mengirim Email
Tambahkan DependencyΒ spring-boot-starter-mail
Konfigurasi Mail Server
YAML
Copy
# Mail Configuration
mail:
host: smtp.gmail.com
port: 587
username: email@gmail.com #ini nama email
password: pass #ini password email
properties:
mail:
smtp:
starttls:
enabled: true
required: true
auth: true
connectiontimeout: 5000
timemout: 5000
writetimeout: 5000
Membuat Model Email.
Java
Copy
public class EmailStatus{
public static final String SUCCESS = "SUCCESS";
public static final String ERROR = "ERROR";
private final String to;
private final String subject;
private final String body;
private String status;
private String errorMessage;
public EmailStatus(String to, String subject, String body) {
this.to = to;
this.subject = subject;
this.body = body;
}
public EmailStatus success() {
this.status = SUCCESS;
return this;
}
public EmailStatus error(String errorMessage) {
this.status = ERROR;
this.errorMessage = errorMessage;
return this;
}
public boolean isSuccess() {
return SUCCESS.equals(this.status);
}
public boolean isError() {
return ERROR.equals(this.status);
}
public String getTo() {
return to;
}
public String getSubject() {
return subject;
}
public String getBody() {
return body;
}
public String getStatus() {
return status;
}
public String getErrorMessage() {
return errorMessage;
}
}
Membuat component untuk send email
Java
Copy
@Component
public class EmailSender{
@Autowired
JavaMailSender javaMailSender;
Logger logger = LoggerFactory.getLogger(this.getClass());
public EmailStatus sendPlainText(String to, String subject, String text) {
return sendM(to, subject, text, false);
}
public EmailStatus sendHtml(String to, String subject, String htmlBody) {
return sendM(to, subject, htmlBody, true);
}
private EmailStatus sendM(String to, String subject, String text, Boolean isHtml) {
try {
MimeMessage mail = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mail, true);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(text, isHtml);
javaMailSender.send(mail);
logger.info("Send email '{}' to: {}", subject, to);
return new EmailStatus(to, subject, text).success();
} catch (Exception e) {
logger.error(String.format("Problem with sending email to: {}, error message: {}", to, e.getMessage()));
return new EmailStatus(to, subject, text).error(e.getMessage());
}
}
}
Membuat component
Java
Copy
@Component
public class EmailHtmlSender{
@Autowired private EmailSender mailSender;
@Autowired private TemplateEngine templateEngine;
public EmailStatus send(String to, String subject, String templateName, Context context) {
String body = templateEngine.process(templateName, context);
return mailSender.sendHtml(to, subject, body);
}
}
Membuat html
HTML
Copy
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title th:remove="all">Order Confirmation</title>
</head>
<body>
<div>
<h2 th:text="${title}">title</h2>
<p th:text="${description}"></p>
<p>
<a th:href="@{http://localhost:8080/activate(email=${email})}">Verification Link</a>
</p>
</div>
</body>
</html>
Membuat service
Java
Copy
public interface EmailService{
EmailStatus sendEmail(RegisterForm form);
}
Membuat service impl
Java
Copy
@Service
public class EmailServiceImpl implements EmailService{
@Autowired
public EmailHtmlSender emailHtmlSender;
@Override
public EmailStatus sendEmail(RegisterForm form){
Context context = new Context();
context.setVariable("title", "Clorus Email Verification");
context.setVariable("description", "To Verify your clorus account please click link below ");
context.setVariable("email",form.getEmail());
EmailStatus emailStatus = emailHtmlSender.send(form.getEmail(), "Clorus Email Verification", "mail", context);
return emailStatus;
}
}
Membuat controller
Java
Copy
@PreAuthorize("permitAll()")
@RequestMapping(method = RequestMethod.POST,value = "/register")
public ResponseData<Object> register(@RequestBody @Valid RegisterForm form)throws Exception{
ResponseData<Object> responseData = new ResponseData<>();
userService.register(form);
responseData.setData(emailService.sendEmail(form));
return responseData;
}
Verifikasi Email
Membuat controller
Java
Copy
public class UserThymeleafController{
@Autowired private UserRepository userRepository;
@PreAuthorize("permitAll()")
@RequestMapping("/activate")
public String activate (@RequestParam (value="email")String email,Model model){
User user = userRepository.findByEmail(email);
model.addAttribute("email",user.getEmail());
Logger logger = LoggerFactory.getLogger(this.getClass());
logger.info("\n\n Email yang dikirim yaitu\n\n\n", user.getEmail());
user.setEnabled(true);
userRepository.save(user);
return "/activate";
}
}
Membuat html
Java
Copy
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title >Aktivasi Akun</title>
</head>
<body>
<div>
<p>Selamat <span th:text="${email}"></span>, anda telah berhasil melakukan aktivasi akun. Silahkan nikmati layanan kami.</p>
</div>
</body>
</html>