2011-01-03 6 views
5

Wie erstellen Sie eine E-Mail-Nachricht, die Text und HTML-Version für denselben Inhalt enthält?Mehrteilige Nachricht im MIME-Format erstellen Freemarker-Vorlage über Spring 3 JavaMail

Natürlich würde ich gerne wissen, wie man die Freemarker Vorlage oder den Header der Nachricht, die gesendet werden, einrichten wird.

Wenn ich mich auf der Quelle der Nachricht mehrteilige Nachricht im MIME-Format, das ich in der Inbox in jeden einmal empfangen, während das ist, was da drin ist:

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> 

Antwort

4

Wenn Sie irgendwelche Unregelmäßigkeiten erkennen Sie mich bitte kennt. Ich musste dies aus einem ziemlich komplexen Objekt extrahieren, deshalb sieht das so aus.

//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

Wenn der Frühling mit Sie tun können:

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); 

Und es wird die Arbeit erledigen. Es ist kein Freemarker-Material beteiligt.

Der Mailsender kann sein:

<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>