69. Refactoring with spring-boot-starter-mail (#7)

This commit is contained in:
Art
2021-09-08 22:31:23 +03:00
parent f39c32e2c2
commit b5011e40b6
5 changed files with 29 additions and 54 deletions

View File

@ -67,8 +67,8 @@
</dependency>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>jakarta.mail</artifactId>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>

View File

@ -2,18 +2,9 @@ package net.shyshkin.study.fullstack.supportportal.backend.constant;
public class EmailConstant {
public static final String SIMPLE_MAIL_TRANSFER_PROTOCOL = "smtps";
public static final String USERNAME = "infojuniorro@gmail.com";
public static final String PASSWORD = "N99gmail1@";
public static final String FROM_EMAIL = "support@getarrays.com";
public static final String CC_EMAIL = "";
public static final String EMAIL_SUBJECT = "Get Arrays, LLC - New Password";
public static final String GMAIL_SMTP_SERVER = "smtp.gmail.com";
public static final String SMTP_HOST = "mail.smtp.host";
public static final String SMTP_AUTH = "mail.smtp.auth";
public static final String SMTP_PORT = "mail.smtp.port";
public static final int DEFAULT_PORT = 465;
public static final String SMTP_STARTTLS_ENABLE = "mail.smtp.starttls.enable";
public static final String SMTP_STARTTLS_REQUIRED = "mail.smtp.starttls.required";
}

View File

@ -3,60 +3,32 @@ package net.shyshkin.study.fullstack.supportportal.backend.service;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.env.Environment;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Date;
import java.util.Properties;
import static net.shyshkin.study.fullstack.supportportal.backend.constant.EmailConstant.*;
import static net.shyshkin.study.fullstack.supportportal.backend.constant.EmailConstant.EMAIL_SUBJECT;
@Slf4j
@Service
@RequiredArgsConstructor
public class EmailService {
private final JavaMailSender emailSender;
private final Environment environment;
public void sendNewPasswordEmail(String firstName, String password, String email) throws MessagingException {
Message message = createEmail(firstName, password, email);
Transport transport = getEmailSession().getTransport(SIMPLE_MAIL_TRANSFER_PROTOCOL);
public void sendNewPasswordEmail(String firstName, String password, String email) {
String mailUsername = environment.getProperty("PORTAL_MAIL_USERNAME", USERNAME);
String mailPassword = environment.getProperty("PORTAL_MAIL_PASSWORD", PASSWORD);
transport.connect(GMAIL_SMTP_SERVER, mailUsername, mailPassword);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
}
private Message createEmail(String firstName, String password, String email) throws MessagingException {
Message message = new MimeMessage(getEmailSession());
message.setFrom(new InternetAddress(FROM_EMAIL));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(email, false));
message.setRecipients(Message.RecipientType.CC, InternetAddress.parse(CC_EMAIL, false));
// Create a Simple MailMessage.
SimpleMailMessage message = new SimpleMailMessage();
message.setTo(email);
String carbonCopyEmail = environment.getProperty("spring.mail.username");
log.debug("Carbon Copy Email: {}", carbonCopyEmail);
message.setCc(carbonCopyEmail);
message.setSubject(EMAIL_SUBJECT);
message.setText("Hello " + firstName + "!\n\nYour new account password is: " + password + "\n\nThe Support Team");
message.setSentDate(new Date());
message.saveChanges();
return message;
}
private Session getEmailSession() {
Properties properties = System.getProperties();
properties.put(SMTP_HOST, GMAIL_SMTP_SERVER);
properties.put(SMTP_AUTH, true);
properties.put(SMTP_PORT, DEFAULT_PORT);
properties.put(SMTP_STARTTLS_ENABLE, true);
properties.put(SMTP_STARTTLS_REQUIRED, true);
return Session.getInstance(properties);
// Send Message!
this.emailSender.send(message);
}
}

View File

@ -17,7 +17,6 @@ import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
import javax.mail.MessagingException;
import javax.transaction.Transactional;
import java.time.LocalDateTime;
import java.util.List;
@ -91,7 +90,7 @@ public class UserServiceImpl implements UserService {
try {
emailService.sendNewPasswordEmail(newUser.getFirstName(), rawPassword, newUser.getEmail());
} catch (MessagingException exception) {
} catch (Exception exception) {
log.error("Can't send message", exception);
}

View File

@ -5,6 +5,19 @@ server:
# enabled: false
spring:
mail:
host: smtp.gmail.com
port: 587
username: ${PORTAL_MAIL_USERNAME:fake.user@gmail.com}
password: ${PORTAL_MAIL_PASSWORD:fake_password}
properties:
mail:
transport:
protocol: smtp
smtp:
auth: true
starttls:
enable: true
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://mysql:3306/support-portal