diff --git a/src/main/java/com/tarento/retail/service/impl/UserServiceImpl.java b/src/main/java/com/tarento/retail/service/impl/UserServiceImpl.java
index 502787dd0cecd05fa15b23898f519f6b14cab64d..3c755edc6fca289b98726f2e52c274abba33a5a9 100644
--- a/src/main/java/com/tarento/retail/service/impl/UserServiceImpl.java
+++ b/src/main/java/com/tarento/retail/service/impl/UserServiceImpl.java
@@ -15,6 +15,7 @@ import java.util.Map.Entry;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
+import org.apache.velocity.VelocityContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -506,8 +507,10 @@ public class UserServiceImpl implements UserDetailsService, UserService {
 			String otp = Util.generateOTP();
 			// send Email
 			String[] receipent = { email };
-			Boolean sendEmail = NotificationService.sendMail(receipent, Constants.OTP_EMAIL_SUBJECT,
-					String.format(Constants.OTP_EMAIL_BODY, otp));
+			VelocityContext context = new VelocityContext();
+			context.put("otp", otp);
+			Boolean sendEmail = NotificationService.sendMail(receipent, Constants.OTP_EMAIL_SUBJECT, context,
+					Constants.EmailTemplate.OTP);
 			if (sendEmail) {
 				Cache.setUserOTPData(email, otp);
 				return Boolean.TRUE;
@@ -522,17 +525,9 @@ public class UserServiceImpl implements UserDetailsService, UserService {
 	@Override
 	public Boolean validateUserOTP(String username, String otp) {
 		try {
-			// LoginDto loginDto = new LoginDto();
 			LoginAuthentication loginAuth = Cache.getUserAuthData(username);
 			if (loginAuth != null && loginAuth.getOtpExpiryDate() > DateUtil.getCurrentTimestamp()
 					&& loginAuth.getOtp().equals(otp)) {
-				// // generate user session id and cache it
-				// String sessionId = Util.getUniqueSessionId(username);
-				// Cache.setTokenDetails(username, sessionId);
-				//
-				// loginDto.setAuthToken(sessionId);
-				// loginDto.setUsername(username);
-				// return loginDto;
 				return Boolean.TRUE;
 			}
 		} catch (Exception e) {
diff --git a/src/main/java/com/tarento/retail/util/Constants.java b/src/main/java/com/tarento/retail/util/Constants.java
index d48cc60359e7f7d796801644146abf538e786d29..cc2bc645001e8c50c2e40e61d764c497c542d0f3 100644
--- a/src/main/java/com/tarento/retail/util/Constants.java
+++ b/src/main/java/com/tarento/retail/util/Constants.java
@@ -85,6 +85,10 @@ public class Constants {
 	public static final String OTP_EMAIL_SUBJECT = "UP SMF - OTP request";
 	public static final String OTP_EMAIL_BODY = "UP SMF login OTP: %s. Valid for 5 minutes";
 
+	public interface EmailTemplate {
+		public static final String OTP = "/otp_template.vm";
+	}
+
 	public static enum CountryList {
 		SWE(1, "Sweden", "SWEDEN"), NOR(2, "Norway", "NORWAY"), FIN(3, "Finland", "FINLAND"), IND(4, "India", "INDIA");
 		private int countryCode;
diff --git a/src/main/java/com/tarento/retail/util/NotificationService.java b/src/main/java/com/tarento/retail/util/NotificationService.java
index 6581ab419a82e4b7d0f2403f798bc0c4d1e419a0..eefa88ee8fbfd057866f45b7cdd7a5b7828ce1d3 100644
--- a/src/main/java/com/tarento/retail/util/NotificationService.java
+++ b/src/main/java/com/tarento/retail/util/NotificationService.java
@@ -1,5 +1,6 @@
 package com.tarento.retail.util;
 
+import java.io.StringWriter;
 import java.util.Properties;
 
 import javax.mail.Message;
@@ -8,6 +9,11 @@ import javax.mail.Transport;
 import javax.mail.internet.InternetAddress;
 import javax.mail.internet.MimeMessage;
 
+import org.apache.velocity.Template;
+import org.apache.velocity.VelocityContext;
+import org.apache.velocity.app.VelocityEngine;
+import org.apache.velocity.runtime.RuntimeConstants;
+import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -36,18 +42,17 @@ public class NotificationService {
 	}
 
 	private static final String SMTP = "smtp";
+	private static final String TEXT_HTML = "text/html";
 
 	/**
 	 * this method is used to send email.
 	 *
 	 * @param receipent
 	 *            email to whom we send mail
-	 * @param context
-	 *            VelocityContext
-	 * @param templateName
-	 *            String
 	 * @param subject
 	 *            subject
+	 * @param body
+	 *            body
 	 */
 	@Async
 	public static Boolean sendMail(String[] recipient, String subject, String body) {
@@ -78,4 +83,52 @@ public class NotificationService {
 		return Boolean.FALSE;
 	}
 
+	/**
+	 * this method is used to send email.
+	 * 
+	 * @param receipent
+	 *            email to whom we send mail
+	 * @param context
+	 *            VelocityContext
+	 * @param templateName
+	 *            String
+	 * @param subject
+	 *            subject
+	 * @return
+	 */
+	@Async
+	public static Boolean sendMail(String[] receipent, String subject, VelocityContext context, String templateName) {
+		try {
+			Session session = Session.getInstance(props,
+					new GMailAuthenticator(appConfiguration.getSmtpUser(), appConfiguration.getSmtpPassword()));
+			MimeMessage message = new MimeMessage(session);
+			message.setFrom(new InternetAddress(appConfiguration.getSmtpEmail()));
+			int size = receipent.length;
+			int i = 0;
+			while (size > 0) {
+				message.addRecipient(Message.RecipientType.BCC, new InternetAddress(receipent[i]));
+				i++;
+				size--;
+			}
+			message.setSubject(subject);
+			VelocityEngine engine = new VelocityEngine();
+			engine.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath");
+			engine.setProperty("classpath.resource.loader.class", ClasspathResourceLoader.class.getName());
+			engine.init();
+			Template template = engine.getTemplate(templateName);
+			StringWriter writer = new StringWriter();
+			template.merge(context, writer);
+			message.setContent(writer.toString(), TEXT_HTML);
+			Transport transport = session.getTransport(SMTP);
+			transport.connect(appConfiguration.getSmtpHost(), appConfiguration.getSmtpUser(),
+					appConfiguration.getSmtpPassword());
+			transport.sendMessage(message, message.getAllRecipients());
+			transport.close();
+			return Boolean.TRUE;
+		} catch (Exception e) {
+			LOGGER.error(String.format("Exception in %s : %s", "sendMail", e.getMessage()));
+			return Boolean.FALSE;
+		}
+	}
+
 }