Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Exception ao enviar e-mail

Assim como aconteceu na aula 08, estou tendo um erro 500 após a tentativa de envio de e-mail ao finalizar o pedido no carrinho. Alguém sabe o motivo do erro e como corrigir?

Obrigado.

3 respostas

oi eulen,

manda a exception completa do erro, o código que envia o email também por favor.

OI Caio, desculpa não é exatamente uma exception, até pq nao aparece nenhum erro no console e tambem nenhuma stacktrace. So obtenho a página com erro 500 do tomcat após alguns segundos de inatividade. É o mesmo caso que ocorreu durante a aula com o instrutor. Porém não vi ele resolvendo durante o curso e também nada consta nas anotações da aula.

Abaixo o código. Obrigado

No controller

@SuppressWarnings("finally")
@RequestMapping(value = "/finalizar", method = RequestMethod.POST)
public Callable<ModelAndView> finalizar(@AuthenticationPrincipal Usuario usuario, RedirectAttributes model) {
        return () -> {
            String uri = "http://book-payment.herokuapp.com/payment";
            try {
                String response = restTemplate.postForObject(uri, new DadosPagamento(carrinho.getTotal()),
                        String.class);

                model.addFlashAttribute("sucesso", response);
                // envia email para o usuário
                enviaEmailCompraProduto(usuario);
                System.out.println(response);
            } catch (HttpClientErrorException e) {
                e.printStackTrace();
                model.addFlashAttribute("falha", "Valor maior que o permitido");
            } catch (Exception e){
                e.printStackTrace();
            }finally {
                return new ModelAndView("redirect:/produtos");
            }
        };
    }

    private void enviaEmailCompraProduto(Usuario usuario) {
        SimpleMailMessage email = new SimpleMailMessage();
        email.setSubject("Compra finalizada com sucesso");

        //email.setTo(usuario.getEmail());
        email.setTo("eulen.mesquita@gmail.com");
        email.setText("Compra aprovada com sucesso no valor de " + carrinho.getTotal());
        email.setFrom("compras@casadocodigo.com.br");

        sender.send(email);
    }

no AppWebConfig

@Bean
    public MailSender mailSender(){
        JavaMailSenderImpl mailSender = new JavaMailSenderImpl();

        mailSender.setHost("smtp.gmail.com");
        mailSender.setUsername("eulen.mesquita@gmail.com");
        mailSender.setPassword("xxxxxxx");
        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;
    }
solução!

Não consegui descobrir a razão do erro 500, mas resolvi tentar utilizar o envio de e-mail do cuso de Spring Boot do Lárazo e funcionou direitinho. Consegui receber o e-mail e o fluxo da aplicação seguiu perfeitamente.

Obrigado pela atenção, abraço a todos.

private void enviaEmailCompraProduto(Usuario usuario) {    
        try {
            Email email = new SimpleEmail();
            email.setHostName("smtp.googlemail.com");
            email.setSmtpPort(465);
            email.setAuthenticator(new DefaultAuthenticator("user", "senha"));
            email.setSSLOnConnect(true);

            email.setFrom("contato@bigminds.io");
            email.setSubject("Sua compra na CasaDoCodigo foi aprovada");
            email.setMsg("Compra aprovada com sucesso no valor de " + carrinho.getTotal());
            //email.addTo(usuario.getEmail());
            email.addTo("eulen.mesquita@gmail.com");
            email.send();

        } catch (EmailException e) {
            e.printStackTrace();
        }
    }

Biblioteca de email da Apache:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-email</artifactId>
    <version>1.4</version>
</dependency>