diff --git a/support-portal-backend/pom.xml b/support-portal-backend/pom.xml index 13fdd9d..ccb2063 100644 --- a/support-portal-backend/pom.xml +++ b/support-portal-backend/pom.xml @@ -67,8 +67,8 @@ - com.sun.mail - jakarta.mail + org.springframework.boot + spring-boot-starter-mail diff --git a/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/constant/EmailConstant.java b/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/constant/EmailConstant.java index c1cf2d6..254c3a1 100644 --- a/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/constant/EmailConstant.java +++ b/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/constant/EmailConstant.java @@ -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"; - } diff --git a/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/service/EmailService.java b/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/service/EmailService.java index 5dbd3bf..92f970d 100644 --- a/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/service/EmailService.java +++ b/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/service/EmailService.java @@ -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); } } diff --git a/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/service/UserServiceImpl.java b/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/service/UserServiceImpl.java index 98da6ef..b964716 100644 --- a/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/service/UserServiceImpl.java +++ b/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/service/UserServiceImpl.java @@ -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); } diff --git a/support-portal-backend/src/main/resources/application.yml b/support-portal-backend/src/main/resources/application.yml index 44c0ffe..b68ae2d 100644 --- a/support-portal-backend/src/main/resources/application.yml +++ b/support-portal-backend/src/main/resources/application.yml @@ -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