How to send email in Spring Boot Project via SMTP

To send an email using SMTP in Spring MVC or Spring Boot projects is pretty simple. In this post, I am going to share an easy method to send email in Spring projects.

Add Maven Dependency

black and gray digital device
Photo by Torsten Dettlaff on Pexels.com (How to Send An Email in Spring Boot Project)

Add spring-boot-starter-mail dependency on your project. It has all the packages that you require to send an email in Spring or Spring Boot project.

Here is a code snippet showing examples of how to add spring-boot-starter-mail to your project. Add the following code snippet to your pox.xml file.

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

Modify Application.properties file

If you are done importing the maven package to your project, now you are ready to configure how to send an email from your Spring project.

To do this, first, modify your application.properties file as shown below:

spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username=username
spring.mail.password=password

# Other properties
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.connectiontimeout=5000
spring.mail.properties.mail.smtp.timeout=5000
spring.mail.properties.mail.smtp.writetimeout=5000

# TLS , port 587
spring.mail.properties.mail.smtp.starttls.enable=true

# SSL, post 465
#spring.mail.properties.mail.smtp.socketFactory.port = 465
#spring.mail.properties.mail.smtp.socketFactory.class = javax.net.ssl.SSLSocketFactory

Sending Email using JavaMailSender

Here is an example showing how to use JavaMailSender to send emails in Spring Boot.

import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;

@Autowired
private JavaMailSender javaMailSender;
	
	void sendEmail() {

        SimpleMailMessage msg = new SimpleMailMessage();
        msg.setTo("to_1@gmail.com", "to_2@gmail.com", "to_3@yahoo.com");

        msg.setSubject("Testing from Spring Boot");
        msg.setText("Hello World \n Spring Boot Email");

        javaMailSender.send(msg);

}

Sending Email With Attachments

To send an email with attachments in Spring project, we should use a MIME multipart message from the JavaMail library instead of SimpleMailMessage (shown in the code snippet above).

Spring supports JavaMail messaging with the org.springframework.mail.javamail.MimeMessageHelper class.

@Override
public void sendMessageWithAttachment(
  String to, String subject, String text, String pathToAttachment) {
    // ...
    
    MimeMessage message = emailSender.createMimeMessage();
     
    MimeMessageHelper helper = new MimeMessageHelper(message, true);
    

    helper.setTo("to_1@gmail.com");
    helper.setSubject("Testing from Spring Boot");
    helper.setText("Hello World \n Spring Boot Email");
        
    FileSystemResource file 
      = new FileSystemResource(new File(pathToAttachment));
    helper.addAttachment("Invoice", file);

    emailSender.send(message);
    // ...
}

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *