diff --git a/spring-mvc-email/pom.xml b/spring-mvc-email/pom.xml new file mode 100644 index 0000000000..0ac84f5cc9 --- /dev/null +++ b/spring-mvc-email/pom.xml @@ -0,0 +1,142 @@ + + + 4.0.0 + + org.baeldung.spring + SpringMVCEmail + war + 1.0 + + + + + javax.servlet + javax.servlet-api + 3.0.1 + provided + + + + javax.servlet + jstl + 1.2 + + + + + org.springframework + spring-context + 4.2.5.RELEASE + + + + org.springframework + spring-core + 4.2.5.RELEASE + + + + org.springframework + spring-web + 4.2.5.RELEASE + + + + org.springframework + spring-webmvc + 4.2.5.RELEASE + + + + + javax.validation + validation-api + 1.1.0.Final + + + + + org.hibernate + hibernate-validator + 5.0.1.Final + + + + + org.springframework.data + spring-data-jpa + 1.10.1.RELEASE + + + + + org.springframework.security + spring-security-web + 4.0.4.RELEASE + + + org.springframework.security + spring-security-config + 4.0.4.RELEASE + + + + + com.sun.mail + javax.mail + 1.5.5 + + + + + org.springframework.integration + spring-integration-mail + 4.3.0.RELEASE + + + + + SpringMVCEmail + + + + + org.apache.tomcat.maven + tomcat6-maven-plugin + 2.2 + + http://localhost:8080/manager/text + TomcatServer + /SpringMVCEmail + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + 1.7 + 1.7 + + + + + org.apache.maven.plugins + maven-war-plugin + 2.4 + + src/main/webapp/WEB-INF/web.xml + + + src/main/resources/META-INF + + + + + + + \ No newline at end of file diff --git a/spring-mvc-email/src/main/java/com/baeldung/spring/config/AppConfig.java b/spring-mvc-email/src/main/java/com/baeldung/spring/config/AppConfig.java new file mode 100644 index 0000000000..2a7caadf23 --- /dev/null +++ b/spring-mvc-email/src/main/java/com/baeldung/spring/config/AppConfig.java @@ -0,0 +1,100 @@ +package com.baeldung.spring.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.mail.javamail.JavaMailSenderImpl; +import org.springframework.web.servlet.config.annotation.*; +import org.springframework.web.servlet.view.InternalResourceViewResolver; +import org.springframework.web.servlet.view.JstlView; +import org.springframework.web.servlet.view.UrlBasedViewResolver; + +import java.util.Properties; + +/** + * Created with IntelliJ IDEA. + * User: Olga + */ +@Configuration +@ComponentScan("com.baeldung.spring") +@EnableWebMvc //tha same as +public class AppConfig extends WebMvcConfigurerAdapter { + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); + } + + @Bean + public UrlBasedViewResolver urlBasedViewResolver() { + UrlBasedViewResolver resolver = new UrlBasedViewResolver(); + resolver.setOrder(0); + resolver.setPrefix("/WEB-INF/views/"); + resolver.setSuffix(".jsp"); + resolver.setCache(false); + resolver.setViewClass(JstlView.class); + return resolver; + } + + @Bean + public InternalResourceViewResolver internalResourceViewResolver() { + InternalResourceViewResolver resolver = new InternalResourceViewResolver(); + resolver.setOrder(1); + resolver.setPrefix("/WEB-INF/views/"); + resolver.setSuffix(".jsp"); + resolver.setViewClass(JstlView.class); + return resolver; + } + + /* Gmail */ + @Bean + public JavaMailSenderImpl mailSender() { + JavaMailSenderImpl mailSender = new JavaMailSenderImpl(); + mailSender.setHost("smtp.gmail.com"); + mailSender.setPort(587); + mailSender.setUsername("reva.olga"); + mailSender.setPassword("zakpnejnnoqkehgs"); + mailSender.setJavaMailProperties(javaMailProperties()); + return mailSender; + } + + private Properties javaMailProperties() { + Properties props = new Properties(); + props.setProperty("mail.smtp.auth", "true"); + props.setProperty("mail.smtp.starttls.enable", "true"); + 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() { + JavaMailSenderImpl mailSender = new JavaMailSenderImpl(); + mailSender.setHost("email-smtp.us-west-2.amazonaws.com"); + mailSender.setUsername("username"); + mailSender.setPassword("password"); + mailSender.setJavaMailProperties(javaMailProperties()); + return mailSender; + } + + private Properties javaMailProperties() { + Properties props = new Properties(); + props.setProperty("mail.transport.protocol", "smtps"); + props.setProperty("mail.smtp.port", "25"); + + props.put("mail.smtp.auth", "true"); + props.put("mail.smtp.starttls.enable", "true"); + props.put("mail.smtp.starttls.required", "true"); + return props; + }*/ +} 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 new file mode 100644 index 0000000000..656e237a9e --- /dev/null +++ b/spring-mvc-email/src/main/java/com/baeldung/spring/controllers/HomeController.java @@ -0,0 +1,19 @@ +package com.baeldung.spring.controllers; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +/** + * Created with IntelliJ IDEA. + * User: Olga + */ +@Controller +@RequestMapping({"/","/home"}) +public class HomeController { + + @RequestMapping(method = RequestMethod.GET) + 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 new file mode 100644 index 0000000000..5de722f444 --- /dev/null +++ b/spring-mvc-email/src/main/java/com/baeldung/spring/controllers/MailController.java @@ -0,0 +1,44 @@ +package com.baeldung.spring.controllers; + +import com.baeldung.spring.mail.MailService; +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. + */ +@Controller +@RequestMapping("/mail") +public class MailController { + @Autowired + public MailService mailService; + + @RequestMapping(value = "/send", method = RequestMethod.GET) + public String createMail(Model model) { + model.addAttribute("mailObject", new MailObject()); + return "mail/send"; + } + + @RequestMapping(value = "/send", method = RequestMethod.POST) + 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); + + return "redirect:/home"; + } +} diff --git a/spring-mvc-email/src/main/java/com/baeldung/spring/mail/Application.java b/spring-mvc-email/src/main/java/com/baeldung/spring/mail/Application.java new file mode 100644 index 0000000000..68f89f778d --- /dev/null +++ b/spring-mvc-email/src/main/java/com/baeldung/spring/mail/Application.java @@ -0,0 +1,20 @@ +package com.baeldung.spring.mail; + +import org.springframework.mail.SimpleMailMessage; + +/** + * Created by Olga on 7/15/2016. + */ +public class Application { + + public static void main(String ...args) { + MailService mailService = new MailService(); + + SimpleMailMessage message = new SimpleMailMessage(); + message.setFrom("from@test.com"); + message.setTo("to@test.com"); + message.setSubject("Test Message"); + + mailService.sendMail(message); + } +} diff --git a/spring-mvc-email/src/main/java/com/baeldung/spring/mail/MailService.java b/spring-mvc-email/src/main/java/com/baeldung/spring/mail/MailService.java new file mode 100644 index 0000000000..4deab12e0a --- /dev/null +++ b/spring-mvc-email/src/main/java/com/baeldung/spring/mail/MailService.java @@ -0,0 +1,73 @@ +package com.baeldung.spring.mail; + +import com.baeldung.spring.web.dto.MailObject; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.FileSystemResource; +import org.springframework.mail.MailException; +import org.springframework.mail.SimpleMailMessage; +import org.springframework.mail.javamail.JavaMailSender; +import org.springframework.mail.javamail.MimeMessageHelper; +import org.springframework.stereotype.Service; + +import javax.mail.MessagingException; +import javax.mail.internet.MimeMessage; +import java.io.File; + +/** + * Created by Olga on 7/15/2016. + */ +@Service +public class MailService { + @Autowired + public JavaMailSender mailSender; + + public void sendMail(MimeMessage message) { + try { + mailSender.send(message); + } catch (MailException exception) { + exception.printStackTrace(); + } + } + + public MimeMessage createMessageWithAttachment(MailObject mailObject) { + MimeMessage message = mailSender.createMimeMessage(); + try { + // pass 'true' to the constructor to create a multipart message + MimeMessageHelper helper = new MimeMessageHelper(message, true); + + helper.setFrom(mailObject.getFrom()); + helper.setTo(mailObject.getTo()); + helper.setSubject(mailObject.getSubject()); + helper.setText(mailObject.getText()); + + // attach a sample image attachment + FileSystemResource file = new FileSystemResource(new File("c:/attachment.jpg")); + helper.addAttachment("Attachment.jpg", file); + } catch (MessagingException e) { + e.printStackTrace(); + } + return message; + } + + public void sendMail(SimpleMailMessage message) { + try { + mailSender.send(message); + } catch (MailException exception) { + exception.printStackTrace(); + } + } + + @Autowired + public SimpleMailMessage template; + + public SimpleMailMessage createSimpleMailMessage(MailObject mailObject) { + SimpleMailMessage mailMessage = new SimpleMailMessage(template); + + mailMessage.setFrom(mailObject.getFrom()); + mailMessage.setTo(mailObject.getTo()); + mailMessage.setSubject(mailObject.getSubject()); + mailMessage.setText(String.format(template.getText(), mailObject.getText())); + + return mailMessage; + } +} diff --git a/spring-mvc-email/src/main/java/com/baeldung/spring/web/dto/MailObject.java b/spring-mvc-email/src/main/java/com/baeldung/spring/web/dto/MailObject.java new file mode 100644 index 0000000000..70975be84c --- /dev/null +++ b/spring-mvc-email/src/main/java/com/baeldung/spring/web/dto/MailObject.java @@ -0,0 +1,50 @@ +package com.baeldung.spring.web.dto; + +import org.hibernate.validator.constraints.Email; + +import javax.validation.constraints.NotNull; + +/** + * Created by Olga on 7/20/2016. + */ +public class MailObject { + @Email + private String from; + @NotNull + @Email + private String to; + private String subject; + private String text; + + public String getFrom() { + return from; + } + + public void setFrom(String from) { + this.from = from; + } + + public String getTo() { + return to; + } + + public void setTo(String to) { + this.to = to; + } + + public String getSubject() { + return subject; + } + + public void setSubject(String subject) { + this.subject = subject; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } +} diff --git a/spring-mvc-email/src/main/resources/META-INF/application.xml b/spring-mvc-email/src/main/resources/META-INF/application.xml new file mode 100644 index 0000000000..f2d901b497 --- /dev/null +++ b/spring-mvc-email/src/main/resources/META-INF/application.xml @@ -0,0 +1,19 @@ + + + + + + SpringMVCEmail.war + SpringMVCEmail + + + + + web.war + SpringMVCEmail + + + \ No newline at end of file diff --git a/spring-mvc-email/src/main/webapp/WEB-INF/views/home.jsp b/spring-mvc-email/src/main/webapp/WEB-INF/views/home.jsp new file mode 100644 index 0000000000..74165f2626 --- /dev/null +++ b/spring-mvc-email/src/main/webapp/WEB-INF/views/home.jsp @@ -0,0 +1,25 @@ +<%-- + Created by IntelliJ IDEA. + User: Olga + Date: 1/19/16 + Time: 3:53 PM + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + Home Page + + +
+
+

Send Email

+
+ +
+
+
+ + \ No newline at end of file diff --git a/spring-mvc-email/src/main/webapp/WEB-INF/views/mail/send.jsp b/spring-mvc-email/src/main/webapp/WEB-INF/views/mail/send.jsp new file mode 100644 index 0000000000..9e9cbc1ff7 --- /dev/null +++ b/spring-mvc-email/src/main/webapp/WEB-INF/views/mail/send.jsp @@ -0,0 +1,60 @@ +<%-- + Created by IntelliJ IDEA. + User: Olga + Date: 7/20/2016 + Time: 1:47 PM + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + + + Send Email + + +
+

Create Email

+ +
+ + + + + + + + + + + + + + + + + + + + +
+ Enter email address
+ +
+ Enter your email address
+ +
+ Enter the subject
+ +
+ Enter message text
+ +
+ Send +
+
+
+
+ + diff --git a/spring-mvc-email/src/main/webapp/WEB-INF/web.xml b/spring-mvc-email/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000000..5fe46d45d6 --- /dev/null +++ b/spring-mvc-email/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,28 @@ + + + + + simpleweb + org.springframework.web.servlet.DispatcherServlet + + contextClass + + org.springframework.web.context.support.AnnotationConfigWebApplicationContext + + + + contextConfigLocation + com.baeldung.spring.config.AppConfig + + 1 + + + + simpleweb + / + +