Javax邮件配置迁移到jakarta邮件



我正在尝试迁移javax。邮件API,用于向符合雅加达标准的新实现发送电子邮件。我已经通过下面的代码配置了JavaMailSender:

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;
}
}

我已经从

开始更改maven依赖项
<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>

到新的maven依赖项

<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>

应用程序启动时出现错误:

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)
...

我在哪里可以找到jakarta.activation.spi. mimetyperregistryprovider的提供者?我是不是漏掉了一些新的依赖项?

我找到了com.sun.activation.registries. mimetyperregistryproviderimpl provider

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

依赖。代码仍然可以编译和启动,而不会丢失jakarta.activation.spi. mimetyperregistryprovider错误。这是我找到的第一个实现。

最新更新