1
resposta

MessageRemovedIOException ao enviar e-mail

Olá, está ocorrendo uma exceção ao tentar enviar e-mail pelo Spring. Segue descrição do console:

GRAVE: Servlet.service() for servlet [dispatcher] threw exception
java.lang.ClassNotFoundException: com.sun.mail.util.MessageRemovedIOException
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1291)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1119)
    at org.springframework.mail.javamail.JavaMailSenderImpl.createMimeMessage(JavaMailSenderImpl.java:326)
    at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:304)
    at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:297)
    at casadocodigo.loja.controllers.PagamentoController.enviaEmailCompraProduto(PagamentoController.java:75)
    at casadocodigo.loja.controllers.PagamentoController.lambda$0(PagamentoController.java:53)
    at org.springframework.web.context.request.async.WebAsyncManager$4.run(WebAsyncManager.java:316)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

nov 18, 2017 7:15:26 PM org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet [dispatcher] in context with path [/casadocodigo] threw exception [Async processing failed; nested exception is java.lang.NoClassDefFoundError: com/sun/mail/util/MessageRemovedIOException] with root cause
java.lang.ClassNotFoundException: com.sun.mail.util.MessageRemovedIOException
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1291)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1119)
    at org.springframework.mail.javamail.JavaMailSenderImpl.createMimeMessage(JavaMailSenderImpl.java:326)
    at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:304)
    at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:297)
    at casadocodigo.loja.controllers.PagamentoController.enviaEmailCompraProduto(PagamentoController.java:75)
    at casadocodigo.loja.controllers.PagamentoController.lambda$0(PagamentoController.java:53)
    at org.springframework.web.context.request.async.WebAsyncManager$4.run(WebAsyncManager.java:316)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

Inclusive, a dependência do JavaMail que o instrutor usa não é reconhecida pelo Maven. Troquei para esta:

<!-- https://mvnrepository.com/artifact/javax.mail/javax.mail-api -->
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>javax.mail-api</artifactId>
            <version>1.5.6</version>
        </dependency>

Código do controller:

private void enviaEmailCompraProduto(Usuario usuario) {    
    SimpleMailMessage email = new SimpleMailMessage();
    email.setSubject("Compra finalizada com sucesso.");
    email.setTo("xxxx@gmail.com");
    email.setText("Compra aprovada com sucesso no valor de " + carrinho.getTotal());
    email.setFrom("compras@casadocodigo.com.br");

    sender.send(email);
}

AppWebConfiguration:

@Bean
public MailSender mailSender() {
    JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
    mailSender.setHost("smtp.gmail.com");
    mailSender.setUsername("xxxx@gmail.com");
    mailSender.setPassword("xxxx");
    mailSender.setPort(587);

    Properties mailProperties = new Properties();
    mailProperties.put("mail.smtp.auth", true);
    mailProperties.put("mail.smtp.starttls.enable", true);
    mailSender.setJavaMailProperties(mailProperties);

    return mailSender;

}

Alguém poderia ajudar?

1 resposta

Opa, realmente você já chegou na questão.. a dependência não está sendo reconhecida. Entretanto, a sua alteração ainda deixou alguma coisa faltando:

java.lang.ClassNotFoundException

Tem que olhar se é a versão ou se realmente ta faltando mais alguma dependência.