2010-04-21 12 views
1

Il fonctionne très bien sans la partie à plusieurs (modifié à partir du example in Spring documentation):Envoi de messages électroniques à plusieurs parties de Google App Engine avec JavaMailSender Spring ne

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

Mais une fois que je change à:

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

je reçois:

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

Depuis le GMTransport est une classe Google propriétaire et n o la source est disponible, il est assez difficile de comprendre le problème (au moins avec mes compétences). Quelqu'un at-il des idées sur ce qu'il faut essayer ensuite?

Ma config de haricots, pour aider vous pour me aider:

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

Répondre

0

Je suis récemment tombé sur cette question et je n'ai trouvé aucune solution sur aucun site Web. Le problème réside dans le paramètre multipartMode utilisé par défaut par les constructeurs MimeMessageHelper.

Change:

MimeMessageHelper h = new MimeMessageHelper(mimeMessage, true); 

Pour:

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

La première forme par défaut à MimeMessageHelper.MULTIPART_MODE_MIXED_RELATED. La documentation indique:

Ceci est la valeur par défaut depuis le printemps 1.2.1. C'est sans doute la structure MIME la plus correcte, selon les spécifications MIME: Il est connu pour fonctionner correctement sur Outlook, Outlook Express, Yahoo Mail et Lotus Notes. Ne fonctionne pas correctement sur Mac Mail. Si vous ciblez Mac Mail ou rencontrez des problèmes avec des messages spécifiques sur Outlook, envisagez d'utiliser MULTIPART_MODE_RELATED à la place.

Il devrait probablement être mis à jour pour inclure le fait qu'il ne fonctionne pas avec l'API Mail d'AppEngine. Le mode de remplacement peut être moins correct, mais semble être plus compatible.