简体   繁体   中英

Javax mail configuration migration to jakarta mail

I am trying to migrate javax.mail API used for sending emails to newer implementation aligned with jakarta standard. I have configured JavaMailSender by code below:

package pl.app.email;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;

@Configuration
public class EmailConfig {

    @Bean
    public JavaMailSender getJavaMailSender(AppProperties appProperties) {
        var mailSender = new JavaMailSenderImpl();
        mailSender.setHost(appProperties.getEmailProperties().getHost());
        mailSender.setPort(appProperties.getEmailProperties().getPort());

        mailSender.setUsername(appProperties.getEmailProperties().getUsername());
        mailSender.setPassword(appProperties.getEmailProperties().getPassword());
        mailSender.setDefaultEncoding("UTF-8");

        var props = mailSender.getJavaMailProperties();
        props.put("mail.transport.protocol", appProperties.getEmailProperties().getMailTransportProtocol());
        props.put("mail.smtp.auth", appProperties.getEmailProperties().getMailSmtpAuth());
        props.put("mail.smtp.starttls.enable", appProperties.getEmailProperties().getMailSmtpStartTlsEnable());
        props.put("mail.debug", appProperties.getEmailProperties().getMailDebug());

        return mailSender;
    }

}

I have started from changing maven dependencies from

<dependency>
  <groupId>javax.mail</groupId>
  <artifactId>javax.mail-api</artifactId>
  <version>1.6.2</version>
</dependency>
<dependency>
  <groupId>com.sun.mail</groupId>
  <artifactId>javax.mail</artifactId>
  <version>1.6.2</version>
</dependency>

to newer maven dependencies

<dependency>
  <groupId>jakarta.mail</groupId>
  <artifactId>jakarta.mail-api</artifactId>
  <version>2.1.0</version>
</dependency>
<dependency>
  <groupId>com.sun.mail</groupId>
  <artifactId>jakarta.mail</artifactId>
  <version>2.0.1</version>
</dependency>

During application start error occurred:

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.mail.javamail.JavaMailSender]: Factory method 'getJavaMailSender' threw exception with message: Provider for jakarta.activation.spi.MimeTypeRegistryProvider cannot be found
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:171)
    at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:648)
    ... 72 common frames omitted
Caused by: java.lang.RuntimeException: Provider for jakarta.activation.spi.MimeTypeRegistryProvider cannot be found
    at jakarta.activation.FactoryFinder.find(FactoryFinder.java:90)
    at jakarta.activation.MimetypesFileTypeMap.getImplementation(MimetypesFileTypeMap.java:389)
    at jakarta.activation.MimetypesFileTypeMap.loadFile(MimetypesFileTypeMap.java:271)
    at jakarta.activation.MimetypesFileTypeMap.<init>(MimetypesFileTypeMap.java:108)
    at jakarta.activation.MimetypesFileTypeMap.<init>(MimetypesFileTypeMap.java:313)
    at org.springframework.mail.javamail.ConfigurableMimeFileTypeMap.createFileTypeMap(ConfigurableMimeFileTypeMap.java:150)
    at org.springframework.mail.javamail.ConfigurableMimeFileTypeMap.getFileTypeMap(ConfigurableMimeFileTypeMap.java:123)
    at org.springframework.mail.javamail.ConfigurableMimeFileTypeMap.afterPropertiesSet(ConfigurableMimeFileTypeMap.java:110)
    at org.springframework.mail.javamail.JavaMailSenderImpl.<init>(JavaMailSenderImpl.java:115)
    at pl.app.email.EmailConfig.getJavaMailSender(EmailConfig.java:13)
    ...

Where I can find provider for jakarta.activation.spi.MimeTypeRegistryProvider? Am I missing some new dependency?

I have found com.sun.activation.registries.MimeTypeRegistryProviderImpl provider in

<dependency>
  <groupId>org.eclipse.angus</groupId>
  <artifactId>angus-activation</artifactId>
  <version>1.0.0</version>
</dependency>

dependency. Code still compiles and starts without missing jakarta.activation.spi.MimeTypeRegistryProvider error. That is the first implementation I have found.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM