Spring – Sending E-mail via Gmail SMTP server with MailSender

Spring comes with a useful ‘org.springframework.mail.javamail.JavaMailSenderImpl‘ class to simplify the e-mail sending process via JavaMail API. Here’s a Maven build project to use Spring’s ‘JavaMailSenderImpl‘ to send an email via Gmail SMTP server.

1. Project dependency

Add the JavaMail and Spring’s dependency.

File : 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.mkyong.common</groupId>
  <artifactId>SpringExample</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>SpringExample</name>
  <url>http://maven.apache.org</url>
  
  <repositories>
  	<repository>
  		<id>Java.Net</id>
  		<url>http://download.java.net/maven/2/</url>
  	</repository>
  </repositories>
  
  <dependencies>

    <dependency>
              <groupId>junit</groupId>
              <artifactId>junit</artifactId>
              <version>3.8.1</version>
             <scope>test</scope>
    </dependency>
    
    <!-- Java Mail API -->
    <dependency>
	    <groupId>javax.mail</groupId>
	    <artifactId>mail</artifactId>
	    <version>1.4.3</version>
    </dependency>
    
    <!-- Spring framework -->
    <dependency>
     	    <groupId>org.springframework</groupId>
	    <artifactId>spring</artifactId>
	    <version>2.5.6</version>
    </dependency>
    
  </dependencies>
</project>

2. Spring’s Mail Sender

A Java class to send email with the Springโ€™s MailSender interface.

File : MailMail.java


package com.mkyong.common;

import org.springframework.mail.MailSender;
import org.springframework.mail.SimpleMailMessage;

public class MailMail
{
	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(to);
		message.setSubject(subject);
		message.setText(msg);
		mailSender.send(message);	
	}
}

3. Bean configuration file

Configure the mailSender bean and specify the email details for the Gmail SMTP server.

File : Spring-Mail.xml


<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
	<property name="host" value="smtp.gmail.com" />
	<property name="port" value="587" />
	<property name="username" value="username" />
	<property name="password" value="password" />
		
	<property name="javaMailProperties">
	   <props>
       	      <prop key="mail.smtp.auth">true</prop>
       	      <prop key="mail.smtp.starttls.enable">true</prop>
       	   </props>
	</property>
</bean>
	
<bean id="mailMail" class="com.mkyong.common.MailMail">
	<property name="mailSender" ref="mailSender" />
</bean>
	
</beans>

4. Run it


package com.mkyong.common;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App 
{
    public static void main( String[] args )
    {
    	ApplicationContext context = 
             new ClassPathXmlApplicationContext("Spring-Mail.xml");
    	 
    	MailMail mm = (MailMail) context.getBean("mailMail");
        mm.sendMail("from@no-spam.com",
    		   "to@no-spam.com",
    		   "Testing123", 
    		   "Testing only \n\n Hello Spring Email Sender");
        
    }
}

Download Source Code

author image

mkyong

Founder of Mkyong.com, love Java and open source stuff. Follow him on Twitter. If you like my tutorials, consider make a donation to these charities. Read all published posts by

Comments

avatar
newest oldest most voted
subodh
Guest
subodh

how to send emails using gwt and spring.

subodh
Guest
subodh

how to send emails using gwt and spring and hibernate.

ben
Guest
ben

I tried the example and it worked fine. but what I want is that a user can send email to an other user in my application how can I achieve that with spring boot . thanks

Syed Abid
Guest
Syed Abid

I am getting multiple mails of the same message , how to fix that ?

trackback
Spring – Define an E-mail template in bean configuration file | Spring

[…] in bean configuration file Written on March 30, 2010 at 3:45 pm by mkyong In last Spring’s email tutorial, you hard-code all the email properties and message content in the method body, it’s not […]

Vinidog
Guest
Vinidog

Nice tuto guy!!!

Tks a lot ๐Ÿ˜‰

anilkumar
Guest
anilkumar

Hi,

Nice tutorail, but
org.springframework.mail.MailSender
is not resolved

Where I can get jar…?

Chathuranga Withana
Guest
Chathuranga Withana

Nice tutorial…. it works…

How can i set proxy settings here, to send emails through network that uses a proxy server?

Thanks!

Sertac
Guest
Sertac

I’m getting following error please help ๐Ÿ™

nested exception is javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 587;
Caused by: javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 587;
  nested exception is:
	java.net.ConnectException: Connection refused: connect
	at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1706)
	at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:525)
	at javax.mail.Service.connect(Service.java:291)
	at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:389)
	... 9 more
Caused by: java.net.ConnectException: Connection refused: connect
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
	at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
	at java.net.Socket.connect(Socket.java:529)
	at java.net.Socket.connect(Socket.java:478)
	at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:284)
	at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:227)
	at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1672)
	... 12 more

Process finished with exit code 1

Thanks.

trackback
Spring Tutorials

[…] framework.Spring E-mail SupportSpring’s provides MailSender to sent email via JavaMail API.Sending E-mail via MailSender Example to use Spring’s MailSender to send an email via Gmail SMTP server.E-mail template in […]

jaime
Guest
jaime

cool!

ramesh
Guest
ramesh

Nice tutorial,

ramesh
Guest
ramesh

i want to insert hyperlink in mail, how to do it with spring please tell me any one knows….

CK
Guest
CK

Thanks for you example.

BTW, does anyone know can we use this for commercial purpose? Does it violate any Gmail’s rules?

trackback
Java: Send Mail Gagal? «

[…] itu jadi berhasil ngirim email dengan memanfaatkan SMTP GMail. Caranya ngeliat di sini. LD_AddCustomAttr("AdOpt", "1"); LD_AddCustomAttr("Origin", "other"); […]

Dinesh
Guest
Dinesh

I have done above example but its giving runtime exeception as:

Failed messages: com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.0 Must issue a STARTTLS command first. xu6sm19670673igb.7

Ludvianto Ovandi
Guest
Ludvianto Ovandi
org.springframework.mail.MailSendException: Mail server connection failed; nested exception is javax.mail.MessagingException: Could not connect to SMTP host: localhost, port: 25;
  nested exception is:
	java.net.ConnectException: Connection refused: connect. Failed messages: javax.mail.MessagingException: Could not connect to SMTP host: localhost, port: 25;
  nested exception is:
	java.net.ConnectException: Connection refused: connect; message exception details (1) are:
Failed message 1:
javax.mail.MessagingException: Could not connect to SMTP host: localhost, port: 25;
  nested exception is:
	java.net.ConnectException: Connection refused: connect
	at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1391)
Ludvianto Ovandi
Guest
Ludvianto Ovandi

Why they call localhost with port 25 ??

GAURAV SINGH
Guest
GAURAV SINGH

is it work for port=465 for secure connection

Bharat
Guest
Bharat

Great Tutorial !!! Thanks Mkyoung !

KN (Karunakar Neravetla)
Guest
KN (Karunakar Neravetla)

Do you know how to get a delivery notificaiton of an email sent by using JavaMailSenderImpl.

I have tried to set the following properties and tried, but it doesn’t work.

true
true
true
ISO-8859-1
“SUCCESS, FAILURE ORCPT=rfc822;myemail@anyhost.com”
HDRS

Just another name
Guest
Just another name

Thanks a lot, it was really useful. There is a

simpleMailMessage

in the project that can be downloaded which isn’t really used (and it’s not used in the example on this page), you may want to delete in there.

trackback
Spring and Hibernate » Agile Mobile Developer
Koushik Roy
Guest
Koushik Roy

Is there any way to know whether the email has been successfully delivered or not. I meant to say whether any bounce back message is there?

patric
Guest
patric

I getting the error as below when I am trying the send the email via the spring mvc framework. I could not figure out the problem. Can anyone help me with the solution? Is the below error meant that I cant access the smtp of the gmail host? DEBUG: JavaMail version 1.4.3 DEBUG: successfully loaded resource: /META-INF/javamail.default.providers DEBUG: Tables of loaded providers DEBUG: Providers Listed By Class Name: {com.sun.mail.smtp.SMTPSSLTransport=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc], com.sun.mail.imap.IMAPSSLStore=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3SSLStore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc], com.sun.mail.imap.IMAPStore=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3Store=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc]} DEBUG: Providers Listed By Protocol: {imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], imap=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], smtps=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc],… Read more »

Ankit Kothana
Guest
Ankit Kothana

code works fine but mail is not recieved at the other hand. please help..

Gabby
Guest
Gabby

Hi, I am having the same problem

Petri
Guest
Petri

Hi,

i just followed your tutorial and got a “org.springframework.mail.MailAuthenticationException” but managed to solve it. Problem was that freshly created gmail -account is blocked somehow, tried with my own personal account and problem was gone.

Rohit
Guest
Rohit

Nice work mkong!!! Keep it coming

shilpa
Guest
shilpa

Hi I’m using javamailproperties in the mail bean. I want bounced email notification to be send to another address rather than “from” address in the mail. I’m not getting error but bounced mails are not being sent either. bean properties <bean id="MailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> <property name="host" value="${MAIL_HOST}"/> <property name="port" value="${MAIL_PORT}"/> <property name="javaMailProperties"> <props> <prop key="mail.debug">true</prop> <prop key="mail.transport.protocol">smtp</prop> <!--prop key="mail.smtp.auth">false</prop--> <prop key="mail.smtp.starttls.enable">false</prop> <prop key="mail.smtp.from">xxx@gmail.com</prop> </props> </property> </bean> java mail sender is public void sendMail(final MailBean p_mailBean) { MimeMessagePreparator l_preparator = new MimeMessagePreparator() { public void prepare(MimeMessage p_msg) throws Exception { //p_msg.setHeader("Return-Path", "<sdanwe@espresso.co.uk>"); p_msg.setRecipient(RecipientType.TO, new InternetAddress(p_mailBean.getRecipient())); if (p_mailBean.getFrom() != null && !"".equals(p_mailBean.getFrom())) {… Read more »

shilpa
Guest
shilpa
himanshu
Guest
himanshu

nice tutorial boss

Silvio
Guest
Silvio

Thank you dude!

TanViet
Guest
TanViet

I have downloaded your source code but I see your code in this article is quite different from your code in source code. Which code should I refer?