In this sample I'm integrating the spring & velocity with struts2 and portlets, but could be extrapolated to any other environment.
The recipe consists of:
- applicationContextBeans.xml -> the sprig config file (the glue)
- registrarse.vm -> a velocity template of our e-mail
- EmailService.java & EmailServiceImpl.java -> the classes to apply the data to the template and send the e-mail. These classes will be the same for all the e-mails, so could be in a separate jar.
- RegistrarseAction.java -> the struts2 action
-applicationContextBeans.xml:
<bean id="emaiInformacionlService" class="es.project.miGestion.administracionDatos.service.EmailServiceImpl" scope="prototype"> <property name="velocityEngine" ref="velocityEngine"></property> <property name="velocityTpl" value="es/project/velocity/solicitudInformacion.vm"></property> <property name="inlineFiles"> <map> <entry> <key> <value>id001</value> </key> <value>classpath:es/project/velocity/logoproject.png</value> </entry> </map> </property> </bean> <bean id="emailRegistrarseService" class="es.project.miGestion.administracionDatos.service.EmailServiceImpl" scope="prototype"> <property name="velocityEngine" ref="velocityEngine"></property> <property name="velocityTpl" value="es/project/velocity/registrarse.vm"></property> <property name="inlineFiles"> <map> <entry> <key> <value>id001</value> </key> <value>classpath:es/project/velocity/logoproject.png</value> </entry> </map> </property> </bean>
- registrarse.vm:
<div id="logo"> <p align="right"><img src="cid:id001" /></p> </div> <div id="header"> <font size="2" style="font-family: Arial; color: rgb(51, 90, 143);"> A la Atención del Servicio de Atención Telefónica <br><br> Cliente registrado en el formulario de la web. #set ($bar = "cliente") #if (${cliente} == $bar) Ya es cliente de project y desea que un comercial se encarge de darle de alta en la Web de project: #else No es cliente de project y desea que un comercial se encarge de darle de alta en la Web de project: #end </font> </div> <br> <div id="content"> <font size="2" style="font-family: Arial; color: rgb(51, 90, 143);"> <table class="width100" border="0" cellspacing="0" cellpadding="0"> <tr> <td style="font-size: 9pt; font-family: Arial; color: rgb(51, 90, 143);" width="110">Nombre</td> <td style="font-size: 9pt; font-family: Arial; color: rgb(51, 90, 143);" >${nombre} ${apellidos}</td> </tr> <tr> <td style="font-size: 9pt; font-family: Arial; color: rgb(51, 90, 143);" >DNI</td> <td style="font-size: 9pt; font-family: Arial; color: rgb(51, 90, 143);" >${dni}</td> </tr> <tr> <td style="font-size: 9pt; font-family: Arial; color: rgb(51, 90, 143);" >Dirección:</td> <td style="font-size: 9pt; font-family: Arial; color: rgb(51, 90, 143);" >${direccion},${cp} ${poblacion} - ${pais}</td> </tr> <tr> <td style="font-size: 9pt; font-family: Arial; color: rgb(51, 90, 143);" >Telefono:</td> <td style="font-size: 9pt; font-family: Arial; color: rgb(51, 90, 143);" >${telefono}</td> </tr> <tr> <td style="font-size: 9pt; font-family: Arial; color: rgb(51, 90, 143);" >Movil:</td> <td style="font-size: 9pt; font-family: Arial; color: rgb(51, 90, 143);" >${movil}</td> </tr> <tr> <td style="font-size: 9pt; font-family: Arial; color: rgb(51, 90, 143);" >Email:</td> <td style="font-size: 9pt; font-family: Arial; color: rgb(51, 90, 143);" >${mail}</td> </tr> #if (${cliente} == $bar) <tr> <td style="font-size: 9pt; font-family: Arial; color: rgb(51, 90, 143);" >Número cuenta:</td> <td style="font-size: 9pt; font-family: Arial; color: rgb(51, 90, 143);" >${numeroCuenta}</td> </tr> #end </table> </font> </div> <br> <hr size="2" width="100%" align="left"> <span style="font-size: 7.5pt; font-family: Arial; color: rgb(51, 90, 143);"> ..... </span>
- EmailServiceImpl.java
... private VelocityEngine velocityEngine; private JavaMailSender javaMailSender; private String velocityTpl; private Map<String,Resource> inlineFiles; /** * Creaci�n y env�o de e-mail. * @param from E-mail de origen * @param recipients E-mails de destino * @param subject Asunto del e-mail * @param params Par�metros para la generaci�n del cuerpo del e-mail */ public void sendEmail(String from, String[] recipients, String subject, Map<String,Object> params) { log.debug("sendEmail inicio"); final String f = from; final String s = subject; final Map<String,Object> p = params; for(final String to : recipients){ MimeMessagePreparator preparator = new MimeMessagePreparator(){ public void prepare(MimeMessage mimeMessage) throws Exception{ MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true); helper.setFrom(f); helper.setTo(to); helper.setSubject(MimeUtility.encodeText(s, "iso-8859-1", "B")); Map<String,Object> model = p; String text = VelocityEngineUtils.mergeTemplateIntoString(velocityEngine,velocityTpl,model); helper.setText(text, true); // añadiendo los ficheros "en línea" if (getInlineFiles() != null) { for (String key :getInlineFiles().keySet()) { Resource value = getInlineFiles().get(key); helper.addInline(key, value); if (log.isDebugEnabled()) { log.debug("File '" + value + "' added."); } } } } }; javaMailSender.send(preparator); } log.debug("sendEmail fin"); } /** * Create and setup the mail sender component * @param mailTO */ public void initializeJavaMailSender(MailTO mailTO){ log.debug("initializeJavaMailSender inicio"); //Create and setup the mail sender component JavaMailSenderImpl mailSender = new JavaMailSenderImpl(); mailSender.setHost(mailTO.getHostMail()); mailSender.setPort(Integer.valueOf(mailTO.getPort())); mailSender.setUsername(mailTO.getUsername()); mailSender.setPassword(mailTO.getPassword()); //We need this setting for force Javamail to pass the login boolean mailSmtpAuth = mailTO.getMailSmtpAuth().equals("true"); boolean starttls = mailTO.getStarttls().equals("true"); Properties props = new Properties(); if(mailSmtpAuth){ log.debug("mailSmtpAuth true:"+mailTO.getMailSmtpAuth()); props.setProperty("mail.smtp.auth", mailTO.getMailSmtpAuth()); } if(starttls){ log.debug("starttls true:" + mailTO.getStarttls()); props.setProperty("mail.smtp.starttls.enable", mailTO.getStarttls()); } mailSender.setJavaMailProperties(props); javaMailSender = mailSender; log.debug("initializeJavaMailSender fin"); } ...
- RegistrarseAction.java
// Enviar los datos por mail emailRegistrarseService.initializeJavaMailSender(mailTO); String[] recipients = mailTO.getToMail().split(";"); String[] emailUsuario = mail.split(";"); Map<String, Object> params = new HashMap<String, Object>(); params.put("cliente", cliente); params.put("nombre", nombre); params.put("apellidos", apellidos); params.put("dni", dni); params.put("direccion", direccion); params.put("poblacion", poblacion); params.put("mail", mail); params.put("telefono", telefono); params.put("pais", pais); params.put("cp", cp); params.put("movil", movil); params.put("numeroCuenta", numeroCuenta); emailRegistrarseService.sendEmail(mail, recipients, mailTO.getSubject(), params);