Mail senden in Spring / Java

Um Mails über einen SMTP-Server in Spring zu versenden, wollen wir das JavaMailSender Interface benutzen. Hierzu müssen wir die JavaMailSenderImpl-Klasse konfigurieren, welche das Interface umsetzt:

1. Maven dependencies

Als erstes müssen wir unser pom.xml um die entsprechenden Libraries ergänzen, wobei die entsprechenden Versions-Nummern auf die aktuelle Version zeigen sollten:

<properties>
    <spring.version>5.2.18.RELEASE</spring.version>
    <email.version>1.16.2</email.version>
</properties>

<!-- Spring Context Support -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
    <version>${spring.version}</version>
</dependency>
 
<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>javax.mail</artifactId>
    <version>${email.version}</version>
</dependency>
Code-Sprache: HTML, XML (xml)

2. Konfiguration

Danach müssen wir die Daten des SMTP-Servers bereitstellen. Dies machen wir programmatisch über eine @Configuration-Klasse.

EmailConfig.java:

import java.util.Properties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
 
@Configuration
public class EmailConfig 
{
    @Bean
    public JavaMailSender getJavaMailSender() 
    {
        JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
        mailSender.setHost("smtp.beispielmailserver.com");
        mailSender.setPort(25);
          
        mailSender.setUsername("[email protected]");
        mailSender.setPassword("passwort");
          
        Properties props = mailSender.getJavaMailProperties();
        props.put("mail.transport.protocol", "smtp");
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.debug", "true");
          
        return mailSender;
    }
}Code-Sprache: JavaScript (javascript)

3. Mail versenden

Nun können wir die so konfigurierte Klasse über Dependency Injection in einem Service verwenden, um darüber eine Mail zu versenden.

EmailService.java:


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.stereotype.Service;
 
@Service("emailService")
public class EmailService 
{
    @Autowired
    private JavaMailSender mailSender;

  
    /** 
     * Versenden einer Email 
     */
    public void sendMail(String from, String to, String subject, String body) 
    {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(from);
        message.setTo(to);
        message.setSubject(subject);
        message.setText(body);
        mailSender.send(message);
    }
 

}Code-Sprache: JavaScript (javascript)