3
respostas

Erro 'org.springframework.mail.javamail.JavaMailSender'

Eu estou com o mesmo erro de outro colega, no topico dele ainda sem solução. Ao executar: docker compose up --build

app-1    | Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.                                                                                                                                                                                  
app-1    | 2024-10-23T00:16:07.595Z ERROR 1 --- [codechella-api] [           main] o.s.b.d.LoggingFailureAnalysisReporter   :                                                                                                                                                                                           
app-1    | 
app-1    | ***************************                                                                                                                                                                                                                                                                                  
app-1    | APPLICATION FAILED TO START                                                                                                                                                                                                                                                                                  
app-1    | ***************************                                                                                                                                                                                                                                                                                  
app-1    | 
app-1    | Description:                                                                                                                                                                                                                                                                                                 
app-1    |                                                                                                                                                                                                                                                                                                              
app-1    | Parameter 0 of constructor in br.com.alura.codechella.infra.email.EnviadorDeEmailReal required a bean of type 'org.springframework.mail.javamail.JavaMailSender' that could not be found.                                                                                                                    
app-1    |                                                                                                                                                                                                                                                                                                              
app-1    |                                                                                                                                                                                                                                                                                                              
app-1    | Action:
app-1    |                                                                                                                                                                                                                                                                                                              
app-1    | Consider defining a bean of type 'org.springframework.mail.javamail.JavaMailSender' in your configuration.       
3 respostas

minha classe EnviadorDeEmailReal.java

package br.com.alura.codechella.infra.email;

import br.com.alura.codechella.domain.email.EnviadorDeEmail;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Profile;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

@Component
@Profile("prod")
public class EnviadorDeEmailReal implements EnviadorDeEmail {

    @Autowired
    private JavaMailSender emailSender;

    @Async
    public void enviar(String destinatario, String assunto, String mensagem) {
        try {
            var email = new SimpleMailMessage();
            email.setFrom("naoresponda@codechella.com.br");
            email.setTo(destinatario);
            email.setSubject(assunto);
            email.setText(mensagem);
            emailSender.send(email);
        } catch (Exception e) {
            throw new RuntimeException("Erro ao enviar email!", e);
        }
    }

}

a pasta "env" está na raiz do projeto, com os arquivos de configuração app.env e mysql.env devidamente preenchidos.

Oi, Cleyton! Como vai?

Sobre sua última dúvida, o erro que você está enfrentando indica que o bean do JavaMailSender não está sendo encontrado no contexto da sua aplicação. Isso geralmente acontece quando a configuração para o envio de e-mails não foi feita corretamente.

Para resolver, você precisa adicionar a configuração do bean do JavaMailSender diretamente no Spring. Veja como configurar:

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

import java.util.Properties;

@Configuration
public class MailConfig {

    @Bean
    public JavaMailSender javaMailSender() {
        JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
        mailSender.setHost("smtp.gmail.com");
        mailSender.setPort(587);

        mailSender.setUsername("seu-email@gmail.com");
        mailSender.setPassword("sua-senha");

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

Ajuste as propriedades conforme seu provedor de e-mail (neste exemplo, usei Gmail). Assim, o JavaMailSender será registrado no contexto do Spring.

Fico à disposição e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Olá, obrigado por responder. O erro mudou, mas continua não funcionando.

2024-10-24T21:45:07.179-03:00  WARN 2980 --- [codechella-api] [  restartedMain] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import candidates for configuration class [br.com.alura.codechella.CodechellaApplication]: Error processing condition on org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration
2024-10-24T21:45:07.185-03:00  INFO 2980 --- [codechella-api] [  restartedMain] .s.b.a.l.ConditionEvaluationReportLogger : 

Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.
2024-10-24T21:45:07.204-03:00 ERROR 2980 --- [codechella-api] [  restartedMain] o.s.boot.SpringApplication               : Application run failed

org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import candidates for configuration class [br.com.alura.codechella.CodechellaApplication]: Error processing condition on org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration