2011-01-03 9 views
5

¿Cómo se puede crear un mensaje de correo electrónico que contenga texto y una versión HTML para el mismo contenido?Crear mensaje de varias partes en formato MIME Plantilla de Freemarker a través de Spring 3 JavaMail

Por supuesto, me gustaría saber cómo configurar la plantilla del marcador libre o el encabezado del mensaje que se enviará.

Cuando miro en la fuente de mensaje mensaje de varias partes en formato MIME que recibo en la bandeja de entrada de vez en mientras que esto es lo que está ahí:

This is a multi-part message in MIME format. 

------=_NextPart_000_B10D_01CBAAA8.F29DB300 
Content-Type: text/plain 
Content-Transfer-Encoding: 7bit 

...Text here... 

------=_NextPart_000_B10D_01CBAAA8.F29DB300 
Content-Type: text/html; 
charset="iso-8859-1" 
Content-Transfer-Encoding: quoted-printable 

<html><body> html code here ... </body></html> 

Respuesta

4

Si encuentra alguna inconsistencia Si no me deja saber. Tuve que extraer esto de un objeto bastante complejo, por eso parece que sí.

//some important imports 
import freemarker.template.Template; 
import org.springframework.mail.javamail.*; 
import org.springframework.context.*; 
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer; 
import javax.mail.internet.MimeMessage; 

private JavaMailSender mailSender; 
private MessageSource messageSource; 
private ExecutorService executor = Executors.newFixedThreadPool(50); 

MimeMessagePreparator preparator = new MimeMessagePreparator() { 
    public void prepare(MimeMessage mimeMessage) throws Exception { 
     MimeMessageHelper message = new MimeMessageHelper(mimeMessage); 

      message.setFrom(from); 
      message.setTo(recipient); 
      message.setSubject(subject); 

      // Now the message body. 
      Multipart mp = new MimeMultipart(); 

      BodyPart textPart = new MimeBodyPart(); 
      Template textTemplate = freemarkerConfig.getConfiguration().getTemplate(textEmailTemplate); // "/WEB-INF/emailText/*.ftl" 
      final StringWriter textWriter = new StringWriter(); 
      textEmailTemplate.process(modelMap, textWriter); 
      textPart.setText(textWriter.toString()); // sets type to "text/plain" 


      BodyPart pixPart = new MimeBodyPart(); 
      Template pixTemplate = freemarkerConfig.getConfiguration().getTemplate(pixEmailTemplate); // "/WEB-INF/emailPix/*.ftl" 
      final StringWriter pixWriter = new StringWriter(); 
      textEmailTemplate.process(modelMap, pixWriter); 
      pixPart.setContent(pixWriter.toString(), "text/html"); 

      // Collect the Parts into the MultiPart 
      mp.addBodyPart(textPart); 
      mp.addBodyPart(pixPart); 
      // Put the MultiPart into the Message 
      message.setContent(mp);     

    } 
}; 

executor.submit(new SendMail(preparator)); 

class SendMail extends Thread { 
    MimeMessagePreparator preparator; 

    SendMail(MimeMessagePreparator preparator) { 
     this.preparator = preparator; 
    } 

    public void run() { 
     mailSender.send(preparator); 
     } 
} 
1

Cuando se utiliza la primavera que puede hacer:

String plainText = "MyPleinText"; 
    String htmlText = "<html><body><h1>MyHTML</h1></body></html>"; 
    MimeMessage message = this.mailSender.createMimeMessage(); 
    MimeMessageHelper helper = new MimeMessageHelper(message, true, MAIL_ENCODING); 
    helper.setText(plainText,htmlText); 

y va a hacer el trabajo. No hay material de Freemarker involucrado.

El MailSender puede ser:

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> 
    <property name="host" value="${smtp.host}" /> 
    <property name="port" value="${smtp.port}" /> 
    <property name="defaultEncoding" value="UTF-8" /> 
    </bean> 
Cuestiones relacionadas