首页 > 解决方案 > JavaMailSenderImpl 上的消息异常

问题描述

我正在尝试使用 org.springframework.mail.MailSender 提供电子邮件发送。

我在以下类中配置了 MailSender 和 MessageSource-bean:

  @Configuration

 public class MailProvider {

@Bean(name = "mailSender")
public MailSender javaMailService() {
    JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
    javaMailSender.setHost("smtp.gmail.com");
    javaMailSender.setPort(587);
    javaMailSender.setProtocol("smtp");
    Properties mailProperties = new Properties();
    mailProperties.put("mail.smtp.auth", Boolean.TRUE);
    mailProperties.put("mail.transport.protocol", "smtp");
    mailProperties.put("mail.smtp.starttls.enable", Boolean.TRUE);
    mailProperties.put("mail.smtp.debug", Boolean.TRUE);
    javaMailSender.setJavaMailProperties(mailProperties);
    return javaMailSender;
}

@Bean
public MessageSource messageSource() {
    final ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
    messageSource.setUseCodeAsDefaultMessage(true);
    messageSource.setDefaultEncoding("UTF-8");
    messageSource.setCacheSeconds(0);
    return messageSource;
}

@Bean
public PostUserListener getListener() {
    return new PostUserListener();
}

@Bean(name = "email")
public SimpleMailMessage getMessage() {
    return new SimpleMailMessage();
}

  }

在应用程序部署(tomcat)期间,我捕获了异常:

java.lang.NoClassDefFoundError: javax/mail/MessagingException
at ru.spb.dreamwhite.config.MailProvider.javaMailService(MailProvider.java:23)

Caused by: java.lang.ClassNotFoundException: javax.mail.MessagingException
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1365)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1188)

我使用上述 bean 的类:

@Component
public class PostUserListener implements ApplicationListener<OnPostUserDataEvent> {

private static Logger logger = Logger.getLogger(PostUserListener.class.getName());

@Autowired
SimpleMailMessage email;

@Autowired
private MailSender mailSender;

@Override
public void onApplicationEvent(OnPostUserDataEvent onPostUserDataEvent) {
    this.confirmPost(onPostUserDataEvent);
}

private void confirmPost(OnPostUserDataEvent onPostUserDataEvent) {
    logger.info("new user " + onPostUserDataEvent.getUser().getName() + " is created");

    User user = onPostUserDataEvent.getUser();
    String recipient = user.getEmail();
    String subject = "Registration Confirmation";
    String url = onPostUserDataEvent.getAppUrl();
    String message = "Thank you for registering. Please click on the below link to activate your account";
    email.setTo(recipient);
    email.setSubject(subject);
    email.setText(message + "http://localhost:8080" + url);
    mailSender.send(email);

   }
 }

而且我无法理解 MessagingException 的性质。这是否意味着错过了这个类异常。或者它意味着其他类型的问题?...

标签: javaspringjakarta-mailspring-messagingmail-sender

解决方案


推荐阅读