- JavaMail: Se encarga del envío del correo
- Spring: Responsable de inyectar los beans
Supongamos que tenemos montado un proyecto con Spring y Maven. Lo primero de todo es añadir las dependencias necesarias para realizar el envío de correos al pom.xml:
<dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>velocity</groupId> <artifactId>velocity</artifactId> <version>1.5</version> </dependency> <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.2.1</version> </dependency>
A continuación, nos creamos la plantilla velocity usando html, la llamaremos email-template.vm:
<html> <body> <h3>Hola ${user.username}, bienvenido!</h3> <div> Tu correo electrónico es: <a href="mailto:${user.emailAddress}">${user.emailAddress}</a>. </div> </body> </html>
Ahora añadimos la configuración en spring (en nuestro applicationContext.xml o cualquier otro archivo xml de spring siempre y cuando lo añadáis al classpath). Lo configuraremos para gmail, pero podéis modificarlo para que use otros proveedores.
<!-- Estas dos líneas quizás ya las tengáis, pero las añado por si acaso --> <context:annotation-config /> <context:component-scan base-package="com.mycompany"/> <!-- Debéis usar vuestro usuario y password de vuestra cuenta de gmail u os dará error de conexión (timeout) --> <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> <property name="host"><value>smtp.gmail.com</value></property> <property name="port"><value>587</value></property> <property name="protocol"><value>smtp</value></property> <property name="username"><value>loquesea</value></property> <property name="password"><value>loqueseapw</value></property> <property name="javaMailProperties"> <props> <prop key="mail.smtp.auth">true</prop> <prop key="mail.smtp.starttls.enable">true</prop> <prop key="mail.smtp.quitwait">false</prop> </props> </property> </bean> <!-- El bean de velocity --> <bean id="velocityEngine" class="org.springframework.ui.velocity.VelocityEngineFactoryBean"> <property name="velocityProperties"> <value> resource.loader=class class.resource.loader.class=org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader </value> </property> </bean>
Finalmente, la clase para probar el envío. No es más que un main.
package com.mycompany.manager.impl; import java.util.HashMap; import java.util.Map; import javax.mail.internet.MimeMessage; import org.apache.velocity.app.VelocityEngine; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Required; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.core.io.ClassPathResource; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.mail.javamail.MimeMessagePreparator; import org.springframework.stereotype.Component; import org.springframework.ui.velocity.VelocityEngineUtils; import com.mycompany.model.User; @Component("sendEmailTest") public class SendEmailTest { private JavaMailSender mailSender; private VelocityEngine velocityEngine; public JavaMailSender getMailSender() { return mailSender; } @Autowired @Required public void setMailSender(JavaMailSender mailSender) { this.mailSender = mailSender; } public VelocityEngine getVelocityEngine() { return velocityEngine; } @Autowired @Required public void setVelocityEngine(VelocityEngine velocityEngine) { this.velocityEngine = velocityEngine; } public static void main(String[] args) { // Inicializamos el contexto de Spring ApplicationContext context = new ClassPathXmlApplicationContext( new String[] { "applicationContext.xml" }); SendEmailTest app = (SendEmailTest) context.getBean("sendEmailTest"); // LLamamos al método que prueba el envío del correo app.testEmail(); } public void testEmail() { final User user = new User(); user.setEmailAddress("loquesea@gmail.com"); user.setUsername("loquesea"); MimeMessagePreparator preparator = new MimeMessagePreparator() { public void prepare(MimeMessage mimeMessage) throws Exception { MimeMessageHelper message = new MimeMessageHelper(mimeMessage, true); message.setTo(user.getEmailAddress()); message.setFrom("loquesea@gmail.com"); message.setSubject("Prueba velocity"); message.addAttachment("perfil.png", new ClassPathResource("perfil.png")); Map model = new HashMap(); model.put("user", user); String text = VelocityEngineUtils.mergeTemplateIntoString( velocityEngine, "email-template.vm", model); message.setText(text, true); } }; this.mailSender.send(preparator); } }Si lanzamos el main, y vamos a nuestra cuenta de correo veremos algo como esto (bueno, en los espacios en blanco que he editado en la imagen, saldría vuestro usuario ;)):
Recordar:
Otra opción para probar cómodamente el envío de correos es instalar PostCast Server, dónde pondréis a vuestra máquina como servidor SMTP.
http://www.postcastserver.com/download/release.aspx?p=3
Y ya puestos, si queréis formatear el código de vuestras entradas en un blog, os recomiendo esta página: http://tohtml.com/
No hay comentarios:
Publicar un comentario