Send e-mail in java spring mvc using gmail smtp server example

Spring 4 - Send email in Java using gmail smtp server with mailsender

In this post, we are going to let you know how to send email using Gmail SMTP in Spring MVC.
To present this in a better way we have developed a small single page Contact Us app.Let go through this application

Below Technologies we have used in this application.


  • Spring 4.1.6.RELEASE
  • JDK 1.8
  • Tomcat 8
  • Bootstrap 3


Step1- Create Maven web application.
Step2- Update pom.xml for spring dependency.

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.skuera</groupId>
  <artifactId>contactApp</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>ProdoApp Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
     
 <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
</dependency>

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>


<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>

<dependency>
    <groupId>org.springframework.integration</groupId>
    <artifactId>spring-integration-mail</artifactId>
    <version>4.1.6.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.mail/mail -->
<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4</version>
</dependency>

  <dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>3.1.0</version>
  </dependency>
  </dependencies>
  <build>
    <finalName>contactApp</finalName>
     <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
             <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>2.4</version>
                    <configuration>
                        <warSourceDirectory>src/main/webapp</warSourceDirectory>
                        <warName>contactApp</warName>
                        <failOnMissingWebXml>false</failOnMissingWebXml>
                    </configuration>
                </plugin>
        </plugins>
  </build>

</project>

Step3-Create the configuration files.

Configuration Files

In this application, we are  going to do all the spring configurations including mail in Java classes.For the mail configuration, we are going to use JavaMailSenderImpl class provided by spring framework.
In ContactConfig.java spring configuration is done whereas in ContactInitializer.java our web.xml is configured using AbstractAnnotationConfigDispatcherServletInitializer .

ContactConfig.java

package com.skuera.config;

import java.util.Properties;


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;

/**
 * @author skuera
 *
 */
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.skuera")
public class ContactConfig extends WebMvcConfigurerAdapter{

    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {

        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setViewClass(JstlView.class);
        viewResolver.setPrefix("/WEB-INF/views/");
        viewResolver.setSuffix(".jsp");
        registry.viewResolver(viewResolver);
    }
     

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**").addResourceLocations("/");
    }

    
    @Bean
public JavaMailSenderImpl email(){
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setHost("smtp.gmail.com");
mailSender.setPort(587);
//Enter email id from which you wants to send email
mailSender.setUsername("your gmail id");
//Enter email password
mailSender.setPassword("your password");
Properties prop = mailSender.getJavaMailProperties();
prop.put("mail.smtp.auth", "true");
prop.put("mail.smtp.starttls.enable", "true");
return mailSender;
}

}

ContactInitializer.java

package com.skuera.config;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

/**
 * @author skuera
 *
 */
public class ContactInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

 
   @Override
   protected Class<?>[] getRootConfigClasses() {
       return new Class[] { ContactConfig.class };
   }
 
   @Override
   protected Class<?>[] getServletConfigClasses() {
       return null;
   }
 
   @Override
   protected String[] getServletMappings() {
       return new String[] { "/" };
   }
 

}

Controller

To handle the user request we use the controller in MVC architecture of Spring.In Spring MVC flow request from dispatcher servlet first, comes to the controller.

MailController.java

package com.skuera.controller;


import java.util.ArrayList;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.skuera.mail.SendMail;
import com.skuera.model.EmailModel;

/**
 * @author skuera
 *
 */
@Controller
public class MailController {
@Autowired
@Qualifier("mail")
private SendMail mail;



public void setMail(SendMail mail) {
this.mail = mail;
}

@RequestMapping(value="/mailform.view",method=RequestMethod.GET)
private String getform(HttpServletRequest request,HttpServletResponse response,ModelMap model){
ArrayList<String> issue=new ArrayList<>();
EmailModel contactForm=new EmailModel();
issue.add("Order");
issue.add("Shipping");
model.addAttribute("issueList",issue);
model.addAttribute("cform",contactForm);
return "ContactForm";
}
@RequestMapping(value="/mailform.view",method=RequestMethod.POST)
private String sendform(@ModelAttribute("cform") EmailModel email) {
String from=email.getFrom();
String to=email.getTo();
String subject=email.getSubject();
String issue=email.getIssue();
subject=issue+"-"+subject;
String msg=email.getMessage();
mail.sendMail(from, to, subject, msg);
return "Success";
}

}

Model

Model is a POJO class which has the email component.The contact form is mapped with the model to transfer data from form to controller.

EmailModel.java

package com.skuera.model;

public class EmailModel {

private String from;
private String to;
private String subject;
private String issue;
private String message;
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 getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getIssue() {
return issue;
}
public void setIssue(String issue) {
this.issue = issue;
}
}

MailSender object gets created and in sendMail method to send the email in this class.

SendMail.java

package com.skuera.mail;




import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.MailSender;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.stereotype.Component;

@Component("mail")
public class SendMail {

@Autowired
private MailSender mailSender;

public void setMailSender(MailSender mailSender) {
this.mailSender = mailSender;
}

public void sendMail(String from, String to, String subject, String msg) {

SimpleMailMessage message = new SimpleMailMessage();

message.setFrom(from);
message.setTo("skupadhyay024@gmail.com");
message.setSubject(subject);
message.setText(msg);
mailSender.send(message);
}

}


JSP Files

ContactForm.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@taglib prefix="form" uri="http://www.springframework.org/tags/form"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>

<head>
<link
href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css"
rel="stylesheet">
<script
src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script>

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<div class="container">
<div class="well lead">Contact Us</div>

<form:form method="post" modelAttribute="cform"
class="form-horizontal">

<div class="row">

<div class="form-group col-md-12">
<label class="col-md-3 control-lable" for="eName">Email</label>
<div class="col-md-7">
<form:input type="text" path="from" class="form-control input-sm"
required="required" />

</div>
</div>
</div>


<div class="row">

<div class="form-group col-md-12">
<label class="col-md-3 control-lable" for="eGender">Title</label>
<div class="col-md-7">
<form:input type="text" path="subject"
class="form-control input-sm" required="required" />
</div>
</div>
</div>

<div class="row">
<div class="form-group col-md-12">
<label class="col-md-3 control-lable" for="department">Issue</label>
<div class="col-md-7">

<form:select path="issue" class="form-control input-sm">
<form:options items="${issueList}" />
</form:select>

</div>
</div>
</div>

<div class="row">
<div class="form-group col-md-12">
<label class="col-md-3 control-lable" for="department">Description</label>
<div class="col-md-7">

<form:textarea path="message" class="form-control input-sm"
required="required" />

</div>
</div>
</div>




<div class="row">
<div class="form-actions floatRight">


<input type="submit" value="Send" id="btn"
class="btn btn-primary btn-sm" /> <input type="reset"
value="Reset" class="btn btn-primary btn-sm" />


</div>
</div>

</form:form>
</div>


</body>
</html>


Contact Us

index.jsp

<html>
<body>
<h2><a href="mailform.view">Contact Us</a></h2>
</body>
</html>

Success.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
Thanks for Contacting Us..
</body>
</html>

The full code can be downloaded from GitHub.


You may be interested in Spring MVC-Hibernate-CRUD-Application.



Give you suggestion in comments.If you like the post Share with your friends on social network.
Send e-mail in java spring mvc using gmail smtp server example Send e-mail in java spring mvc using gmail smtp server example Reviewed by JavaInstance on 8:36:00 AM Rating: 5

No comments:

Powered by Blogger.