diff --git a/spring-mvc-email/pom.xml b/spring-mvc-email/pom.xml index 6b2ef0bf9b..0d3acec1fe 100644 --- a/spring-mvc-email/pom.xml +++ b/spring-mvc-email/pom.xml @@ -5,7 +5,7 @@ org.baeldung.spring SpringMVCEmail - 1.0-SNAPSHOT + 1.0 war @@ -20,51 +20,23 @@ org.springframework.boot spring-boot-starter-web + org.springframework.boot spring-boot-starter-mail 1.4.0.RELEASE + - org.springframework.boot - spring-boot-starter-tomcat - provided - - - - - @@ -80,17 +52,4 @@ - - - - spring-releases - https://repo.spring.io/libs-release - - - - - spring-releases - https://repo.spring.io/libs-release - - diff --git a/spring-mvc-email/src/main/java/com/baeldung/spring/Application.java b/spring-mvc-email/src/main/java/com/baeldung/spring/Application.java index 0ab568e111..769658fdde 100644 --- a/spring-mvc-email/src/main/java/com/baeldung/spring/Application.java +++ b/spring-mvc-email/src/main/java/com/baeldung/spring/Application.java @@ -1,9 +1,14 @@ package com.baeldung.spring; +import com.baeldung.spring.mail.EmailService; import com.baeldung.spring.mail.EmailServiceImpl; +import com.baeldung.spring.mail.Order; +import com.baeldung.spring.mail.OrderManager; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.web.support.SpringBootServletInitializer; +import org.springframework.context.annotation.ImportResource; import org.springframework.mail.SimpleMailMessage; import javax.annotation.PostConstruct; @@ -12,24 +17,18 @@ import javax.annotation.PostConstruct; public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); - } @Autowired - public EmailServiceImpl emailService; + public EmailService emailService; + + @Autowired + public OrderManager orderManager; @PostConstruct public void postConstruct() { - sendSimpleEmail(); - } - - private void sendSimpleEmail() { - - SimpleMailMessage message = new SimpleMailMessage(); - message.setFrom("from@test.com"); - message.setTo("to@test.com"); - message.setSubject("Test Message"); - - emailService.sendMail(message); + //emailService.sendSimpleMessage("to@gmail.com", "Test Subject", "Test Message"); + Order order = new Order("reva.olga@gmail.com", "First Name", "Last Name"); + orderManager.placeOrder(order); } } diff --git a/spring-mvc-email/src/main/java/com/baeldung/spring/app/config/AppConfig.java b/spring-mvc-email/src/main/java/com/baeldung/spring/app/config/AppConfig.java index 4dcf9c1b7d..0c1662a36c 100644 --- a/spring-mvc-email/src/main/java/com/baeldung/spring/app/config/AppConfig.java +++ b/spring-mvc-email/src/main/java/com/baeldung/spring/app/config/AppConfig.java @@ -1,6 +1,8 @@ package com.baeldung.spring.app.config; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; import org.springframework.mail.SimpleMailMessage; import org.springframework.web.servlet.config.annotation.*; import org.springframework.web.servlet.view.InternalResourceViewResolver; @@ -11,9 +13,9 @@ import org.springframework.web.servlet.view.UrlBasedViewResolver; * Created with IntelliJ IDEA. * User: Olga */ -//@Configuration -//@ComponentScan("com.baeldung.spring") -//@EnableWebMvc //tha same as +@Configuration +@ComponentScan("com.baeldung.spring") +@EnableWebMvc //tha same as public class AppConfig extends WebMvcConfigurerAdapter { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { @@ -41,6 +43,16 @@ public class AppConfig extends WebMvcConfigurerAdapter { return resolver; } + @Bean + public SimpleMailMessage templateMessage() { + SimpleMailMessage message = new SimpleMailMessage(); + message.setText("Dear %s %s, \nthank you for placing order.\n" + + "\n" + + "Sincerely yours,\n" + + "Yourcompany."); + return message; + } + /* Gmail */ /*@Bean public JavaMailSenderImpl mailSender() { @@ -60,17 +72,6 @@ public class AppConfig extends WebMvcConfigurerAdapter { return props; }*/ - @Bean - public SimpleMailMessage templateMessage() { - SimpleMailMessage message = new SimpleMailMessage(); - message.setText("This is automatically generated email,\n" + - "Original mail text is included : %s\n" + - "\n" + - "Sincerely yours,\n" + - "Yourcompany."); - return message; - } - /*Amazon SES @Bean public JavaMailSenderImpl mailSender() { diff --git a/spring-mvc-email/src/main/java/com/baeldung/spring/application.properties b/spring-mvc-email/src/main/java/com/baeldung/spring/application.properties deleted file mode 100644 index 573f901152..0000000000 --- a/spring-mvc-email/src/main/java/com/baeldung/spring/application.properties +++ /dev/null @@ -1,4 +0,0 @@ -spring.mail.host=smtp.gmail.com -spring.mail.port=25 -spring.mail.username=test -spring.mail.password=test \ No newline at end of file diff --git a/spring-mvc-email/src/main/java/com/baeldung/spring/controllers/HomeController.java b/spring-mvc-email/src/main/java/com/baeldung/spring/controllers/HomeController.java index 234593f02e..50643684d1 100644 --- a/spring-mvc-email/src/main/java/com/baeldung/spring/controllers/HomeController.java +++ b/spring-mvc-email/src/main/java/com/baeldung/spring/controllers/HomeController.java @@ -10,12 +10,12 @@ import org.springframework.web.servlet.ModelAndView; * Created with IntelliJ IDEA. * User: Olga */ -@RestController +@Controller @RequestMapping({"/","/home"}) public class HomeController { @RequestMapping(method = RequestMethod.GET) - public ModelAndView showHomePage() { - return new ModelAndView("home"); + public String showHomePage() { + return "home"; } } diff --git a/spring-mvc-email/src/main/java/com/baeldung/spring/controllers/MailController.java b/spring-mvc-email/src/main/java/com/baeldung/spring/controllers/MailController.java index 90f628f586..79152797ff 100644 --- a/spring-mvc-email/src/main/java/com/baeldung/spring/controllers/MailController.java +++ b/spring-mvc-email/src/main/java/com/baeldung/spring/controllers/MailController.java @@ -1,7 +1,17 @@ package com.baeldung.spring.controllers; +import com.baeldung.spring.mail.EmailServiceImpl; +import com.baeldung.spring.web.dto.MailObject; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.mail.SimpleMailMessage; import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.Errors; +import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +import javax.validation.Valid; /** * Created by Olga on 7/20/2016. @@ -9,8 +19,8 @@ import org.springframework.web.bind.annotation.RequestMapping; @Controller @RequestMapping("/mail") public class MailController { - /*@Autowired - public EMailService mailService; + @Autowired + public EmailServiceImpl emailService; @RequestMapping(value = "/send", method = RequestMethod.GET) public String createMail(Model model) { @@ -22,13 +32,8 @@ public class MailController { public String createMail(Model model, @ModelAttribute("mailObject") @Valid MailObject mailObject, Errors errors) { - if(errors.hasErrors()) { - return "mail/send"; - } - - SimpleMailMessage mailMessage = mailService.createSimpleMailMessage(mailObject); - mailService.sendMail(mailMessage); + emailService.sendSimpleMessage("to@gmail.com", "Test Subject", "Test Message"); return "redirect:/home"; - }*/ + } } diff --git a/spring-mvc-email/src/main/java/com/baeldung/spring/mail/EmailService.java b/spring-mvc-email/src/main/java/com/baeldung/spring/mail/EmailService.java new file mode 100644 index 0000000000..43d7378227 --- /dev/null +++ b/spring-mvc-email/src/main/java/com/baeldung/spring/mail/EmailService.java @@ -0,0 +1,20 @@ +package com.baeldung.spring.mail; + +import org.springframework.mail.SimpleMailMessage; + +/** + * Created by Olga on 8/22/2016. + */ +public interface EmailService { + void sendSimpleMessage(String to, + String subject, + String text); + void sendSimpleMessageUsingTemplate(String to, + String subject, + SimpleMailMessage template, + String ...templateArgs); + void sendMessageWithAttachment(String to, + String subject, + String text, + String pathToAttachment); +} diff --git a/spring-mvc-email/src/main/java/com/baeldung/spring/mail/EmailServiceImpl.java b/spring-mvc-email/src/main/java/com/baeldung/spring/mail/EmailServiceImpl.java index bba646afcc..a6bcb00943 100644 --- a/spring-mvc-email/src/main/java/com/baeldung/spring/mail/EmailServiceImpl.java +++ b/spring-mvc-email/src/main/java/com/baeldung/spring/mail/EmailServiceImpl.java @@ -19,12 +19,57 @@ import java.io.File; * Created by Olga on 7/15/2016. */ @Component -@ConditionalOnClass(JavaMailSender.class) -public class EmailServiceImpl { +public class EmailServiceImpl implements EmailService { @Autowired public JavaMailSender emailSender; + public void sendSimpleMessage(String to, String subject, String text) { + try { + SimpleMailMessage message = new SimpleMailMessage(); + + message.setTo(to); + message.setSubject(subject); + message.setText(text); + + emailSender.send(message); + } catch (MailException exception) { + exception.printStackTrace(); + } + } + + @Override + public void sendSimpleMessageUsingTemplate(String to, + String subject, + SimpleMailMessage template, + String ...templateArgs) { + String text = String.format(template.getText(), templateArgs); + sendSimpleMessage(to, subject, text); + } + + @Override + public void sendMessageWithAttachment(String to, + String subject, + String text, + String pathToAttachment) { + try { + MimeMessage message = emailSender.createMimeMessage(); + // pass 'true' to the constructor to create a multipart message + MimeMessageHelper helper = new MimeMessageHelper(message, true); + + helper.setTo(to); + helper.setSubject(subject); + helper.setText(text); + + FileSystemResource file = new FileSystemResource(new File(pathToAttachment)); + helper.addAttachment("Invoice", file); + + emailSender.send(message); + } catch (MessagingException e) { + e.printStackTrace(); + } + } + /*public void sendMail(MimeMessage message) { try { emailSender.send(message); @@ -53,14 +98,6 @@ public class EmailServiceImpl { return message; }*/ - public void sendMail(SimpleMailMessage message) { - try { - emailSender.send(message); - } catch (MailException exception) { - exception.printStackTrace(); - } - } - /*@Autowired public SimpleMailMessage template; diff --git a/spring-mvc-email/src/main/java/com/baeldung/spring/mail/Order.java b/spring-mvc-email/src/main/java/com/baeldung/spring/mail/Order.java new file mode 100644 index 0000000000..cd1448b84b --- /dev/null +++ b/spring-mvc-email/src/main/java/com/baeldung/spring/mail/Order.java @@ -0,0 +1,43 @@ +package com.baeldung.spring.mail; + +/** + * Created by Olga on 8/22/2016. + */ +public class Order { + + public Order(String customerEmail, + String customerFirstName, + String customerLastName) { + this.customerEmail = customerEmail; + this.customerFirstName = customerFirstName; + this.customerLastName = customerLastName; + } + + private String customerEmail; + private String customerFirstName; + private String customerLastName; + + public String getCustomerEmail() { + return customerEmail; + } + + public void setCustomerEmail(String customerEmail) { + this.customerEmail = customerEmail; + } + + public String getCustomerFirstName() { + return customerFirstName; + } + + public void setCustomerFirstName(String customerFirstName) { + this.customerFirstName = customerFirstName; + } + + public String getCustomerLastName() { + return customerLastName; + } + + public void setCustomerLastName(String customerLastName) { + this.customerLastName = customerLastName; + } +} diff --git a/spring-mvc-email/src/main/java/com/baeldung/spring/mail/OrderManager.java b/spring-mvc-email/src/main/java/com/baeldung/spring/mail/OrderManager.java new file mode 100644 index 0000000000..23f6184c8a --- /dev/null +++ b/spring-mvc-email/src/main/java/com/baeldung/spring/mail/OrderManager.java @@ -0,0 +1,29 @@ +package com.baeldung.spring.mail; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.mail.SimpleMailMessage; +import org.springframework.stereotype.Component; + +/** + * Created by Olga on 8/22/2016. + */ +@Component +public class OrderManager { + @Autowired + public EmailService emailService; + + @Value("${attachment.invoice}") + private String invoiceAttachmentPath; + + @Autowired + public SimpleMailMessage template; + + public void placeOrder(Order order) { + emailService.sendSimpleMessageUsingTemplate(order.getCustomerEmail(), + "Order Confirmation", + template, + order.getCustomerFirstName(), + order.getCustomerLastName()); + } +} diff --git a/spring-mvc-email/src/main/resources/application.properties b/spring-mvc-email/src/main/resources/application.properties new file mode 100644 index 0000000000..07ded8f46b --- /dev/null +++ b/spring-mvc-email/src/main/resources/application.properties @@ -0,0 +1,20 @@ +# Gmail SMTP +spring.mail.host=smtp.gmail.com +spring.mail.port=587 +spring.mail.username=reva.olga@gmail.com +spring.mail.password=yubtqniqehrimqyf +spring.mail.properties.mail.smtp.auth=true +spring.mail.properties.mail.smtp.starttls.enable=true + +# Amazon SES SMTP +#spring.mail.host=email-smtp.us-west-2.amazonaws.com +#spring.mail.username=username +#spring.mail.password=password +#spring.mail.properties.mail.transport.protocol=smtp +#spring.mail.properties.mail.smtp.port=25 +#spring.mail.properties.mail.smtp.auth=true +#spring.mail.properties.mail.smtp.starttls.enable=true +#spring.mail.properties.mail.smtp.starttls.required=true + +# path to attachment file +attachment.invoice=c:/invoice.jpg \ No newline at end of file diff --git a/spring-mvc-email/src/main/webapp/WEB-INF/web.xml b/spring-mvc-email/src/main/webapp/WEB-INF/web.xml index b979e00276..cbc1bee20a 100644 --- a/spring-mvc-email/src/main/webapp/WEB-INF/web.xml +++ b/spring-mvc-email/src/main/webapp/WEB-INF/web.xml @@ -8,7 +8,7 @@ simpleweb org.springframework.web.servlet.DispatcherServlet - + 1 @@ -26,7 +26,7 @@ / - +