2010-04-21 106 views
1

它工作正常,没有多部分(从example in Spring documentation修改):发送多部分电子邮件失败

final MimeMessagePreparator preparator = new MimeMessagePreparator() { 
    public void prepare(final MimeMessage mimeMessage) throws Exception { 
     final MimeMessageHelper message = new MimeMessageHelper(
       mimeMessage); 
     message.setTo(toAddress); 
     message.setFrom(fromAddress); 
     message.setSubject(subject); 
     final String htmlText = FreeMarkerTemplateUtils 
       .processTemplateIntoString(configuration 
         .getTemplate(htmlTemplate), model); 
     message.setText(htmlText, true); 
    } 
}; 
mailSender.send(preparator); 

但是,一旦我将其更改为:

final MimeMessagePreparator preparator = new MimeMessagePreparator() { 
    public void prepare(final MimeMessage mimeMessage) throws Exception { 
     final MimeMessageHelper message = new MimeMessageHelper(
       mimeMessage, true); 
... 
     message.setText(plainText, htmlText); 
    } 
}; 
mailSender.send(preparator); 

我得到:

Failed message 1: 
javax.mail.MessagingException: Converting attachment data failed 
    at com.google.appengine.api.mail.stdimpl.GMTransport.sendMessage(GMTransport.java:231) 
    at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:402) 
... 

由于GMTransport是一个专有的谷歌类和n o来源可用,要弄清楚问题是相当困难的(至少在我的技能方面)。任何人有任何想法接下来要尝试什么?

我的豆配置,帮助您帮我:

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl" 
     p:username="${mail.username}" p:password="${mail.password}" 
     p:protocol="gm" /> 

回答

0

我最近碰到这个,并且在任何网站上找不到解决方案。问题在于MimeMessageHelper构造函数默认使用的multipartMode参数。

变化:

MimeMessageHelper h = new MimeMessageHelper(mimeMessage, true); 

要:

MimeMessageHelper h = new MimeMessageHelper(
    mimeMessage, 
    MimeMessageHelper.MULTIPART_MODE_RELATED); 

第一种形式将默认为MimeMessageHelper.MULTIPART_MODE_MIXED_RELATED。该文档指出:

这是自Spring 1.2.1以来的默认值。根据MIME规范,这可以说是最正确的MIME结构:已知可以在Outlook,Outlook Express,Yahoo Mail和Lotus Notes上正常工作。在Mac Mail上无法正常工作。如果您定位Mac邮件或遇到Outlook上特定邮件的问题,请考虑使用MULTIPART_MODE_RELATED。

它可能应该更新,以包括它不适用于AppEngine的邮件API。替换模式可能不太正确,但似乎更加兼容。