Θα χρησιμoποιήσουμε το Spring Email , για να στείλουμε ένα e-mail στο χρήστη, με τα στοιχεία της παραγγελίας.
Προσθέτουμε στο αρχείο pom.xml, τα ακόλουθα dependencies.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId< spring-boot-starter-mail </artifactId>
</dependency>
Θα χρησιμ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());
}
}
Θα δημιουργήσουμε ένα αρχείο email.html στο φάκελο /resources/templates.
email.html