2010-04-21 23 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。替換模式可能不太正確,但似乎更加兼容。

相關問題