繁体   English   中英

使用Spring的JavaMailSender从Google App Engine发送多部分电子邮件失败

[英]Sending multi-part email from Google App Engine using Spring's JavaMailSender fails

它不需要多个部分即可正常工作(从Spring文档中示例进行了修改):

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是Google专有的类,并且没有可用的资源,因此很难找出问题所在(至少与我的技能有关)。 任何人都有任何下一步的想法吗?

我的bean配置,可帮助帮助我:

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

我最近遇到了这个问题,在任何网站上都找不到解决方案。 问题在于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 Mail或在Outlook上遇到特定邮件的问题,请考虑改用MULTIPART_MODE_RELATED。

可能应该对其进行更新,以包括它不适用于AppEngine的Mail API。 替换模式可能不太正确,但似乎更兼容。

使用香草(javax.mail。*)JavaMail库时,我没有任何问题。 请参阅此处http://code.google.com/appengine/docs/java/mail/usingjavamail.html#Multi_Part_Messages

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM