package org.springframework.samples.jpetstore.domain.logic; import java.lang.reflect.Method; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.aop.AfterReturningAdvice; import org.springframework.beans.factory.InitializingBean; import org.springframework.mail.MailException; import org.springframework.mail.MailSender; import org.springframework.mail.SimpleMailMessage; import org.springframework.samples.jpetstore.domain.Account; import org.springframework.samples.jpetstore.domain.Order; /** * AOP advice that sends confirmation email after order has been submitted * @author Dmitriy Kopylenko */ public class SendOrderConfirmationEmailAdvice implements AfterReturningAdvice, InitializingBean { private static final String DEFAULT_MAIL_FROM = "jpetstore@springframework.org"; private static final String DEFAULT_SUBJECT = "Thank you for your order!"; private final Log logger = LogFactory.getLog(getClass()); private MailSender mailSender; private String mailFrom = DEFAULT_MAIL_FROM; private String subject = DEFAULT_SUBJECT; public void setMailSender(MailSender mailSender) { this.mailSender = mailSender; } public void setMailFrom(String mailFrom) { this.mailFrom = mailFrom; } public void setSubject(String subject) { this.subject = subject; } public void afterPropertiesSet() throws Exception { if (this.mailSender == null) { throw new IllegalStateException("mailSender is required"); } } public void afterReturning(Object returnValue, Method m, Object[] args, Object target) throws Throwable { Order order = (Order) args[0]; Account account = ((PetStoreFacade) target).getAccount(order.getUsername()); // don't do anything if email address is not set if (account.getEmail() == null || account.getEmail().length() == 0) { return; } StringBuffer text = new StringBuffer(); text.append("Dear ").append(account.getFirstName()).append(' ').append(account.getLastName()); text.append(", thank your for your order from JPetStore. Please note that your order number is "); text.append(order.getOrderId()); SimpleMailMessage mailMessage = new SimpleMailMessage(); mailMessage.setTo(account.getEmail()); mailMessage.setFrom(this.mailFrom); mailMessage.setSubject(this.subject); mailMessage.setText(text.toString()); try { this.mailSender.send(mailMessage); } catch (MailException ex) { // just log it and go on logger.warn("An exception occured when trying to send email", ex); } } }