69. Refactoring with spring-boot-starter-mail (#7)
This commit is contained in:
@ -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>
|
||||
|
||||
@ -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";
|
||||
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
Reference in New Issue
Block a user