05 Servico de Email
05 Servico de Email
05 Servico de Email
https://www.udemy.com/user/nelio-alves
Prof. Dr. Nelio Alves
Objetivo geral:
ATUALIZAÇÃO
Se você criou o projeto usando Spring Boot versão 2.x.x:
https://github.com/acenelio/springboot2-ionic-backend
https://github.com/acenelio/springboot2-ionic-
backend/blob/c44d2517d356b34291313f479aede43e89400e6a/src/main/java/com/nelioalves/cursomc/services/PedidoService.java
Checklist:
Checklist:
Adicionar a dependência no POM.XML
Remetente e destinatário default no application.properties
Criar a interface EmailService (padrão Strategy)
Criar a classe abstrata AbstractEmailService
o Criar método prepareSimpleMailMessageFromPedido
o Sobrescrever o método sendOrderConfirmationEmail (padrão Template Method)
Implementar o MockEmailService
Em TestConfig, criar um método @Bean EmailService que retorna uma instância de MockEmailService
Notas:
1) Para testar não se esqueça de subir o MySQL
2) Na primeira tentativa de envio de email você vai receber um erro porque o Google por padrão bloqueia tentativa
de email por app:
Referência:
https://stackoverflow.com/questions/25341198/javax-mail-authenticationfailedexception-is-thrown-while-sending-email-in-java/33801654
https://www.google.com/settings/security/lesssecureapps
https://accounts.google.com/b/0/DisplayUnlockCaptcha
Email HTML
Checklist:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
2) Criar o template Thymeleaf para o email (código no final deste documento). Criar o arquivo em:
resources/templates/email/confirmacaoPedido.html
4) Em AbstractEmailService, incluir o seguinte método, que será responsável por retornar o HTML preenchido com
os dados de um pedido, a partir do template Thymeleaf:
<h1>
Pedido número: <span th:text="${pedido.id}"> </span>
</h1>
<p>
Instante: <span
th:text="${#dates.format(pedido.instante, 'dd/MM/yyyy hh:mm')}"></span>
</p>
<p>
Cliente: <span th:text="${pedido.cliente.nome}"></span>
</p>
<p>
Situação do pagamento: <span
th:text="${pedido.pagamento.estado.descricao}"></span>
</p>
<h3>Detalhes do pedido:</h3>
<table border="1">
<tr>
<th>Produto</th>
<th>Quantidade</th>
<th>Preço unitário</th>
<th>Subtotal</th>
</tr>
<tr th:each="item : ${pedido.itens}">
<td th:text="${item.produto.nome}">nome</td>
<td th:text="${item.quantidade}">quantidade</td>
<td th:text="${#numbers.formatDecimal(item.preco, 0, 'POINT', 2,
'COMMA')}">preco</td>
<td th:text="${#numbers.formatDecimal(item.subTotal, 0, 'POINT', 2,
'COMMA')}">subTotal</td>
</tr>
</table>
<p>
Valor total: <span th:text="${#numbers.formatDecimal(pedido.valorTotal, 0,
'POINT', 2, 'COMMA')}"></span>
</p>
</div>
</body>
</html>