Spring Email - αποστολή E-mail

Θα χρησιμoποιήσουμε το Spring Email , για να στείλουμε ένα e-mail στο χρήστη, με τα στοιχεία της παραγγελίας.

Dependency

Προσθέτουμε στο αρχείο pom.xml, τα ακόλουθα dependencies.

                
                        <dependency>
                            <groupId>org.springframework.boot</groupId>
                            <artifactId< spring-boot-starter-mail </artifactId>
                        </dependency>
                
            
Application Properties

Θα χρησιμoποιήσουμε το gmail, για να στείλουμε το email. Προσθέτουμε properties στο αρχείο application.properties, όπως τον SMTP server host, το port του SMTP server, το όνομα χρήστη και τον κωδικό.

                
                        spring.mail.host=smtp.gmail.com
                        spring.mail.port=587
                        spring.mail.username = ${GMAIL_USERNAME}
                        spring.mail.password = ${GMAIL_PASSWORD}
                        spring.mail.properties.mail.smtp.auth=true
                        spring.mail.properties.mail.smtp.starttls.enable=true
                
            

Δημιουργούμε την διεπαφή EmailService στο springeshop.service.

                
                        package springeshop.service;

                        public interface EmailService{
                          void sendEmail(Order order, List<CartProduct> cartProducts);
                        } 
                
            

Καλώντας τη μέθοδο sendEmail στέλνουμε το e-mail. Θα χρησιμοποιήσουμε το Thymeleaf template engine, για να περάσουμε τιμές στο αρχείο email.html, που θα δημιουργήσουμε.

                
                        package springeshop.service;

                        @Component
                        public class EmailServiceImpl implements EmailService{

                          @Autowired
                          private  JavaMailSender emailSender;

                          @Autowired
                          private  TemplateEngine templateEngine;

                          @Override
                          @Async
                          public void sendEmail(Order order, List<CartProduct> cartProducts) {

                            try{
                              String processedHTMLTemplate = this.constructHTMLTemplate(order, cartProducts);
                              MimeMessage message = emailSender.createMimeMessage();
                              MimeMessageHelper helper = new MimeMessageHelper(message, false, "UTF-8");
                              helper.setTo(order.getEmail()); 
                              helper.setSubject("Παραγγελία " + order.getId()); 
                              helper.setText(processedHTMLTemplate, true);
                              emailSender.send(message);
                            }catch(MessagingException e) {
                              e.printStackTrace();
                            }
                          }

                          private double getTotalCartPrice(List<CartProduct> cartProducts){

                            Context context = new Context();
                            context.setVariable("order", order);
                            context.setVariable("userFullName", getUserName(order));
                            context.setVariable("date", getDate(order.getOrder_date()));
                            context.setVariable("billingInfoFullName", order.getBillingInfo().getFirst_name() + " " + order.getBillingInfo().getLast_name());
                            context.setVariable("shippingInfoFullName", order.getShippingInfo().getFirst_name() + " " + order.getShippingInfo().getLast_name());
                            context.setVariable("cartProducts", cartProducts);
                            context.setVariable("totalCartPrice", getTotalCartPrice(cartProducts));
                            return templateEngine.process("email", context);
                          }

                          private double getTotalCartPrice(List<CartProduct> cartProducts){

                            double total = 0;
                            for(CartProduct cartProduct : cartProducts){
                              total += cartProduct.getQuantity() * cartProduct.getPrice();
                            }
                            return total;
                          }

                          private String getUserName(Order order){

                            return order.getUser() == null ? null : order.getUser().getFirst_name() + ' ' + order.getUser().getLast_name();
                          }

                          private String getDate(Timestamp date){

                            SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
                            return dateFormat.format(new Date());
                          }

                    }
                
            
Thymeleaf

Θα δημιουργήσουμε ένα αρχείο email.html στο φάκελο /resources/templates.

email.html

Email

Email

Email

Εμφάνιση Email
Email

Email